Definitions:
    Edit Protocol Material Type - The material types defined in Section 6.1 of
                                  the Edit protocol.

Test Name:
    FileLoad
Description:
    Load an AAF file and create a test graph.
Requirements Tested:
    NONE
Warn Conditions:
    NONE
Fail Conditions:
    NONE
Issues:
    NONE

Test Name:
    RefResolver
Description:
    Visit all mobs and resolve references.
Requirements Tested:
    NONE
Warn Conditions:
    REQ_??_??? - Present a warning if a mob references a mob that is not in the
                 open AAF file.
Fail Conditions:
    NONE
Issues:
    NONE

Test Name:
    AcyclicAnalysis
Description:
    Determine if the test graph contains any cycles.
Requirements Tested:
    NONE
Warn Conditions:
    NONE
Fail Conditions:
    REQ_??_??? - Fail if a cycle is detected in the test graph.
Issues:
    NONE

Test Name:
    DecorateEPTest
Description:
    Visit all mobs and decorate each mob using the decorator design pattern
with its Edit Protocol material type.
Requirements Tested:
    NONE
Warn Conditions:
    NONE
Fail Conditions:
    NONE
Issues:
33. Essence track is not defined.  It is assumed to be a MobSlot where
	IsSoundKind() or IsPictureKind() returns true.

42. REQ_EP_099 and REQ_EP_100 state that the edit rates of audio tracks must
    equal the sample rate and the edit rates of video tracks must be less than
    or equal to the sample rate respectively.  Currently, it is assumed that an
    audio track is a mob slot where IsSoundKind() is true that contains a
    File Source mob and a video track is a mob slot where IsPictureKind() is
    true that contains a File Source mob.  This includes StaticMobSlots, which
    do not have edit rates.  Until more information is avaliable, all
    StaticMobSlots will cause test failures.

48. Effects are being classified solely based upon their AUIDs, not the rest
    of their definition.  There should be a requirement that can be tested that
    states the AUID can only be used for effects matching the definitions
    specified in section 12.

Test Name:
    CompMobDependency
Description:
    Visit all composition mobs to determine which ones are unreferenced.
Requirements Tested:
    NONE
Warn Conditions:
    NONE
Fail Conditions:
    NONE
Issues:
    NONE

Test Name:
    EPDerivationTest
Description:
    Trace down the derivation chain starting at the unfererenced composition
    mobs identified in the CompMobDependency test.  Verify that the chain can
    be represented by the state machine in section 6.1 of the Edit Protocol.
Requirements Tested:
    REQ_EP_017 (6.2)
        The end of the derivation change (i.e. the original material), to the
        extent an application is aware of it, shall be specified using a
        zero-value SourceClip object.
    REQ_EP_018 (6.2)
        If a reference is made to a CompositionMob or MasterMob, that Mob shall
        be included in the AAF file.
    REQ_EP_019 (6.2)
        If a reference is made to a SourceMob, that Mob should be included in
        the AAF file.
    REQ_EP_025 (6.3)
        A top-level composition shall be specified using a CompositionMob with
        Mob::UsageCode property equal to Usage_TopLevel.  A top-level
        composition shall not be referenced by another Mob in the AAF file.
    REQ_EP_026 (6.3)
        A top-level composition shall only reference the following kinds of
        material: a lower-level composition, a sub-clip composition, an
        adjusted-clip composition, a template clip, or a clip.
    REQ_EP_030 (6.4)
        A lower-level composition shall be specified using a CompositionMob with
        Mob::UsageCode property equal to Usage_LowerLevel.  A lower-level
        composition shall be referenced by a top-level or lower-level
        composition in the AAF file.
    REQ_EP_031 (6.4)
        A lower-level composition shall only reference the following kinds of
        material: a sub-clip composition, an adjusted-clip composition, a
        template clip, or a clip.
    REQ_EP_036 (6.5)
        A sub-clip composition shall only reference the following kinds of
        material: an adjusted-clip composition, a template clip, or a clip.
    REQ_EP_045 (6.6)
        An adjusted-clip composition shall only reference the following kinds of
        material: a template clip or a clip
    REQ_EP_050 (6.7)
        Each essence track of a template clip shall contain exactly one
        SourceClip.  The SourceClip shall have zero-value to denote the end of
        the known derivation chain.
    REQ_EP_055 (6.8)
        A clip shall only reference the following kinds of material: a file
        source, an import source, a tape source, or a film source.
    REQ_EP_063 (6.9)
        If a file source has any of the following sources, then those source
        mobs should be included and referenced by the file source: an import
        source, a tape source, or a film source.
    REQ_EP_064 (6.9)
        If a file source does not have an import source, a tape source or a film
        source, then it shall reference and include a recording source.
    REQ_EP_072 (6.10)
        Each essence track of a recording source shall contain exactly one
        SourceClip.  The SourceClip shall have zero-value to denote the end of
        the known derivation chain.
    REQ_EP_076 (6.11)
        If an import source has any of the following source, then those source
        mobs should be included and referenced by the import source: a tape
        source or a film source.
    REQ_EP_083 (6.12)
        If a tape has a film source, then it should be included and referenced
        by the tape source.
Warn Conditions:
    REQ_EP_019 - Present a warning for an out of file source mob reference.
Fail Conditions:
    REQ_EP_017 - Fail if the derivation chain ends with something other than a
                 zero-valued SourceClip object.
    REQ_EP_018 - Fail for an out of file master of composition mob reference.
    REQ_EP_025 - Fail if this mob causes an illegal transition in the state
                 machine in section 6.1.
    REQ_EP_026 - Fail if any other type of material is referenced.
    REQ_EP_030 - Fail if this mob causes an illegal transition in the state
                 machine in section 6.1.
    REQ_EP_031 - Fail if any other type of material is referenced.
    REQ_EP_036 - Fail if any other type of material is referenced.
    REQ_EP_045 - Fail if any other type of material is referenced.
    REQ_EP_050 - Fail for an illegal transition out of a template clip
                 (anything that is not a zero-value SourceClip object).
    REQ_EP_055 - Fail if any other type of material is referenced.
    REQ_EP_063/REQ_EP_064 - Fail if any other type of material is referenced.
    REQ_EP_072 - Fail for an illegal transition out of a recording source
                 (anything that is not a zero-value SourceClip object).
    REQ_EP_076 - Fail if any other type of material is referenced.
    REQ_EP_083 - Fail if any other type of material is referenced.
    REQ_EP_??? - Fail is a mob is encountered that was not decorated by
                 DecorateEPTest.  This implies that the mob does not have any
                 edit protocol material type.
    REQ_EP_??? - Fail for an illegal transition out of a film source (anything
                 that is not a zero-value SourceClip object).
    REQ_EP_??? - Fail if an illegal end of chain is encountered.
    REQ_EP_??? - Fail if an illegal transition out of a Film Source is
                 encountered.
