Commit f711c9de authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ support for TPD variants, #23

parent 3475f9fb
Loading
Loading
Loading
Loading
Loading
+60 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ PackageableElement returns tdl::PackageableElement:
    | StructuredTestObjective
    | EventSpecificationTemplate
    | TestPurposeDescription
    | TestVariantDescription
    //Part 7
    | ExtendedTestConfiguration
    )
@@ -1358,6 +1359,7 @@ AIdentifier:
    | ExpectedBlockName
    | FinalBlockName
    | TestPurposeDescriptionName
    | TestVariantDescriptionName
    | PICSName
    | PIXITName
    | 'when' | 'then' | 'check' | 'where'
@@ -1616,6 +1618,10 @@ TestPurposeDescriptionAnnotation returns tdl::Annotation:
    key=[tdl::AnnotationType|TestPurposeDescriptionName]
;

TestVariantDescriptionAnnotation returns tdl::Annotation:
    key=[tdl::AnnotationType|TestVariantDescriptionName]
;

WhenAnnotation returns tdl::Annotation:
    key=[tdl::AnnotationType|When]
;
@@ -2132,6 +2138,56 @@ TestPurposeDescription returns tdl::TestDescription:
    END
;

//TODO: distribute below
TestVariantDescription returns tdl::TestDescription:
    annotation+=TestVariantDescriptionAnnotation
    
    //TODO: locally ordered?
    //('TestDescription' | isLocallyOrdered?='Test')
    name=TOIdentifier
    //TODO: parameters?
    (LParen formalParameter+=FormalParameter ( ',' formalParameter+=FormalParameter)* RParen )?
    //TODO: Reference, PICS?, Objective reference vs Objective inline (all annotations?) or simply defer to objective
//	(behaviourDescription=TVDBehaviourDescription)

    BEGIN
        TDObjectiveFragment?
        //TODO: why is configuration not serialised?!
        'Configuration' ':' testConfiguration=[tdl::TestConfiguration|TOIdentifier]
        (behaviourDescription=TVDBehaviourDescription)
    END
;

TVDBehaviourDescription returns tdl::BehaviourDescription:
    behaviour=TVDCompoundBehaviour
;

TVDCompoundBehaviour returns tdl::CompoundBehaviour:
    //(annotation+=PICSAnnotation ':')?
    block=TVDBlock
;

TVDBlock returns tdl::Block:
    //NOTE: No guard -> guard is PICS
    //TODO: annotation has to be pulled up? or pushed down?
    //TODO: Objective
    (annotation+=PICSAnnotation ':' guard+=LocalExpression)?
    behaviour+=VariantBehaviour 
;

VariantBehaviour returns tdl::TestDescriptionReference:
    'Bindings' ':' testDescription=[tdl::TestDescription|DeclName]
    (BEGIN 
    	argument+=ParameterBinding 
    	( ',' argument+=ParameterBinding)* 
	END)?
	//TODO: skip / merge above
    (BEGIN
        componentInstanceBinding+=ComponentInstanceBinding 
        (',' componentInstanceBinding+=ComponentInstanceBinding)*
    END)?
;

TPDBehaviourDescription returns tdl::BehaviourDescription:
    behaviour=TPDCompoundBehaviour
;
@@ -2303,6 +2359,10 @@ TestPurposeDescriptionName:
    'Test' 'Purpose' 'Description'
;

TestVariantDescriptionName:
    'Variant'
;

PICSName:
    'PICS'
;