Skip to content

Commit cf05f62

Browse files
committed
Add the breakpoints
1 parent 7d0a13c commit cf05f62

24 files changed

Lines changed: 867 additions & 73 deletions

src/ExecutableRequirements-Tests/ExReqMockRequirements.class.st

Lines changed: 79 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
Class {
22
#name : 'ExReqMockRequirements',
33
#superclass : 'Object',
4-
#category : 'ExecutableRequirements-Tests',
5-
#package : 'ExecutableRequirements-Tests'
4+
#category : 'ExecutableRequirements-Tests-Meta-Requirements-Tests',
5+
#package : 'ExecutableRequirements-Tests',
6+
#tag : 'Meta-Requirements-Tests'
67
}
78

89
{ #category : 'tests' }
@@ -29,7 +30,7 @@ ExReqMockRequirements >> testReq3 [
2930
<ExReqTest>
3031
^ ExReqRequirement new
3132
title:
32-
'A requirement can be traced to a document that contain the specification, by default this Pharo image';
33+
'A requirement can be traced to a document that contain the specification';
3334
sourceDocument: (ExReqMockDocument new requirementId: #testReq3);
3435
yourself
3536
]
@@ -42,30 +43,97 @@ ExReqMockRequirements >> testReq4 [
4243
title: 'A requirement can be verified';
4344
addVerification: [ :verify |
4445
verify addStepOnAST:
45-
((ExReqMockRequirements methodNamed: #testReq4) ast allChildren
46-
select: [ :each | each isBlock ]) first ];
46+
(((ExReqMockRequirements methodNamed: #testReq4) ast
47+
allChildren select: [ :each | each isSequence ]) at: 2) ];
4748
addVerification: [ :verify |
4849
verify
4950
addStepOnAST:
50-
((ExReqMockRequirements methodNamed: #testReq4) ast allChildren
51-
select: [ :each | each isBlock ]) second
51+
(((ExReqMockRequirements methodNamed: #testReq4) ast
52+
allChildren select: [ :each | each isSequence ]) at: 4)
5253
withPrecondition: [ :obj :arguments :requirement |
5354
obj = requirement ] ];
5455
addVerification: [ :verify |
5556
verify
5657
addStepOnAST:
57-
((ExReqMockRequirements methodNamed: #testReq4) ast allChildren
58-
select: [ :each | each isBlock ]) third
58+
(((ExReqMockRequirements methodNamed: #testReq4) ast
59+
allChildren select: [ :each | each isSequence ]) at: 7)
5960
withPostcondition: [ :obj :arguments :requirement |
6061
obj = requirement ] ];
6162
addVerification: [ :verify |
6263
verify
6364
addStepOnAST:
64-
((ExReqMockRequirements methodNamed: #testReq4) ast allChildren
65-
select: [ :each | each isBlock ]) last
65+
(((ExReqMockRequirements methodNamed: #testReq4) ast
66+
allChildren select: [ :each | each isSequence ]) at: 10)
6667
withPrecondition: [ :obj :arguments :requirement |
6768
obj = requirement ]
6869
withPostcondition: [ :obj :arguments :requirement |
6970
obj = requirement ] ];
7071
yourself
7172
]
73+
74+
{ #category : 'tests' }
75+
ExReqMockRequirements >> testReq5 [
76+
77+
<ExReqTest>
78+
^ ExReqRequirement new
79+
title: 'A requirement can have a title';
80+
addVerification: [ :verify |
81+
verify
82+
addStepOnAST:
83+
((ExReqMockRequirements methodNamed: #testReq5) ast)
84+
withPostcondition: [ :obj :arguments :requirement |
85+
requirement title = 'A requirement can have a title' and: [
86+
obj title = 'A requirement can have a title' ] ] ];
87+
yourself
88+
]
89+
90+
{ #category : 'tests' }
91+
ExReqMockRequirements >> testReq6 [
92+
93+
<ExReqTest>
94+
^ ExReqRequirement new
95+
title: 'A requirement can have a description';
96+
description: 'The description';
97+
addVerification: [ :verify |
98+
verify
99+
addStepOnAST:
100+
((ExReqMockRequirements methodNamed: #testReq6) ast allChildren
101+
select: [ :each | each isLiteralNode ]) second parent
102+
withPostcondition: [ :obj :arguments :requirement |
103+
requirement description = 'The description' and: [
104+
obj description = 'The description' ] ] ];
105+
yourself
106+
]
107+
108+
{ #category : 'tests' }
109+
ExReqMockRequirements >> testReq7 [
110+
111+
<ExReqTest>
112+
^ ExReqRequirement new
113+
title: 'A requirement verifications can target the same AST node';
114+
description: 'The description';
115+
addVerification: [ :verify |
116+
verify addStepOnAST:
117+
((ExReqMockRequirements methodNamed: #testReq7) ast allChildren
118+
select: [ :each | each isSequence ]) second ];
119+
addVerification: [ :verify |
120+
verify
121+
addStepOnAST:
122+
((ExReqMockRequirements methodNamed: #testReq7) ast allChildren
123+
select: [ :each | each isSequence ]) second
124+
withPrecondition: [ :obj :arguments :requirement | true ] ];
125+
addVerification: [ :verify |
126+
verify
127+
addStepOnAST:
128+
((ExReqMockRequirements methodNamed: #testReq7) ast allChildren
129+
select: [ :each | each isSequence ]) second
130+
withPrecondition: [ :obj :arguments :requirement | true ]
131+
withPostcondition: [ :obj :arguments :requirement | true ] ];
132+
addVerification: [ :verify |
133+
verify
134+
addStepOnAST:
135+
((ExReqMockRequirements methodNamed: #testReq7) ast allChildren
136+
select: [ :each | each isSequence ]) second
137+
withPostcondition: [ :obj :arguments :requirement | true ] ];
138+
yourself
139+
]
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
Class {
2+
#name : 'ExReqRepositoryReportTest',
3+
#superclass : 'TestCase',
4+
#instVars : [
5+
'repository',
6+
'report'
7+
],
8+
#category : 'ExecutableRequirements-Tests-Meta-Requirements-Tests',
9+
#package : 'ExecutableRequirements-Tests',
10+
#tag : 'Meta-Requirements-Tests'
11+
}
12+
13+
{ #category : 'running' }
14+
ExReqRepositoryReportTest >> report [
15+
16+
^ report
17+
]
18+
19+
{ #category : 'running' }
20+
ExReqRepositoryReportTest >> repository [
21+
22+
^ repository
23+
]
24+
25+
{ #category : 'running' }
26+
ExReqRepositoryReportTest >> setUp [
27+
28+
super setUp.
29+
30+
repository := ExReqRepository new
31+
pragmaSelector: #ExReqTest;
32+
yourself.
33+
report := repository asReport.
34+
]
35+
36+
{ #category : 'running' }
37+
ExReqRepositoryReportTest >> tearDown [
38+
39+
super tearDown.
40+
self report removeTracingPoints
41+
]
42+
43+
{ #category : 'tests' }
44+
ExReqRepositoryReportTest >> testCreateTracingPoints [
45+
46+
self assert: ExReqTracingPoint all isEmpty.
47+
self assert: self report tracingPoints isEmpty.
48+
self report createTracingPoints.
49+
self assert: ExReqTracingPoint all isEmpty.
50+
self assert: self report tracingPoints isNotEmpty
51+
52+
]
53+
54+
{ #category : 'tests' }
55+
ExReqRepositoryReportTest >> testExecuteTracingPoints [
56+
57+
| requirement requirementReport |
58+
self report installTracingPoints.
59+
requirement := ExReqMockRequirements new testReq7.
60+
requirementReport := self report findRequirementReport: requirement.
61+
self assert: requirementReport isValid.
62+
self report removeTracingPoints
63+
]
64+
65+
{ #category : 'tests' }
66+
ExReqRepositoryReportTest >> testInstallTracingPoints [
67+
68+
self assert: ExReqTracingPoint all isEmpty.
69+
self assert: self report tracingPoints isEmpty.
70+
self report installTracingPoints.
71+
self assert: ExReqTracingPoint all isNotEmpty.
72+
self assert: self report tracingPoints isNotEmpty.
73+
self report removeTracingPoints.
74+
self assert: ExReqTracingPoint all isEmpty.
75+
self assert: self report tracingPoints isNotEmpty.
76+
]
77+
78+
{ #category : 'tests' }
79+
ExReqRepositoryReportTest >> testRepositoryEquivalentReport [
80+
81+
self
82+
assert: self repository requirements size
83+
equals: self report requirementReports size.
84+
self repository requirements withIndexDo: [ :req :indexReq |
85+
| repReq |
86+
repReq := self report requirementReports at: indexReq.
87+
self assert: req equals: repReq requirement.
88+
self
89+
assert: req verifications size
90+
equals: repReq verificationReports size.
91+
req verifications withIndexDo: [ :ver :indexVer |
92+
| repVer |
93+
repVer := repReq verificationReports at: indexVer.
94+
self assert: ver equals: repVer verification.
95+
self assert: ver steps size equals: repVer stepReports size.
96+
ver steps withIndexDo: [ :ste :indexSte |
97+
| repSte |
98+
repSte := repVer stepReports at: indexSte.
99+
self assert: ste equals: repSte step ] ] ]
100+
]

src/ExecutableRequirements-Tests/ExReqRepositoryTest.class.st

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ Class {
44
#instVars : [
55
'repository'
66
],
7-
#category : 'ExecutableRequirements-Tests',
8-
#package : 'ExecutableRequirements-Tests'
7+
#category : 'ExecutableRequirements-Tests-Meta-Requirements-Tests',
8+
#package : 'ExecutableRequirements-Tests',
9+
#tag : 'Meta-Requirements-Tests'
910
}
1011

1112
{ #category : 'running' }
@@ -21,7 +22,7 @@ ExReqRepositoryTest >> setUp [
2122
repository := ExReqRepository new pragmaSelector: #ExReqTest; yourself
2223
]
2324

24-
{ #category : 'tests' }
25+
{ #category : 'as yet unclassified' }
2526
ExReqRepositoryTest >> testRequirementsAreTraceable [
2627

2728
| documents mockDocuments pharoImageDocument |
@@ -40,7 +41,7 @@ ExReqRepositoryTest >> testRequirementsAreTraceable [
4041
self assert: mockDocuments first requirementId equals: #testReq3
4142
]
4243

43-
{ #category : 'tests' }
44+
{ #category : 'as yet unclassified' }
4445
ExReqRepositoryTest >> testRequirementsAreUnique [
4546

4647
|expectedRequirementsNumber |
@@ -50,7 +51,7 @@ ExReqRepositoryTest >> testRequirementsAreUnique [
5051
self assert: self repository requirements asSet size equals: expectedRequirementsNumber
5152
]
5253

53-
{ #category : 'tests' }
54+
{ #category : 'as yet unclassified' }
5455
ExReqRepositoryTest >> testRequirementsRepository [
5556

5657
self assert: (self repository requirements allSatisfy: [ :each | each repository = self repository ])
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Class {
2+
#name : 'ExReqRequirementTest',
3+
#superclass : 'TestCase',
4+
#category : 'ExecutableRequirements-Tests-Meta-Requirements-Tests',
5+
#package : 'ExecutableRequirements-Tests',
6+
#tag : 'Meta-Requirements-Tests'
7+
}
8+
9+
{ #category : 'tests' }
10+
ExReqRequirementTest >> testDescription [
11+
12+
self
13+
assert: ExReqMockRequirements new testReq6 description
14+
equals: 'The description'
15+
]
16+
17+
{ #category : 'tests' }
18+
ExReqRequirementTest >> testTitle [
19+
20+
self assert: ExReqMockRequirements new testReq5 title equals: 'A requirement can have a title'
21+
]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Class {
2+
#name : 'ExReqAbstractReport',
3+
#superclass : 'Object',
4+
#category : 'ExecutableRequirements-Model-Report',
5+
#package : 'ExecutableRequirements',
6+
#tag : 'Model-Report'
7+
}
8+
9+
{ #category : 'testing' }
10+
ExReqAbstractReport >> isValid [
11+
12+
^ self shouldBeImplemented
13+
]

src/ExecutableRequirements/ExReqAbstractSourceDocument.class.st

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,30 @@
11
Class {
22
#name : 'ExReqAbstractSourceDocument',
33
#superclass : 'Object',
4+
#instVars : [
5+
'method'
6+
],
47
#category : 'ExecutableRequirements-Documents',
58
#package : 'ExecutableRequirements',
69
#tag : 'Documents'
710
}
811

12+
{ #category : 'as yet unclassified' }
13+
ExReqAbstractSourceDocument >> equalsSource: anExReqSourceDocument [
14+
self method == anExReqSourceDocument method
15+
ifTrue: [ ^ true ].
16+
self method class = anExReqSourceDocument method class
17+
ifFalse: [ ^ false ].
18+
self method size = anExReqSourceDocument method size
19+
ifFalse: [ ^ false ].
20+
self method header = anExReqSourceDocument method header
21+
ifFalse: [ ^ false ].
22+
self method initialPC to: self method endPC do: [ :i |
23+
(self method at: i) = (anExReqSourceDocument method at: i)
24+
ifFalse: [ ^ false ] ].
25+
^ true
26+
]
27+
928
{ #category : 'testing' }
1029
ExReqAbstractSourceDocument >> isMockDocument [
1130

@@ -17,3 +36,15 @@ ExReqAbstractSourceDocument >> isPharoImageDocument [
1736

1837
^ false
1938
]
39+
40+
{ #category : 'accessing' }
41+
ExReqAbstractSourceDocument >> method [
42+
43+
^ method
44+
]
45+
46+
{ #category : 'accessing' }
47+
ExReqAbstractSourceDocument >> method: anObject [
48+
49+
method := anObject
50+
]

src/ExecutableRequirements/ExReqCondition.class.st

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
Class {
2+
#name : 'ExReqDuplicateRequirementsError',
3+
#superclass : 'Error',
4+
#category : 'ExecutableRequirements-Technical',
5+
#package : 'ExecutableRequirements',
6+
#tag : 'Technical'
7+
}
8+
9+
{ #category : 'signalling' }
10+
ExReqDuplicateRequirementsError class >> signalFor: anObject in: aRepository [
11+
12+
^ self signal: (self standardMessageFor: anObject in: aRepository)
13+
]
14+
15+
{ #category : 'signalling' }
16+
ExReqDuplicateRequirementsError class >> standardMessageFor: anObject in: aRepository [
17+
18+
^ String streamContents: [ :stream |
19+
stream print: anObject.
20+
stream << ' duplicates in '.
21+
stream print: aRepository ]
22+
]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Class {
2+
#name : 'ExReqEmptySourceDocument',
3+
#superclass : 'ExReqAbstractSourceDocument',
4+
#category : 'ExecutableRequirements-Documents',
5+
#package : 'ExecutableRequirements',
6+
#tag : 'Documents'
7+
}
8+
9+
{ #category : 'testing' }
10+
ExReqEmptySourceDocument >> isPharoImageDocument [
11+
12+
^ true
13+
]

0 commit comments

Comments
 (0)