Issues:
 1. The Edit Protocol does not specify what type of references a file source is
    allowed to reference.  REQ_EP_063 states that "if a file source has any of
    the following sources, then those source mobs should be referenced and
    included by the file source."  This is an application requirement that and
    is a "should" not a "shall."  Until a more appropriate requirement is
    available, REQ_EP_063 is being used to specify an invalid reference from
    a file source.

 2. REQ_EP_063 only deals with references to import, tape and film sources, not
    file sources.  This was discussed in the conference call on September 26
    and it was concluded that this was probably an omission.  With (1),
    REQ_EP_063 is being used to specify that a reference from a file source to
    another file source is valid.

 3. REQ_EP_064 states "if a file source does not have one of the above sources,
    then it shall reference and include a recording source."  This is currently
    being interpreted to mean that a file source must reference another source
    (it can not be the end of the derivation chain).  The requirement is not
    being interpreted as an if and only if, therefore, a file source may have
    a(n) file/import/tape/file source as well as a recording source.

 4. The Edit Protocol does not specify what types of references an import
    source is allowed to reference.  REQ_EP_076 states that "if an import
    source has any of the following sources, then those source mobs should be
    included and referenced by the import source."  This is an application
    requirement and is a "should" not a "shall."  Until a more appropriate
    requirement is available, REQ_EP_076 is being used to specify an invalid
    reference from an import source.

 5. The Edit Protocol does not specify what type of references a tape source is
    allowed to reference.  REQ_EP_083 states that "if a tape source has a film
    source, then it should be included and referenced by the tape source.  This
    is an application requirement and is a "should" not a "shall."  Until a
    more appropriate requirement is available, REQ_EP_083 is being used to
    specify an invalid reference from a tape source.

 6. The Edit Protocol does not specify what type of references a film source is
    allowed to reference.  Currently, a test will fail, although all
    requirements will appear to have passed if a film source is not the end of
    the derivation chain.

 7. Currently a test will fail if a CompositionMob does not have a UsageCode
    property.  However, there is no requirement in the Edit Protocol that
    specifies that every CompositionMob must have a UsageCode property.
    Currently, the test will fail and all requirements will appear to pass,
    A possible solution is to fail the requirement that specifies acceptable
    references out of the "current node."

 8. Currently a test will fail if a CompositionMob or a MasterMob has an
    unknown UsageCode property.  However, there is no requirement in the Edit
    Protocol that specifies a UsageCode property must be one that currently
    exists.  Currently, the test will fail and all requirements will appear to
    pass.  A possible solution is to fail the requirement that specifies
    acceptable references out of the "current node."

 9. Currently a test will fail if a SourceMob has no descriptor.  However, the
    Edit Protocol does not specify that a SourceMob must have a descriptor.
    Currently, the test will fail and all requirements will appear to pass.  A
    possible solution is to fail the requirement that specifies acceptable
    references out of the "current node."

10. Currently a test will fail if a SourceMob has an "invalid" descriptor (ie.
    Auxiliary).  However, the Edit Protocol does not specify that a SourceMob
    cannot have an "invalid" descriptor.  Currently, the test will fail and all
    requirements will appear to pass.  A possible solution is to fail the
    requirement that specifies acceptable references out of the "current node."

11. Currently a test will fail if a SourceClip does not have a SourceReference
    property.  However, the Edit Protocol does not specify that a SourceClip
    must have a SourceReference property.  Currently, the test will fail and
    all requirements will appear to pass.  A possible solution is to fail the
    requirement that specifies acceptable references out of the "current node."

12. Tests will currently fail if the first "node" in the derivation chain is
    anything other than a top-level composition.  REQ_EP_030 states that "a
    lower-level composition shall be referenced by a top-level or lower-level
    in the AAF file," but there are no similar requirements that specify other
    types of "nodes" cannot be the initial "node" (the exception is REQ_EP_025
    which specifies top-level composition shall not be referenced).  Also, due
    to the way the CompMobDependency is implemented, only CompositionMobs
    will be considered as the first "node" in a derivation chain.  Unreferenced
    SourceMobs, MasterMobs and SourceClips will never be tested.

13. REQ_EP_026, REQ_EP_031, REQ_EP_036 and REQ_EP_045 state that top-level,
    lower-level, sub-clip and adjusted-clip compositions respectively "shall
    only reference the following kinds of material."  When the derivation chain
    ends no material is referenced, therefore these requirements do not prevent
    these compositions from being the end of the chain.  Currently, if one of
    these compositions is the end of a chain, the test will fail, however, all
    requirements will appear to pass.

14. As was discussed in the conference call on September 26, 2005, REQ_EP_031
    does not specify a lower-level composition can reference another
    lower-level composition although REQ_EP_030 implies that this is a valid
    reference.  As was decided during the call, this was probably an omission
    therefore, REQ_EP_031 is used to specify a valid reference from one
    lower-level composition to another.

15. As was discussed during the conference call on September 26, 2005, the
    figure in Section 6.1 makes it appear that a Clip may be the end of the
    derivation chain.  Until further information is avaliable, the test will
    assume that it is valid for a clip to be the end of the derivation chain.

29. The legal layout of a derivation chain is not specified in text, only in
    the diagram.

43. The term zero-valued SourceClip object is not defined.  For the purpose of
    this test, it is assumed to be a SourceClip object with a SourceID =
    { {0,0,0,0,0,0,0,0,0,0,0,0}, 0, 0, 0, 0, { 0, 0, 0, {0,0,0,0,0,0,0,0} } } =
    00000000000000000000000000000000-00000000-0000-0000-0000000000000000.

44. The term essence track is not defined.  For the purpose of this test
    (REQ_EP_050, REQ_EP_072), it is aussumed to be any SourceClip object along
    the derivation chain.  If this is correct, the term should be changed as
    it conflicts with the definition of Essence Track used throughout other
    tests.

47. There is no requirement that specifies when it is legal to end the
    derivation chain.  Currently, an illegal end of the derivation chain is
    detected based upon the diagram in section 6.1.  A failure will be reported,
    but, not requirements will be shown as failing.

58. Auxiliary SourceMobs are defined in section 9.1.1 and requirements specify
    what data they can include.  However, they do not fit anywhere in the
    derivation chain.  This may be correct, but, if it is, the derivation
    test will fail when an Auxiliary SourceMob is encountered in the derivation
    chain.

97. There are 4 ways the derivation chain test can fail that are not associated
    with requirements.

Test Name:
    EPNameTest
Description:
    Visit all mobs and ensure that they are correctly named and also that the
    MobSlots contained within are properly named.
Requirements Tested:
    REQ_EP_027 (6.3)
        The top-level composition Mob::Name property shall be a valid name
        identifying the composition.  Where multiple compositions are exported,
        each shall have a different name.
    REQ_EP_032 (6.4)
        The lower-level composition Mob::Name property shall be a valid name
        identifying the composition.  Where multiple compositions are exported,
        each shall have a different name.
    REQ_EP_038 (6.5)
        The sub-clip Mob::Name property shall be a valid name identifying the
        sub-clip.
    REQ_EP_047 (6.6)
        The adjusted-clip Mob::Name property shall be a valid name identifying
        the adjusted-clip.
    REQ_EP_052 (6.7)
        The template clip Mob::Name property shall be a valid name identifying
        the template clip.
    REQ_EP_057 (6.8)
        The clip Mob::Name property shall be a valid name identifying the clip.
    REQ_EP_073 (6.10)
        The recording source Mob::Name property shall be a valid name
        identifying the source, e.g. a name describing a recording session.
    REQ_EP_081 (6.12)
        The tape source Mob::Name property shall be a valid name identifying the
        tape name.
    REQ_EP_086 (6.13)
        The film source Mob::Name property shall be a valid name identifying the
        film reel name.
    REQ_EP_101 (7.5)
        The MobSlot::Name property shall be a valid name identifying the essence
        track.  Where multiple essence tracks are exported, each shall have a
        different Name.
    REQ_EP_161 (11.1)
        The DefinitionObject::Name property of all DefinitionObjects in the
        Dictionary shall be a valid, meaningful name.
Warn Conditions:
    NONE
Fail Conditions:
    REQ_EP_027 - Fail if the mob does not have a valid name.
    REQ_EP_027 - Fail if the mob has the same name as any other composition mob.
    REQ_EP_032 - Fail if the mob does not have a valid name.
    REQ_EP_032 - Fail if the mob has the same name as any other composition mob.
    REQ_EP_038 - Fail if the mob does not have a valid name.
    REQ_EP_047 - Fail if the mob does not have a valid name.
    REQ_EP_052 - Fail if the mob does not have a valid name.
    REQ_EP_057 - Fail if the mob does not have a valid name.
    REQ_EP_073 - Fail if the mob does not have a valid name.
    REQ_EP_081 - Fial if the mob does not have a valid name.
    REQ_EP_086 - Fail if the mob does not have a valid name.
    REQ_EP_101 - Fail if the MobSlot does not have a valid name.
    REQ_EP_101 - Fail if any two essence tracks have the same name.
    REQ_EP_161 - Fail if any DefinitionObject in the dictionary does not have
                 a valid name.
