@@ -16,6 +16,38 @@ ExReqSafePassingControlTest >> report [
1616 ^ report
1717]
1818
19+ { #category : ' as yet unclassified' }
20+ ExReqSafePassingControlTest >> req1 [
21+
22+ < ExReqSafePassingControl >
23+ ^ ExReqRequirement new
24+ title:
25+ ' A requirement verifications shall handle meta-safe recursion' ;
26+ addVerification: [ :verify |
27+ verify
28+ addStepOnAST:
29+ (ExReqMockTestObject methodNamed:
30+ #methodToTestMetaSafeRecursion ) ast
31+ withPrecondition: [
32+ ExReqMockTestObject new methodToTestMetaSafeRecursion ]
33+ withPostcondition: [
34+ ExReqMockTestObject new methodToTestMetaSafeRecursion ] ];
35+ yourself
36+ ]
37+
38+ { #category : ' as yet unclassified' }
39+ ExReqSafePassingControlTest >> req2 [
40+
41+ < ExReqSafePassingControl >
42+ ^ ExReqRequirement new
43+ title:
44+ ' A requirement verifications shall manage evaluation in a NON thread-specific maner.' ;
45+ addVerification: [ :verify |
46+ verify addStepOnAST:
47+ (ExReqMockTestObject methodNamed: #methodToTestThread ) ast ];
48+ yourself
49+ ]
50+
1951{ #category : ' as yet unclassified' }
2052ExReqSafePassingControlTest >> req3 [
2153
@@ -53,6 +85,18 @@ ExReqSafePassingControlTest >> tearDown [
5385 repository := nil
5486]
5587
88+ { #category : ' tests' }
89+ ExReqSafePassingControlTest >> testMetaSafeRecursion [
90+
91+ | requirement requirementReport |
92+ self report installTracingPoints.
93+ ExReqMockTestObject new methodToTestMetaSafeRecursion.
94+ requirement := self req1.
95+ requirementReport := self report findRequirementReport: requirement.
96+ self assert: requirementReport isValid.
97+ self report removeTracingPoints
98+ ]
99+
56100{ #category : ' tests' }
57101ExReqSafePassingControlTest >> testNonLocalReturn [
58102
@@ -64,3 +108,27 @@ ExReqSafePassingControlTest >> testNonLocalReturn [
64108 self assert: requirementReport isValid.
65109 self report removeTracingPoints
66110]
111+
112+ { #category : ' tests' }
113+ ExReqSafePassingControlTest >> testThread [
114+
115+ | block return checkAssert requirement requirementReport |
116+ checkAssert := Semaphore new .
117+ self report installTracingPoints.
118+ requirement := self req2.
119+ requirementReport := self report findRequirementReport: requirement.
120+
121+ block := [
122+ ExReqMockTestObject new methodToTestThread.
123+ checkAssert signal ].
124+ return := block fork.
125+
126+ " Returns immediately, forked block not yet run"
127+ self deny: requirementReport isValid.
128+
129+ " Forked process has been scheduled"
130+ checkAssert wait.
131+ self assert: requirementReport isValid.
132+
133+ self report removeTracingPoints
134+ ]
0 commit comments