Skip to content

Commit 11414ea

Browse files
committed
Issue #953: checkpoint ... RwRowanSample9V4Test>>testIssue705 passing ...
1 parent 08dd152 commit 11414ea

5 files changed

+513
-2
lines changed

rowan/src/Rowan-TestsV3/RwRowanSample12TestProjectLibraryGenerator.class.st

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ RwRowanSample12TestProjectLibraryGenerator new
1717
genSpec_0004: commitComment;
1818
genSpec_0005: commitComment;
1919
genSpec_0006: commitComment;
20+
genSpec_0007: commitComment;
21+
genSpec_0008: commitComment;
2022
yourself
2123
"
2224
Class {
@@ -62,7 +64,7 @@ RwRowanSample12TestProjectLibraryGenerator >> _addDefinitionsFor_0005: resolvedP
6264
componentName := 'Core'.
6365
packageName := projectName , '-' , componentName.
6466
className := projectName , 'ConcreteClass1'.
65-
requiredProjectName := 'RowanSample9V3'.
67+
requiredProjectName := 'RowanSample9V4'.
6668
requiredComponentName := 'Parent'.
6769
requiredSpecName := requiredProjectName , '_' , requiredComponentName.
6870
requiredRevision := 'spec_0069'.

rowan/src/Rowan-TestsV3/RwTestProjectLibraryGeneratorV3.class.st

+1-1
Original file line numberDiff line numberDiff line change
@@ -1909,7 +1909,7 @@ RwTestProjectLibraryGeneratorV3 >> genSpec_0068: commitMessage [
19091909
RwTestProjectLibraryGeneratorV3 >> genSpec_0069: commitMessage [
19101910
"Start with spec_0000 (RowanSample9) and add Parent, Child and Bridge top-level components with corresponding packages. The Bridge component is not expected to be loaded with the Parent component, because it has a required project conflict.
19111911
1912-
The Parent package has an AbstractRowanSample9ParentClass1 class. RowanSample12:spec_0005 requires RowanSample9:spec_0069 and has a RowanSample12ConcreteClass1 class that suclasses AbstractRowanSample9ParentClass1.
1912+
The Parent package has an AbstractRowanSample9ParentClass1 class. RowanSample12:spec_0006 requires RowanSample9:spec_0069 and has a RowanSample12ConcreteClass1 class that suclasses AbstractRowanSample9ParentClass1.
19131913
19141914
The Child package has a concrete class that subclasses RowanSample10Class1, making RowanSample10:spec0001 a required project.
19151915
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
Extension { #name : 'RwRowanSample12TestProjectLibraryGenerator' }
2+
3+
{ #category : '*rowan-testsv4' }
4+
RwRowanSample12TestProjectLibraryGenerator >> _addDefinitionsFor_0007: resolvedProject [
5+
"Start with spec_0000. The class RowanSample12ConcreteClass1 has a superclass AbstractRowanSample9V4BridgeClass1 from the project RowanSample9. This project requires RowanSample9V4:spec_0069. The method #foo is defined in RowanSample12ConcreteClass1."
6+
7+
| className packageName requiredLoadSpec requiredSpecName requiredProjectName componentName requiredRevision requiredComponentName |
8+
componentName := 'Core'.
9+
packageName := projectName , '-' , componentName.
10+
className := projectName , 'ConcreteClass1'.
11+
requiredProjectName := 'RowanSample9V4'.
12+
requiredComponentName := 'Bridge'.
13+
requiredSpecName := requiredProjectName , '_' , requiredComponentName.
14+
requiredRevision := 'spec_0069'.
15+
16+
resolvedProject
17+
addPackagesNamed: {packageName} toComponentNamed: componentName;
18+
removeComponentNames: {'Tests'};
19+
removeComponentNamed: 'tests/Tests';
20+
yourself.
21+
(resolvedProject componentNamed: componentName)
22+
addProjectNamed: requiredSpecName.
23+
((resolvedProject packageNamed: packageName)
24+
addClassNamed: className
25+
super: 'Abstract', requiredProjectName, 'BridgeClass1'
26+
instvars: #()
27+
category: packageName
28+
comment: 'I am an example class')
29+
addInstanceMethod: 'foo ^1' protocol: 'accessing';
30+
yourself.
31+
32+
resolvedProject projectsRoot ensureCreateDirectory.
33+
requiredLoadSpec := RwLoadSpecificationV2 new
34+
specName: requiredSpecName;
35+
projectName: requiredProjectName;
36+
revision: requiredRevision;
37+
gitUrl: '[email protected]:dalehenrich/' , requiredProjectName , '.git';
38+
componentNames: {requiredComponentName};
39+
customConditionalAttributes: {'tests'};
40+
gemstoneSetDefaultSymbolDictNameTo: RwRowanSample12Test _sampleSymbolDictionaryName1;
41+
yourself.
42+
requiredLoadSpec exportTo: resolvedProject projectsRoot.
43+
44+
^ resolvedProject
45+
]
46+
47+
{ #category : '*rowan-testsv4' }
48+
RwRowanSample12TestProjectLibraryGenerator >> _addDefinitionsFor_0008: resolvedProject [
49+
"Start with spec_0000. The class RowanSample12ConcreteClass1 subclasses AbstractRowanSample9V4ParentClass1 in RowanSample9V4:spec_0069, component Parent. RowanSample9V4. RowanSample9V4:spec_0069 componant Parent has the test. This spec requires RowanSample9V4:spec_0069."
50+
51+
| className packageName requiredLoadSpec requiredSpecName requiredProjectName componentName requiredRevision requiredComponentName |
52+
componentName := 'Core'.
53+
packageName := projectName , '-' , componentName.
54+
className := projectName , 'ConcreteClass1'.
55+
requiredProjectName := 'RowanSample9V4'.
56+
requiredComponentName := 'Parent'.
57+
requiredSpecName := requiredProjectName , '_' , requiredComponentName.
58+
requiredRevision := 'spec_0069'.
59+
60+
resolvedProject
61+
addPackagesNamed: {packageName} toComponentNamed: componentName;
62+
removeComponentNames: {'Tests'};
63+
removeComponentNamed: 'tests/Tests';
64+
yourself.
65+
(resolvedProject componentNamed: componentName)
66+
addProjectNamed: requiredSpecName.
67+
((resolvedProject packageNamed: packageName)
68+
addClassNamed: className
69+
super: 'Abstract', requiredProjectName, 'ParentClass1'
70+
instvars: #()
71+
category: packageName
72+
comment: 'I am an example class')
73+
addInstanceMethod: 'foo ^1' protocol: 'accessing';
74+
yourself.
75+
76+
resolvedProject projectsRoot ensureCreateDirectory.
77+
requiredLoadSpec := RwLoadSpecificationV2 new
78+
specName: requiredSpecName;
79+
projectName: requiredProjectName;
80+
revision: requiredRevision;
81+
gitUrl: '[email protected]:dalehenrich/' , requiredProjectName , '.git';
82+
componentNames: {requiredComponentName};
83+
customConditionalAttributes: {'tests'};
84+
gemstoneSetDefaultSymbolDictNameTo: RwRowanSample12Test _sampleSymbolDictionaryName1;
85+
yourself.
86+
requiredLoadSpec exportTo: resolvedProject projectsRoot.
87+
88+
^ resolvedProject
89+
]
90+
91+
{ #category : '*rowan-testsv4' }
92+
RwRowanSample12TestProjectLibraryGenerator >> genSpec_0007: commitMessage [
93+
"Start with spec_0000. The class RowanSample12ConcreteClass1 has a superclass AbstractRowanSample9BridgeClass1 from the project RowanSample9V4. This project requires RowanSample9V4:spec_0069. The method #foo is defined in RowanSample12ConcreteClass1. Based on spec_0006"
94+
95+
"https://github.com/GemTalk/Rowan/issues/705"
96+
97+
"The method is idempotent with respect to the branches involved, UNLESS something
98+
has explicitly changed within the model or the disk format of artefacts."
99+
100+
| indexCard definedProject resolvedRepository specName postfix derivedFrom title |
101+
postfix := '0007'.
102+
specName := 'spec_' , postfix.
103+
derivedFrom := 'spec_0000'.
104+
title := 'Start with spec_0000. The class RowanSample12ConcreteClass1 has a superclass AbstractRowanSample9BridgeClass1 from the project RowanSample9V4. This project requires RowanSample9V4:spec_0069. The method #foo is defined in RowanSample12ConcreteClass1. Based on spec_0006'.
105+
106+
indexCard := (self
107+
_createCard: postfix
108+
specName: specName
109+
title: title
110+
index: 7
111+
derivedFrom: derivedFrom
112+
comment: 'jigsaw puzzle class relationships')
113+
rowanIssues: #(705);
114+
yourself.
115+
definedProject := (self _createDefinedProject: self projectName)
116+
specName: specName;
117+
revision: derivedFrom;
118+
gitUrl: self projectUrl;
119+
specComponentNames: {'Core'};
120+
customConditionalAttributes: {};
121+
packageConvention: 'Rowan';
122+
comment: title;
123+
gemstoneSetDefaultSymbolDictNameTo: self _sampleSymbolDictionaryName1;
124+
yourself.
125+
126+
resolvedRepository := self
127+
_genSpecFor: specName
128+
definedProject: definedProject
129+
addDefinitions: [ :resolvedProject | self _addDefinitionsFor_0007: resolvedProject ].
130+
131+
self
132+
_finishCommitAndPush: specName
133+
loadSpecification: resolvedRepository loadSpecification
134+
indexCard: indexCard
135+
derivedFrom: (derivedFrom copyReplaceAll: 'spec' with: 'index')
136+
resolvedRepository: resolvedRepository
137+
commitMessage: commitMessage
138+
]
139+
140+
{ #category : '*rowan-testsv4' }
141+
RwRowanSample12TestProjectLibraryGenerator >> genSpec_0008: commitMessage [
142+
"Start with spec_0000. The class RowanSample12ConcreteClass1 subclasses AbstractRowanSample9ParentClass1 in RowanSample9:spec_0069, component Parent. RowanSample9V4. RowanSample9V4:spec_0069 componant Parent has the test. This spec requires RowanSample9V4:spec_0069. Based on spec_0005"
143+
144+
"https://github.com/GemTalk/Rowan/issues/705"
145+
146+
"The method is idempotent with respect to the branches involved, UNLESS something
147+
has explicitly changed within the model or the disk format of artefacts."
148+
149+
| indexCard definedProject resolvedRepository specName postfix derivedFrom title |
150+
postfix := '0008'.
151+
specName := 'spec_' , postfix.
152+
derivedFrom := 'spec_0000'.
153+
title := 'Start with spec_0000. The class RowanSample12ConcreteClass1 subclasses AbstractRowanSample9ParentClass1 in RowanSample9:spec_0069, component Parent. RowanSample9V4. RowanSample9V4:spec_0069 componant Parent has the test. This spec requires RowanSample9V4:spec_0069. Based on spec_0005'.
154+
155+
indexCard := (self
156+
_createCard: postfix
157+
specName: specName
158+
title: title
159+
index: 5
160+
derivedFrom: derivedFrom
161+
comment: 'jigsaw puzzle class relationships')
162+
rowanIssues: #(705);
163+
yourself.
164+
definedProject := (self _createDefinedProject: self projectName)
165+
specName: specName;
166+
revision: derivedFrom;
167+
gitUrl: self projectUrl;
168+
specComponentNames: {'Core'};
169+
customConditionalAttributes: {};
170+
packageConvention: 'Rowan';
171+
comment: title;
172+
yourself.
173+
174+
resolvedRepository := self
175+
_genSpecFor: specName
176+
definedProject: definedProject
177+
addDefinitions: [ :resolvedProject | self _addDefinitionsFor_0005: resolvedProject ].
178+
179+
self
180+
_finishCommitAndPush: specName
181+
loadSpecification: resolvedRepository loadSpecification
182+
indexCard: indexCard
183+
derivedFrom: (derivedFrom copyReplaceAll: 'spec' with: 'index')
184+
resolvedRepository: resolvedRepository
185+
commitMessage: commitMessage
186+
]

rowan/src/Rowan-TestsV4/RwRowanSample9V4Test.class.st

+99
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,102 @@ RwRowanSample9V4Test class >> _loadSpecSessionCacheKey [
1818
RwRowanSample9V4Test class >> _rowanSample9ProjectName [
1919
^ 'RowanSample9V4'
2020
]
21+
22+
{ #category : 'tests' }
23+
RwRowanSample9V4Test >> testIssue705 [
24+
"load Bridge, Child, Parent, Bridge, Parent, Child, Bridge sequentially"
25+
26+
"https://github.com/GemTalk/Rowan/issues/705"
27+
28+
| loadSpec projectName projectNames resolvedProject loadedProjects requiredProjectNames requiredProjectSet project projectNamesMap |
29+
loadSpec := self _loadSpecNamed: 'spec_0069'.
30+
31+
projectName := loadSpec projectName.
32+
requiredProjectNames := { 'RowanSample10V3' . 'RowanSample11' . 'RowanSample12'}.
33+
projectNames := {projectName }, requiredProjectNames.
34+
35+
projectNames do: [:pn |
36+
(Rowan image loadedProjectNamed: pn ifAbsent: [ ])
37+
ifNotNil: [ :proj | Rowan image _removeLoadedProject: proj ] ].
38+
requiredProjectNames do: [:pn |
39+
(self _testRowanProjectsSandbox / pn ) ensureDeleteAll ].
40+
41+
projectNamesMap := Dictionary new
42+
at: 'Bridge' put: {projectName . 'RowanSample11' . 'RowanSample12' };
43+
at: 'Child' put: {projectName . 'RowanSample10V3' };
44+
at: 'Parent' put: {projectName . 'RowanSample12' };
45+
yourself.
46+
47+
"resolve project from default load spec - prime the pump"
48+
resolvedProject := loadSpec resolveProject.
49+
50+
"resolve project based on Bridge load spec"
51+
loadSpec := RwSpecification fromFile: resolvedProject specsRoot / 'Bridge', 'ston'.
52+
loadSpec projectsHome: self _testRowanProjectsSandbox.
53+
54+
resolvedProject := loadSpec resolveProject.
55+
56+
"load Bridge component"
57+
loadedProjects := resolvedProject load.
58+
project := Rowan projectNamed: projectName.
59+
60+
"validate"
61+
self
62+
_standard_validate: resolvedProject
63+
loadedProjects: loadedProjects
64+
expectedProjectNames: (projectNamesMap at: 'Bridge').
65+
66+
"load and validate Child component"
67+
self
68+
_processIssue705: resolvedProject
69+
componentNamed: 'Child'
70+
previousRequiredProjectNames: {'RowanSample11' . 'RowanSample12'}
71+
projectNamesMap: projectNamesMap.
72+
73+
"load and validate Parent component"
74+
self
75+
_processIssue705: resolvedProject
76+
componentNamed: 'Parent'
77+
previousRequiredProjectNames: {'RowanSample10V3'}
78+
projectNamesMap: projectNamesMap.
79+
80+
"load and validate Bridge component"
81+
self
82+
_processIssue705: resolvedProject
83+
componentNamed: 'Bridge'
84+
previousRequiredProjectNames: {'RowanSample12'}
85+
projectNamesMap: projectNamesMap.
86+
87+
"load and validate Parent component"
88+
self
89+
_processIssue705: resolvedProject
90+
componentNamed: 'Parent'
91+
previousRequiredProjectNames: {'RowanSample11' . 'RowanSample12'}
92+
projectNamesMap: projectNamesMap.
93+
94+
"load and validate Child component"
95+
self
96+
_processIssue705: resolvedProject
97+
componentNamed: 'Child'
98+
previousRequiredProjectNames: {'RowanSample12'}
99+
projectNamesMap: projectNamesMap.
100+
101+
"load and validate Bridge component"
102+
self
103+
_processIssue705: resolvedProject
104+
componentNamed: 'Bridge'
105+
previousRequiredProjectNames: {'RowanSample10V3'}
106+
projectNamesMap: projectNamesMap.
107+
108+
"unload projects"
109+
requiredProjectSet := project requiredProjectSet.
110+
requiredProjectSet unload.
111+
112+
"validate"
113+
projectNames do: [:pn |
114+
"all projects involved are expected to be unloaded"
115+
Rowan
116+
projectNamed: pn
117+
ifPresent: [:p |
118+
self assert: false description: 'project ', pn printString, ' is still loaded'] ]
119+
]

0 commit comments

Comments
 (0)