Issues:
41. The words "valid name" are used throughout the Edit Protocol, but what makes
    a name valid is never determined.  Until further information is avaliable,
    it is assumed that a name is valid if an AAF Object has a name property that
    has been set.

46. REQ_EP_161 can not easily be regression tested as there does not appear to
    be any way to add a DefinitionObject to the dictionary without first calling
    its initialize method.  The initialize method will provide the
    DefinitionObject with a valid name.

Test Name:
    EPContainedTrackTest
Description:
    Make sure that mobs contain all the tracks that they must contain.
Requirements Tested:
    REQ_EP_028 (6.3)
        A top-level composition shall contain one or more timecode tracks and
        include a Primary timecode track.  Timecode tracks shall use the
        MobSlot::PhysicalTrackNumber property to distinguish their type, as
        shown in Section 6.3 of the AAF Edit Protocol.
    REQ_EP_037 (6.5)
        Each essence track of a sub-clip composition shall contain exactly one
        SourceClip.
    REQ_EP_046 (6.6)
        Each essence track of an adjusted-clip composition shall contain exactly
        one OperationGroup.
    REQ_EP_082 (6.12)
        Timecode tracks in a tape SourceMob shall use the
        MobSlot::PhysicalTrackNumber property to distinguish their type, as
        shown in the table in Section 6.12 of the AAF Edit Protocol.
    REQ_EP_087 (6.13)
        A film SourceMob may contain one or more edgecode tracks.  Edgecode
        tracks shall use the MobSlot::PhysicalTrackNumber property to
        distinguish their type as shown in Section 6.13 of the AAF Edit
        Protocol.
    REQ_EP_131 (7.11)
        A Primary timecode track (see Section 6.3 of the AAF Edit Protocol) in a
        top-level or lower-level composition shall consist of a single Timecode
        object.
    REQ_EP_136 (9.1.1)
        An auxiliary SourceMob shall contain at least one Slot, which may be a
        TimelineMobSlot, EventMobSlot or StaticMobSlot as appropriate.  The Data
        Definition of the Segment within the Slot shall be DataDef_Auxiliary.
Warn Conditions:
    NONE
Fail Conditions:
    REQ_EP_028 - Fail if the mob has any timecode tracks with no
                 PhysicalTrackNumber    property.
    REQ_EP_028 - Fail if there is a timecode track with a PhysicalTrackNumber
                 not in the table.
    REQ_EP_028 - Fail if a reserved PhysicalTrackNumber is used on a timecode
                 track.
    REQ_EP_028 - Fail if a PhysicalTrackNumber in the table is used on more
                 than one timecode track.
    REQ_EP_028 - Fail if there is no Primary Timecode Track.
    REQ_EP_037 - Fail if the mob does not have exactly one SourceClip object.
    REQ_EP_046 - Fail if the mob does not have exactly one OperationGroup
                 object.
    REQ_EP_082 - Fail if the mob has any timecode tracks with no
                 PhysicalTrackNumber property.
    REQ_EP_082 - Fail if there is a timecode track with a PhysicalTrackNumber
                 not in the table.
    REQ_EP_082 - Fail if a reserved PhysicalTrackNumber is used on a timecode
                 track.
    REQ_EP_082 - Fail if a PhysicalTrackNumber in the table is used on more
                 than one timecode track.
    REQ_EP_087 - Fail if the mob has any edgecode tracks with no
                 PhysicalTrackNumber property.
    REQ_EP_087 - Fail if there is an edgecode track with a PhysicalTrackNumber
                 not in the table.
    REQ_EP_087 - Fail if a PhysicalTrackNumber in the table is used on more
                 than one edgecode track.
    REQ_EP_131 - Fail if a Primary Timecode Track does contains anything other
                 than a single timecode object.
    REQ_EP_136 - Fail if there are no mob slots in an auxiliary SourceMob.
    REQ_EP_136 - Fail if a slot on an auxiliary SourceMob has a segment with
                 a data definition that is not DataDef_Auxiliary.
Issues:
19. REQ_EP_028 does not specify if physical track numbers may be repeated.
    Until further information is avaliable, it is assumed that they can not be
    repeated.

20. REQ_EP_028 does not specify if reserved physical track numbers are legal
    values.  Until further information is avaliable, it is assumed that they are
    illegal.

21. REQ_EP_028 does not specify if physical track numbers outside the range 1-6
    are legal.  Until further information is avaliable, it is assumed that they
    are illegal.

22. REQ_EP_082 does not specify if physical track numbers may be repeated.
    Until further information is avaliable, it is assumed that they can not be
    repeated.

23. REQ_EP_082 does not specify if reserved physical track numbers are legal
    values.  Until further information is avaliable, it is assumed that they are
    illegal.

24. REQ_EP_082 does not specify if physical track numbers outside the range 1-12
    are legal.  Until further information is avaliable, it is assumed that they
    are illegal.

25. REQ_EP_087 does not specify if physical track numbers may be repeated.
    Until further information is avaliable, it is assumed that they can not be
    repeated.

26. REQ_EP_087 does not specify if physical track numbers outside the range 1-3
    are legal.  Until further information is avaliable, it is assumed that they
    are illegal.

27. Timecode track is not defined.  It is assumed to be a MobSlot where
    IsTimecodeType is true.

28. Edgecode track is not defined.  It is assumed to be a MobSlot where
    IsEdgecodeType is true.

30. REQ_EP_037 states each essence track of a sub-clip composition shall contain
    exactly one SourceClip - what about sequences of one SourceClip? Currently,
    sequences are not accepted.

31. REQ_EP_046 states each essence track of an adjusted-clip composition shall
    contain exactly one OperationGroup - what about sequence of one
    OperationGroup?  Currently sequences are not accepted.

55. It is assumed that REQ_EP_131 means that a Primary Timecode mob slot can only
    have one Timecode object (ie. No sequences and it can not be the child of
    another segment).

56. REQ_EP_131 refers to Primary Timecode Tracks in Lower-Level compositions.
    Primary Timecode Tracks are only defined for Top-Level Compositions and Tape
    Sources.  It is assumed that the definition is consistent.

57. REQ_EP_136 says the slots in an Auxiliary SourceMob may be timeline, event
    or static.  May implies that this is optional, so any type of slot is legal.
    If this is not correct, the requirement should be written with a shall in
    place of the may.

Test Name:
    EPTrackContentsTest
Description:
    Visit mobs and ensure that the tracks within have valid contents.
Requirements Tested:
    REQ_EP_103 (7.6)
        The MobSlot::PhysicalTrackNumber property shall be specified for essence
        MobSlots within the following kinds of Mobs: CompositionMob, MasterMob,
        recording SourceMob, import SourceMob, tape SourceMob, film SourceMob.
    REQ_EP_108 (7.7)
        The marked IN and OUT points and user position shall be specified using
        the TimelineMobSlot::MarkIn, TimelineMobSlot::MarkOut and
        TimelineMobSlot::UserPos optional properties respectively.
Warn Conditions:
    REQ_EP_108 - Issue a warning if a TimelineMobSlot has a MarkIn property but
                 no MarkOut property or vice-versa.
    REQ_EP_108 - Issue a warning if a TimelineMobSlot has a MarkIn point that is
                 after the MarkOut point.
Fail Conditions:
    REQ_EP_103 - Fail if the mob has an essence track without a
                 PhysicalTrackNumber property specified.
Issues:
76. There is not much to be tested for REQ_EP_108.  Currently it is being used
    to ensure either both or neither of the TimelineMobSlot::MarkIn and
    TimelineMobSlot::MarkOut properties are present and that the MarkOut point
    does not occur before the MarkIn point.

Test Name:
    EPLocatorTest
Description:
    Visit File and Import Sources and ensure that they contain valid locators.
Requirements Tested:
    REQ_EP_059 (6.9)
        The essence associated with a file SourceMob shall either be internal to
        the AAF file in an EssenceData object or external to the AAF file.  In
        either case, the file SourceMob shall have a
        FileDescriptor::ContainerDefinition property specifying the kind of
        essence container.
    REQ_EP_060 (6.9)
        Where essence is external to the AAF file, the
        EssenceDescriptor::Locator property should contain a Locator object
        specifying the location of the essence.
    REQ_EP_061 (6.9)
        The EssenceDescriptor::Locator property should include at least one
        NetworkLocator that complies with the constrains set out in Section 6.9
        of the AAF Edit Protocol.
    REQ_EP_075 (6.11)
        The EssenceDescriptor::Locator property shall include at least one
        NetworkLocator that complies with the constraints set out in Section 6.9
        of the AAF Edit Protocol.
Warn Conditions:
    REQ_EP_060 - Present a warning if the no file referenced by a locator can
                 be found.
    REQ_EP_061 - Present a warning if none of the NetworkLocators comply with
                  the constraints set out in Section 6.9.
Fail Conditions:
    REQ_EP_059 - Fail if the ContainerFormat of any file descriptor is
                 something other than kAAFContainerDef_External or
                 kAAFContainerDef_AAF.
    REQ_EP_075 - Fail if none of the NetworkLocators comply with the constrains
                 set out in Section 6.9.
Issues:
35. REQ_EP_061 and REQ_EP_075 require that URIs comply with RFC 2396 and also
    that absolute URIs conform to RFC 1738.  However, RFC 2396 updates RFC 1738.
    If a URI complies with RFC 2396, but one of the updates cause it to not
    conform with RFC 1738 should the test fail?  What if in order to comform to
    RFC 1738 it can not comply with RFC 2396.

36. REQ_EP_061 and REQ_EP_075 require that if a NetworkLocator contains a
    "relative URI, the base URI should be determined from the URI of the AAF
    file itself."  What exactly does this mean?

37. REQ_EP_059 says that essence associated with a file SourceMob shall be
    internal to the AAF file or external to the AAF file.  If the
    FileDescriptor::ContainerDefinition property is used to determine if the
    essence is internal or external, what values indicate internal and what
    values indicate external.  Are there some values that are illegal?  For now
    assume the only legal values are kAAFContainerDef_External and
    kAAFContainerDef_AAF.

38. REQ_EP_060 states there should be a Locator specifying the location of the
    essence.  REQ_EP_061 states there should be a NetworkLocator that complies
    with a set of constraints.  These requirements do not state that these must
    be the same locator.  There are enough differences in these requirements
    (60: Locator, 61: NetworkLocator; 60: External to the AAF File; 61: Internal
    or External is not specified), that the test is currently being implemented
    to accept two differnt locators that will meet these requeirements.

39. The URI validator that is currently being used does not accept wide
    characters.  It also does not appear to accept relative URIs.  Until
    a different URI validator is found, these problems will exist when
    validating URIs.

40. REQ_EP_060 tests if a file exists at the location pointed to by the locator.
    Currently this is done assuming the path is specified as an absolute URI.
    Once a URI tool that deals with relative URIs, this can be modified to
    to allow the path to be absolute or relative.

45. How do you acuratley check that a file exists (ie. it is insufficient to
    check if the file can be open using an ifstream) in a platform independant
    fashion?

50. The URI validator currently being used is libURI
    (http://sourceforge.net/projects/liburi/) is not sufficient for this test.
    Until a better validator is avaliable, this test will be registered but not
    run.

Test Name:
    EPEditRateTest
Description:
    Make sure that all tracks have valid contents.
Requirements Tested:
    REQ_EP_091 (7.1)
        The edit rate value shall be equivalent to the values in the table in
        Section 7.1 of the AAF Edit Protocol.
    REQ_EP_092 (7.1)
        A rational with a zero or negative numerator or denominator shall not be
        used as an edit rate value.
    REQ_EP_099 (7.3)
        All audio tracks within a file shall have the same edit rate and sample
        rate.
    REQ_EP_100 (7.4)
        The video edit rate shall be less than or equal to the video sample
        rate.
Warn Conditions:
    NONE
Fail Conditions:
    REQ_EP_091 - Fail if the edit rate of an essence track is not equivalent to
                 a value in the    table in Section 7.1.
    REQ_EP_091 - Fail if an essence track is a static or unknown type of
                 MobSlot.
    REQ_EP_092 - Fail if the edit rate of an essence track has a numerator or
                 denominator that is less than or equal to zero.
    REQ_EP_099 - Fail if all audio tracks in the AAF file do not have the same
                 edit rate.
    REQ_EP_099 - Fail if all audio tracks in the AAF file do not have the same
                 sample rate.
    REQ_EP_099 - Fail if a audio track is a static or unknown type of MobSlot.
    REQ_EP_100 - Fail if a video track has an edit rate that is less greater
                 than its sample rate.
    REQ_EP_100 - Fail if a video track is a static or unknown type of MobSlot.
Issues:
34. REQ_EP_091 states that the edit rate of an essence track must be equivalent
    to value in the table.  However, StaticMobSlots do not have edit rates.
    As was noted above, it is assumed that an essence track is a MobSlot with
    a Sound or Picture DataDefinition.  How should REQ_EP_091 treat
    StaticMobSlots?

Test Name:
    EPEffectTest
Description:
    Make sure that all effects are contained within the proper objects.
Requirements Tested:
    REQ_EP_167 (11.2.1)
        The OperationGroup shall be contained in a Transition object between two
        Segments.
    REQ_EP_168 (11.2.2)
        The OperationGroup shall not be contained in a Transition object.
    REQ_EP_180 (12.1)
        The Video Dissolve effect shall only be used by an OperationGroup within
        a Transition object.
    REQ_EP_183 (12.2)
        The SMPTE Video Wipe effect shall only be used by an OperationGroup
        within a Transition object.
    REQ_EP_186 (12.3)
        The Video Speed Control effect shall only be used by an OperationGroup
        not contained withing a Transition object.
    REQ_EP_187  (12.3.2)
        A ratio value of 0 shall not be used for the Speed Ratio paremeter of a
        Video Speed Control effect.
    REQ_EP_190 (12.4)
        The Video Repeat effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_194 (12.5)
        The Video Flip effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_197 (12.6)
        The Video Flop effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_200 (12.7)
        The Video Flip-Flop effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_203 (12.8)
        The Video Position effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_206 (12.9)
        The Video Crop Effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_209 (12.10)
        The Video Scale effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_212 (12.11)
        The Video Rotate effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_215 (12.12)
        The Video Corner Pinning effect shall only be used by an OperationGroup
        not contained within a Transition object.
    REQ_EP_218 (12.13)
        In an Alpha With Video Key effect the alpha channel shall be contained
        within a channel of the foreground video essence, using either RGBA or
        YUVA.  The essence descriptor shall be an RGBADescriptor object (or a
        sub-class) for RGBA, or a CDCIDescriptor object (or a sub-class) for
        CDCI.  The alpha channel shall be indicated by the essence descriptor.
    REQ_EP_219 (12.13)
        In an Alpha With Video Key effect the
        DigitalImageDescriptor::AlphaTransparency property shall be present and
        specify whether the minimum Alpha value or the maximum Alpha value
        indicates complete transparency.  The ParameterDef_AlphaKeyInvertAlpha
        parameter indicates wheter the transparency indicated by the
        DigitalImageDescriptor::AlphaTransparency property should be inverted.
    REQ_EP_220 (12.13)
        The Alpha With Video Key effect shall only be used by an OperationGroup
        not contained within a Transition object.
    REQ_EP_223 (12.14)
        In a Separate-Alpha Key effect the alpha channel shall be contained
        within a channel of separate essence, using either RGBA or YUVA.  The
        essence descriptor shall be an RGBADescriptor object (or a sub-class)
        for RGBA, or a CDCIDescriptor object (or a sub-class) for CDCI.  Where
        the alpha channel is indicated by the essence descriptor, the channel
        shall be used as the alpha channel.  Where the alpha channel is not
        indicated by the essence descriptor, the luminance value of essence
        shall be used as the alpha channel.
    REQ_EP_224 (12.14)
        In a Separate-Alpha Key effect the
        DigitalImageDescriptor::AlphaTransparency property shall be present and
        specify whether the minimum Alpha value or the maximum Alpha value
        indicates complete transparency.  The ParameterDef_AlphaKeyInvertAlpha
        parameter indicates whether the transparency indicated by the
        DigitalImageDescriptor::AlphaTransparency property should be inverted.
    REQ_EP_225 (12.14)
        The Separate Alpha Key effect shall only be used by an OperationGroup
        not contained within a Transition object.
    REQ_EP_228 (12.15)
        The Luminance Key effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_231 (12.16)
        The Chroma Key effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_234 (12.17)
        The Mono Audio Gain effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_240 (12.18)
        The Mono Audio Pan effect shall only be used by an OperationGroup not
        contained within a Transition object.
    REQ_EP_244 (12.19)
        The Single-Parameter Mono Audio Dissolve effect shall only be used by an
        OperationGroup within a Transition object.
    REQ_EP_247 (12.20)
        The Two-Parameter Mono Audio Dissolve effect shall only be used by an
        OperationGroup within a Transition object.
    REQ_EP_248 (12.20.4)
        In a Two-Parameter Mono Audio Dissolve effect, although the incoming
        segment is first faded up only at a point X, the incoming segment must
        be specified from the begining of the Transition.
    REQ_EP_249 (12.20.4)
        In a Two-Parameter Mono Audio Dissolve effect, although the incomming
        segment is first faded up only at a point X, the incoming segment must
        be specified from the beginning of the Transition.  Similarily, although
        the outgoing segment is completely faded down at point Y, the outgoing
        segment must be specified to the end of the Transition.
Warn Conditions:
    REQ_EP_187 - Issue a warning if there is a ratio with a zero denominator on
                 a Speed Ratio Parameter of a Video Speed Control effect.
    REQ_EP_218 - Issue a warning if the 2nd input to the Operation Group is an
                 out of file reference.
    REQ_EP_219 - Issue a warning if the 2nd input to the Operation Group is an
                 out of file reference.
    REQ_EP_223 - Issue a warning if the 3rd input to the Operation Group is an
                 out of file reference.
    REQ_EP_224 - Issue a warning if the 3rd input to the Operation Group is an
                 out of file reference.
Fail Conditions:
    REQ_EP_167 - Fail if REQ_EP_180, REQ_EP_183, REQ_EP_244 or REQ_EP_247 fails.
    REQ_EP_168 - Fail if REQ_EP_186, REQ_EP_190, REQ_EP_194, REQ_EP_197,
                 REQ_EP_200, REQ_EP_203, REQ_EP_206, REQ_EP_209, REQ_EP_212,
                 REQ_EP_215, REQ_EP_220, REQ_EP_225, REQ_EP_228, REQ_EP_231,
                 REQ_EP_234, REQ_EP_240 or REQ_EP_244 fails.
    REQ_EP_180 - Fail if the Operation Group is not a direct child of a
                 Transition object.
    REQ_EP_183 - Fail if the Operation Group is not a direct child of a
                 Transition object.
    REQ_EP_186 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_187 - Fail if there is a zero numerator on a Speed Ratio Parameter of
                 a Video Speed Control effect.
    REQ_EP_187 - Fail if there is no Speed Ratio Parameter on a Video Speed
                 Control effect.
    REQ_EP_187 - Fail if the Speed Ratio Parameter on a Video Speed Control
                 effect is not a rational type.
    REQ_EP_187 - Fail if the Speed Ratio Parameter on a Video Speed Control is
                 a varying value.
    REQ_EP_190 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_194 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_197 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_200 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_203 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_206 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_209 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_212 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_215 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_218 - Fail if the 2nd input to the Operation Group is a Null Source
                 Reference.
    REQ_EP_218 - Fail if the 2nd input to the Operation Group is not a Source
                 Reference.
    REQ_EP_218 - Fail if there are not exactly 2 inputs to the Operation Group.
    REQ_EP_218 - Fail if the 2nd input to the Operation Group does not have
                 an RGBADescriptor or a CDCIDescriptor.
    REQ_EP_219 - Fail if the 2nd input to the Operation Group is a Null Source
                 Reference.
    REQ_EP_219 - Fail if the 2nd input to the Operation Group is not a Source
                 Reference.
    REQ_EP_219 - Fail if there are not exactly 2 inputs to the Operation Group.
    REQ_EP_219 - Fail if the 2nd input to the Operation Group does not have
                 an DigitalImageDescriptor
    REQ_EP_220 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_223 - Fail if the 3rd input to the Operation Group is a Null Source
                 Reference.
    REQ_EP_223 - Fail if the 3dd input to the Operation Group is not a Source
                 Reference.
    REQ_EP_223 - Fail if there are not exactly 3 inputs to the Operation Group.
    REQ_EP_223 - Fail if the 2nd input to the Operation Group does not have
                 an RGBADescriptor or a CDCIDescriptor.
    REQ_EP_224 - Fail if the 3rd input to the Operation Group is a Null Source
                 Reference.
    REQ_EP_224 - Fail if the 3rd input to the Operation Group is not a Source
                 Reference.
    REQ_EP_224 - Fail if there are not exactly 3 inputs to the Operation Group.
    REQ_EP_224 - Fail if the 3rd input to the Operation Group does not have
                 an DigitalImageDescriptor
    REQ_EP_225 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_228 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_231 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_234 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_240 - Fail if the Operation Group is a direct child of a Transition
                 object.
    REQ_EP_244 - Fail if the Operation Group is not a direct child of a
                 Transition object.
    REQ_EP_247 - Fail if the Operation Group is not a direct child of a
                 Transition object.
    REQ_EP_248 - Fail if the Operation Group is not a direct child of a
                 Transition object.
    REQ_EP_248 - Fail if the length of the incoming segment is less than the
                 length of the effect's transition.
    REQ_EP_248 - Fail if the incoming segment does not have a length property.
    REQ_EP_248 - Fail if the effect's transition does not have a length
                 property.
    REQ_EP_248 - Fail if there is not incoming segment.
    REQ_EP_249 - Fail if the Operation Group is not a direct child of a
                 Transition object.
    REQ_EP_249 - Fail if the length of the incoming segment is less than the
                 length of the effect's transition.
    REQ_EP_249 - Fail if the length of the outgoing segment is less than the
                 length of the effect's transition.
    REQ_EP_249 - Fail if the incoming segment does not have a length property.
    REQ_EP_249 - Fail if the outgoing segment does not have a length property.
    REQ_EP_249 - Fail if the effect's transition does not have a length
                 property.
    REQ_EP_249 - Fail if there is no incoming segment.
    REQ_EP_249 - Fail if there is no outgoing segment.
Issues:
49. Section 12 uses the phrases "within a Transition object" and "not within
    "a transition object".  This is not clear.  Currently it is assumed to mean
    that the direct parent must or must not be a Transition object, however, it
    is ok if an ancestor higher than a parent is a Transition object.

51. REQ_EP_187 does not specify if the Speed Ratio parameter should be constant
    or varying value.  Currently it is assumed that it must be constant in order
    for there to be a ratio value of zero.  Tests will fail if it is not
    constant.

52. It is assumed that REQ_EP_187 applies only to Speed Ratio Parameters that
    belong to Video Speed Control effects.

53. There is no easy way to regression test Speed Ratio parameters for
    REQ_EP_187.

64. When testing REQ_EP_248 and REQ_EP_249 it is assumed that the parent of a
    transition must be a sequence.  Under the current AAF Object specification,
    this appears to be a valid assumption, however, should the specification
    change, the requirements may need to change.

65. When REQ_EP_248 and REQ_EP_249 state that segments must be specified from
    the begining/to the end of a Transition, it is assumed that this means the
    length of the segment must be at least as long as the transition.

66. REQ_EP_248 and REQ_EP_249 cannot be accuratley regression tested as the
    implementation of the AAF object model does not allow the following failure
    cases of these requirements:
        a) Incoming or Outgoing Segments that are too short.
        b) Transitions or Segments with no length.
        c) A Transition with no outgoing segment.

67. The conditions tested by REQ_EP_248 are a subset of the conditions tested by
    REQ_EP_249.  REQ_EP_248 is not necessary since when it fails, an identical
    failure of REQ_EP_249 will be produced.

68. REQ_EP_248 and REQ_EP_249 are requirements for Two-Parameter Mono Audio
    Dissolve effects.  There should probably be an analogous requirement for
    Single Parameter Mono Audio Dissolve effects.

77. For REQ_EP_218 it is assumed that the 2nd input to an OpetaionGroup for an
    Alpha with Video Key Effect must be a SourceReference to a file SourceMob
    with a RGBADescriptor or a CDCIDescriptor.

78. For REQ_EP_219 it is assumed that the 2nd input to an OpetaionGroup for an
    Alpha with Video Key Effect must be a SourceReference to a file SourceMob
    with a DigitalImageDescriptor.

79. For REQ_EP_223 it is assumed that the 3rd input to an OpetaionGroup for a
    Separate-Alpha Key Effect must be a Source References to a file SourceMob
    with a RGBADescriptor or a CDCIDescriptor.

80. For REQ_EP_224 it is assumed that the 3rd input to an OpetaionGroup for a
    Separate Alpha Key Effect must be a SourceReference to a file SourceMob
    with a DigitalImageDescriptor.

81. In REQ_EP_219, it is not known how to test if the alpha channel is indicated
    by the essence descriptor.  Until clarification is provided, this will not
    be tested.

82. In REQ_EP_223, it is not known how to test if the alpha channel is indicated
    by the essence descriptor or how to find the luminance value of the essence.
    Until clarification is provided, this will not be tested.

95. REQ_EP_163 and REQ_EP_164 are redundant as they only fail when more specific
    versions of the requirement fail.

Test Name:
    EPAnnotationTest
Description:
    Make sure that annotations in an AAF file are legal.
Requirements Tested:
    REQ_EP_147 (10.1)
        Component::UserComments shall only be used on: the Segment of a MobSlot
        or a CommentMarker (or its subclasses).
    REQ_EP_149 (10.1)
        CommentMarkers may be used for annotations that are not associated with
        a specific essence track; otherwise DescriptiveMarkers (or its
        subclasses) shall be used.
    REQ_EP_150 (10.1)
        CommentMarkers shall be placed only in EventMobSlots.
        DescriptiveMarkers may be placed in any kind of MobSlot (e.g.
        TimelineMobSlot, EventMobSlot, StaticMobSlot).
    REQ_EP_151 (10.1)
        Exporting applications shall document all TaggedValues in use using
        TaggedValueDefinition objects in the Dictionary::TaggedValueDefinitions
        property.
    REQ_EP_152 (10.1)
        Exporting applications shall document all KLVData in use in
        KLVDataDefinition objects in the Dictionary::KLVDefinitions property.
Warn Conditions:
    NONE
Fail Conditions:
    REQ_EP_147 - Fail if the number of UserComments on a component is greater
                 than zero, and the component is not a CommentMarker or the
                 child of a MobSlot.
    REQ_EP_149 - Fail if a CommentMarker base class or subclass other than
                 DescripteMarker and its subclasses) is included within an
                 essence track.
    REQ_EP_150 - Fail if a CommentMarker base class or subclass other than
                 DescriptiveMarker han an parent MobSlot that is not an
                 EventMobSlot.
    REQ_EP_151 - Fail if a TaggedValue has a name that does not have a
                 correspondingly named TaggedValueDefinition in the dictionary.
    REQ_EP_152 - Fail if a KLVData object has a key that does not have a
                 KLVDataDefinition with the same AUID in the dictionary.
Issues:
33. Essence track is not defined.  It is assumed to be a MobSlot where
	IsSoundKind() or IsPictureKind() returns true.

59. REQ_EP_149 and REQ_EP_150 prevent CommentMarkers from being used in places
    where DescriptiveMarkers are allowed.  It is assumed that CommentMarker
    refers to the base class and any subclass other than DescriptiveMarker and
    its subclasses.

60. REQ_EP_149 referes to annotations not associated with a specific essence
    track.  It is assumed that an annotation is associated with the MobSlot that
    the component with the annotation is contained within.

83. REQ_EP_150 states CommentMarkers shall be placed only in EventMobSlots.  It
    is assumed that this means, the component with the CommentMarker (or the
    CommentMarker) must be contained within an EventMobSlot.

Test Name:
    EPDefinitionTest
Description:
    Make sure DefinitionObjects are used properly.
Requirements Tested:
    REQ_EP_162 (11.1)
        An OperationDefinition object in an AAF file shall have a data
        definition value consistent with the data definition of an
        OperationGroup object that references it.
    REQ_EP_163 (11.1)
        The effects defined in the Edit Protocol should be used with the AAF
        v1.1 data definition values of DataDef_Picture and DataDef_Sound.  The
        deprecated data definition values of DataDef_LegacyPicture and
        DataDef_LegacySound should only be used when working with legacy AAF
        v1.0 files.
Warn Conditions:
    REQ_EP_162 - Present a warning if an OperationDefinition is in the
                 dictionary but is not referenced by an OperationGroup.
    REQ_EP_163 - Present a warning if an Effect's OperationDefinition is using
                 an up to date Data Definition and the file version is <= 1.0.
Fail Conditions:
    REQ_EP_162 - Fail if the data definition of an OperationGroup is not the
                 same as the data definition of the OperationDefinition that it
                 references.
    REQ_EP_163 - Fail if the data definition of an Effect's OperationDefinition
                 is a legacy definition and the file version is > 1.0.
Issues:
61. It is assumed that for data definition values to be consistent in
    REQ_EP_162, AxDataDef::IsDataDefOf() must return true.

62. For REQ_EP_162 it is assumed that a warning should be presented if there is
    an OperationDefinition in the AAF file that is not referenced.

63. It is not possible to save an AAF file with an unreferenced
    OperationDefinition so the warn condition of REQ_EP_162 can not be
    regression tested.

96. Under the current regression testing system there is no way to save an AAF
    file as anything other than version 1.1, so the warn condition of REQ_EP_163
    is not tested, nor are all of the pass conditions.

Test Name:
    EPHeaderTest
Description:
    Make sure the Header of an AAF file is valid under the Edit Protocol.
Requirements Tested:
    REQ_EP_255 (15)
        Header::OperationalPattern should be equal to OpEditProtocol.
Warn Conditions:
    NONE
Fail Conditions:
    REQ_EP_255 - The Header::OperationPattern property is not present or not
                 equal to OpEditProtocol.
Issues:
    NONE

Test Name:
    EPParameterTest
Description:
    Make sure all parameters in an AAF file are valid under the Edit Protocol.
Requirements Tested:
    REQ_EP_174 (11.5)
        Effect parameters shall be specified using ConstantValue or VaryingValue
        objects.
    REQ_EP_175 (11.5.1)
        Interpolation between ControlPoints within VaryingValue objects shall be
        specified as one of the following: ConstantInterpolator,
        LinearInterpolator, LogInterpolator, PowerInterpolator,
        BSplineInterpolator.
Warn Conditions:
    NONE
Fail Conditions:
    REQ_EP_174 - Fail if a Parameter that is not a ConstantValue or VaryingValue
                 (or a subclass) is encountered.
    REQ_EP_175 - Fail if a VaryingValue has an illegal interpolator definition.
Issues:
69. It is assumed that sub-classes of ConstantValue and VaryingValue are legal
    for REQ_EP_174, but any other sub-class of Parameter is illegal.

70. There is no easy way to regression test REQ_EP_174 with the current testing
    framework.

Test Name:
    EPMultiChannelAudioTest
Description:
    Make sure use of multi-channel audio is acceptable under tha Edit Prorocol.
Requirements Tested:
    REQ_EP_110 (7.8)
        Within a CompositionMob or MasterMob, multi-channel audio shall be
        represented using multiple tracks with mono sound Data Definition.
        Within a CompositionMob or MasterMob, a multi-channel sound Data
        Definition shall not be used.
Warn Conditions:
    NONE
Fail Conditions:
    REQ_EP_110 - Fail if a Source Mob with a Sound Descriptor with more than
                 1 channel is found after traversing past a Composition or
                 Master Mob.
Issues:
74. REQ_EP_110 referes to mono and multi-channel sound Data Definitions that do
    not exist.  It is assumed that these refer to sound descriptors with 1 or
    more than one channels respectively.

75. It is assumed that REQ_EP_110 means SoundDescriptors with multiple channels
    cannot occur in the derivation chain after a Composition or MasterMob.

Other Issues:

Requirements:
    REQ_EP_025 (6.3)
        A top-level composition shall be specified using a CompositionMob with
        Mob::UsageCode property equal to Usage_TopLevel.  A top-level
        composition shall not be referenced by another Mob in the AAF file.
    REQ_EP_030 (6.4)
        A lower-level composition shall be specified using a CompositionMob with
        Mob::UsageCode property equal to Usage_LowerLevel.  A lower-level
        composition shall be referenced by a top-level or lower-level
        composition in the AAF file.
    DEF_EP_034 (6.5)
        A sub-clip composition shall be specified using a CompositionMob with
        Mob::UsageCode property equal to Usage_SubClip.
    DEF_EP_043 (6.6)
        An adjusted-clip composition shall be specified using a CompositionMob
        with Mob::UsageCode property equal to Usage_AdjustedClip.
    DEF_EP_049 (6.7)
        A template clip shall be specified using a MasterMob with Mob::UsageCode
        property equal to Usage_Template.
    DEF_EP_054 (6.8)
        A clip shall be specified using a MasterMob with no Mob::UsageCode
        property.
    DEF_EP_058 (6.9)
        A file source shall be specified using a SourceMob with an
        EssenceDescriptor that is a sub-class of FileDescriptor.
    DEF_EP_071 (6.10)
        A recording source shall be specified using a SourceMob with a
        RecordingDescriptor.  A recording source is also known as a recording
        SourceMob.
    DEF_EP_074 (6.11)
        An import source shall be specified using a SourceMob with an
        ImportDescriptor.
    DEF_EP_080 (6.12)
        A tape source shall be specified using a SourceMob with a
        TapeDescriptor.
    DEF_EP_085 (6.13)
        A film source shall be specified using a SourceMob with a
        FilmDescriptor.
    DEF_EP_096 (7.2)
        Pull up and pull down shall be specified using a Pulldown object.
    DEF_EP_128 (7.11)
        A track of edgecode shall be specified using one or more Edgecode
        objects.
    DEF_EP_129 (7.11)
        A track of timecode shall be specified using one or more Timecode
        objects or a TimecodeStream12M object.
    DEF_EP_135 (9.1.1)
        Each auxiliary file EssenceData object shall be specified using a
        SourceMob with an AuxiliaryDescriptor.
    DEF_EP_144 (9.2)
        The AuxiliaryDescriptor::MimeType property for a referenced MIDI file
        shall be "audio/midi".
    DEF_EP_165 (11.2)
        An effect shall be invoked using an OperationGroup object.
    DEF_EP_170 (11.3)
        Effects on multiple layers shall be constructed within a NestedScope
        object.  The layers shall be ordered background to foreground within the
        Slots of the NestedScope.
Issue:
16. Requirements REQ_EP_025, REQ_EP_030, DEF_EP_034, DEF_EP_043, DEF_EP_049,
    DEF_EP_054, DEF_EP_058, DEF_EP_071, DEF_EP_074, DEF_EP_080, DEF_EP_085,
    DEF_EP_096, DEF_EP_128, DEF_EP_129, DEF_EP_135, DEF_EP_144, DEF_EP_165 and
    DEF_EP_170 define terms used in the Edit Protocol.  Some of these
    requirements are used to find particular data, however, they can not
    generate a warning or a failure.  These should not be requirements, they
    should be definitions (ie. Instead of using shall, DEF_EP_043 should be
    rewritten as "Let an adjusted-clip composistion be defined as a
    CompositionMob with Mob::UsageCode property equal to Usage_AdjustedClip".
    These requirements can not be tested.

Requirements:
    REQ_EP_013 (6.1)
        An application shall export each clip using one of the methods described
        in Section 6.1 of the AAF Edit Protocol.
    REQ_EP_014 (6.1)
        An application shall import clips that use any of the methods described
        in Section 6.1 of the AAF Edit Protocol.
    REQ_EP_039 (6.5.1)
        A CompositionMob with Mob::UsageCode property equal to Usage_SubClip
        shall be treated as a sub-clip composition.
Issue:
17. REQ_EP_013, REQ_EP_014 and REQ_EP_039 are all classified as file
    requirements but they seem dependant on an importing or exporting
    application.  They are not currently being tested.

Requirements:
    REQ_EP_023 (6.2.1)
        Within a Two-Parameter Audio Dissolve effect a CompositionMob may use a
        SourceClip object to reference a TimelineMobSlot beyond the extent of
        the TimelineMobSlot (before the begining or after the end).
    REQ_EP_097 (7.2)
        A Pulldown may be used in the following contexts: 1. In a
        TimelineMobSlot of a file SourceMob, where the Pulldown object contains
        a SourceClip referencing a tape SourceMob; 2. In a TimelineMobSlot of a
        tape SourceMob, where the Pulldown object contains a SourceClip
        referencing a film SourceMob; 3. In a TimelineMobSlot of a tape
        SourceMob, where the Pulldown object contains a SourceClip referenceing
        a tape SourceMob.
Issue:
18. REQ_EP_023 and REQ_EP_097 are optional ("MAY") requirements.  There is no
    way they can present a warning or a failure - they are not currently being
    tested.

Requirements:
    REQ_EP_056 (6.8)
        A MasterMob shall not reference more than one essence track of a
        particular file source from each time position in the MasterMob.
Issue:
32. What does REQ_EP_056 mean?

Requirements:
    NONE
Issue:
54. Currently, if a test fails or issues a warning, traversal down the current
    path will be terminated.  This could mask further warnings or failures.  In
    some cases, there is no choice but to do this (ie. Once a mob/clip is out of
    place in the derivation chain, it is not possible to verify if further
    mobs/clips are in the correct place), however, in other cases, it is should
    be possible to continue testing (ie. any non-structural test).  Switching
    the tests to continue along the chain should not effect the    regression tests
    unless noted within the XML files.

Requirements:
    NONE
Issue:
71. When building the test graph, it is assumed that properties with a Record
    data type will not contain any strong references.  According to the AAF
    object specification, strong references are allowed.  If stong references
    are used from records, the test graph will be incomplete.  Furthermore, it
    is assumed that property's with data types of FixedArray or VariableArray
    will not be arrays of Indirect or Opaque data types.  It is also assumed
    that the Rename data type will not be used with a base data type of Indirect
    or Opaque.  The AAF object specification allows Indirects and Opaques to be
    used in this way and if this assumption is incorrect, the AAF Analyzer will
    throw an exception and terminate before analyzing the file.

Requirements:
    REQ_EP_012 (5)
        Where the feature set of an exporting application supports program
        metadata that the Edit Protocol specifically disallows (e.g. a program
        consisting of different audio sample rates which is disallowed in
        Section 7.3), the application shall not export that metadata to an Edit
        Protocol AAF file.  The omission of any metadata on export in order to
        comply with the Edit Protocol should be logged.
    REQ_EP_062 (6.9)
        When exporting an AAF file containing relative URIs, the exporting
        application should also export the target resources.
    REQ_EP_160 (11.1)
        All effects in an AAF file shall be defined with OperationDefinition and
        ParameterDefinition objects in the Dictionary.
Issue:
72. Should REQ_EP_012, REQ_EP_062 and REQ_EP_160 be FILE requirements?

Requirements:
    NONE
Issue:
73. Currently, error messages attempt to indicate which object in an AAF file
    causes a warning or a failure.  However, there are many cases where
    objects are hard to identify.  TestResult could be modified so that each
    failure and warning is associated with a node of the test graph.  This would
    be of minimal value with the current text-based interface, however, if a GUI
    is added, or the -dump functionality is extended, the node id could be very
    useful in identifying the problem object.

Requirements    :
    REQ_EP_111 (7.8)
        The intended placement of each audio track when played shall be
        indicated using the MobSlot::PhysicalTrackNumber property.  The Physical
        Track Number shall be an integer in the range 1 to the total number of
        audio tracks in the program. Six channel surround tracks shall be
        numbered in accordance with SMPTE 320M Standard Assignment B (1=Left;
        2=Right; 3=Center; 4=Low Frequency Effects; 5=Left Surround; 6=Right
        Surround).
Issue:
84. What should be tested for REQ_EP_111?

Requirements:
    REQ_EP_110 (7.8)
        Within a CompositionMob or MasterMob, multi-channel audio shall be
        represented using multiple tracks with mono sound Data Definition.
        Within a CompositionMob or MasterMob, a multi-channel sound Data
        Definition shall not be used.
    REQ_EP_112 (7.8)
        Within a SourceMob, multi-channel audio shall be represented in either
        of the following ways: a single track with a multi-channel sound Data
        Definition and a single audio EssenceDescriptor object of multiple
        channels; or multiple tracks with a mono sound Data Definition and a
        MultipleDescriptor containing the same number of mono audio
        EssenceDescriptors.
    REQ_EP_113 (7.8)
        To reference a single channel of a multi-channel track from a mono
        track, the SourceReference::ChannelIDs property shall be used with a
        single element in the array.
    REQ_EP_114 (7.8)
        To reference multiple channels of a multi-channel track from a
        multi-channel track, the SourceReference::ChannelIDs property shall be
        used with multiple elements in the array.
    REQ_EP_115 (7.8)
        To reference multiple mono tracks from a multi-channel track, the
        SourceReference::MonoSourceSlotIDs shall be used with multiple elements
        in the array.
Issues:
85. REQ_EP_112, REQ_EP_113, REQ_EP_114 and REQ_EP_115 refer to multi-channel
    tracks and mono tracks.  Tracks do not have channels, this needs to be
    clarified.
86. REQ_EP_110 and REQ_EP_112 refer to multi-channel sound Data Definitions.
    This Data Definition does not exist and must be clarified.

Requirements:
    REQ_EP_116 (7.8.1)
        When exporting multi-channel essence as a single file SourceMob where
        the multi-channel essence requires a codec that is not widely avaliable,
        the exporting application should also export the individual channels as
        separate essence and file SourceMobs, linked into the Mob reference
        chain.
Issue:
87. What should be tested for REQ_EP_116?

Requirements:
    REQ_EP_121 (7.9)
        A clip with multiple file source choices shall be specified using an
        EssenceGroup object in a MasterMob.
Issue:
88. Should there be any requirements about the StillFrame property for
    REQ_EP_121?

Requirements:
    DEF_EP_129 (7.11)
        A track of timecode shall be specified using one or more Timecode
        objects or a TimecodeStream12M object.
Issue:
89. For DEF_EP_129 should TimecodeStream12M objects be validated?

Requirements:
    REQ_EP_138 (9.1.1)
        An embedded auxiliary file shall be specified using an EssenceData
        object containing the auxiliary file data.  The EssenceData object is
        linked to the auxiliary SourceMob using a common MobID.
Issue:
90. REQ_EP_138 is confusing because nothing has to be done to comply with the
    Edit Protocol.  The requirement is the same as the general AAF Object
    Specification requirement but applied to an auxiliary file.

Requirements:
    REQ_EP_143 (9.2)
        A referenced MIDI file shall conform to the standard MIDI specification
        version 1.
Issue:
91. Should REQ_EP_143 be tested?

Requirements:
    REQ_EP_172 (11.4)
        A nested group of tracks within a Segment of a CompositionMob shall be
        specified using a NestedScope object.
Issue:
92. Is there a representation of a nested group other than the one in REQ_EP_172
    that should be rejected?

Requirements:
    REQ_EP_178 (11.6)
        Effects that take multiple video inputs shall have all of their
        parameters VH normalized to the first video input unless explicitly
        stated otherwise in the effect definition.
Issue:
93. For REQ_EP_178, how is it checked that inputs are VH normalized to the first
    video input.  Also, where can it be stated to do otherwise?

Requirements:
    REQ_EP_148 (10.1)
        The Data Definition for non-essence tracks containing annotations shall
        DataDef_DescriptiveMetadata.
Issue:
94. For REQ_EP_148 Tracks/MobSlots do not have data definitions.  What types of
	objects can legaly have these definitions?

Requirements:
    NONE
Issue:
98. Should StaticMobSlots be allowed in derivation chains, if so, what do they
    mean?

Requirements:
    NONE:
Issue:
99. Currently, references from TimelineMobSlots to TimelineMobSlots and
    EventMobSlots are being properly resolved.  References from TimelineMobSlots
    to StaticMobSlots are being resolved by referencing all non-Sequence
    Components in the StaticMobSlot.  However, this is not necessarily correct.
        Consider: In a StaticMobSlot, Components shall not have a length
                  property.  However, any non-Event component that is added to a
                  Sequence must have a length property (giving the Sequence a
                  Length property), which violates the condition that
                  Coomponents in StaticMobSlots do not have Length properties.
                  This requirement is not enforced in the code so references are
                  resolved.
    Realistically, it seems that a SourceClip referencing a StaticMobSlot should
    be required to reference a Segment that does not have a Length property,
    which would be a non-Sequence component or a Sequence of Events with no
    Length property.
    As it stands, regression tests exist to test that references are resolved as
    the implementation has intended.  Therefore, if the semantics of what can be
    stored in a StaticMobSlot are changed, and the resolution code is updated,
    the regression test will fail.
    Currently, references from EventMobSlots are not being resolved since
    SourceReferences are illegal within EventMobSlots.
    Currently, references from StaticMobSlots to TimelineMobSlots, EventMobSlots
    and StaticMobSlots are being resolved by referencing
    all non-Sequence components within the referenced MobSlot.  For
    TimelineMobSlots and EventMobSlots, this seems incorrect.  Realistically, it
    seems that the reference should be to the components that are in the
    referenced MobSlots timeline at the StartTime specified by the SourceClip
    (think a SourceClip with Length = 0).  However, this presents a problem
    since the StartTime property is specified in edit units of the SourceClip's
    object context, and the StaticMobSlot containing the SourceClip does not
    have an EditRate property.  Also, the references from StaticMobSlots to
    StaticMobSlots is most likely incorrect.  The argument made above for
    referencing StaticMobSlots from TimelineMobSlots also applies to this
    situation.
    Currently regression tests are implemented to ensure that references are
    resolved as the implementation has intended.  Therefore, if the mentioned
    issues are corrected, and the reference resolution is changed, then the
    regression test will fail.
    Although this issue needs to be resolved, none of the tests that have been
    implemented visit AAFComponentReference Edges, so changes will not effect
    the currently implemented test set.

Requirements:
    NONE
Issue:
100. In the AAF SDK, when a Component is added to a Sequence, the Length of the
     Sequence is updated.  However, if a Sequence contains another Sequence and
     a Component is added to the child Sequence, the Length of the parent
     Sequence is not updated.  It is probably true that when the length of any
     Component is updated, its parent Sequence's Length property is not updated.
     This may be known and intended, but, it may not.