Skip to content

Commit 98e4bb7

Browse files
authored
Major grammar change: bracket positions in upstream-downstream relationships only around arrow (#134)
1 parent 57c5806 commit 98e4bb7

File tree

2 files changed

+85
-66
lines changed

2 files changed

+85
-66
lines changed

org.contextmapper.dsl.tests/src/org/contextmapper/dsl/tests/UpstreamDownstreamRelationshipDSLParsingTest.xtend

Lines changed: 81 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,9 @@ class UpstreamDownstreamRelationshipDSLParsingTest {
127127
''';
128128
val dslSnippets = new ArrayList<String>;
129129
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [U,OHS,PL]->[D,CF] anotherTestContext"));
130-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[U,OHS,PL]testContext -> [D,CF]anotherTestContext"));
131-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext[U,OHS,PL] -> anotherTestContext[D,CF]"));
132-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[U,OHS,PL]testContext -> anotherTestContext[D,CF]"));
133-
134-
// also without the U and D:
130+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [U,OHS,PL]->[CF] anotherTestContext"));
131+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [OHS,PL]->[D,CF] anotherTestContext"));
135132
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [OHS,PL]->[CF] anotherTestContext"));
136-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[OHS,PL]testContext -> [CF]anotherTestContext"));
137-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext[OHS,PL] -> anotherTestContext[CF]"));
138-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[OHS,PL]testContext -> anotherTestContext[CF]"));
139133

140134
for(dslSnippet : dslSnippets) {
141135
// when
@@ -174,15 +168,9 @@ class UpstreamDownstreamRelationshipDSLParsingTest {
174168
''';
175169
val dslSnippets = new ArrayList<String>;
176170
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [D,CF]<-[U,OHS,PL] testContext"));
177-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[D,CF]anotherTestContext <- [U,OHS,PL]testContext"));
178-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext[D,CF] <- testContext[U,OHS,PL]"));
179-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[D,CF]anotherTestContext <- testContext[U,OHS,PL]"));
180-
181-
// also without the U and D:
171+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [D,CF]<-[OHS,PL] testContext"));
172+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [CF]<-[U,OHS,PL] testContext"));
182173
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [CF]<-[OHS,PL] testContext"));
183-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[CF]anotherTestContext <- [OHS,PL]testContext"));
184-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext[CF] <- testContext[OHS,PL]"));
185-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[CF]anotherTestContext <- testContext[OHS,PL]"));
186174

187175
for(dslSnippet : dslSnippets) {
188176
// when
@@ -204,6 +192,83 @@ class UpstreamDownstreamRelationshipDSLParsingTest {
204192
assertTrue(upstreamDownstreamRelationship.downstreamRoles.contains(DownstreamRole.CONFORMIST))
205193
}
206194
}
195+
196+
@Test
197+
def void canDefineUpstreamDownstreamInShortSyntaxWithUpstreamRolesOnly() {
198+
// given
199+
val String dslSnippetTemplate = '''
200+
ContextMap {
201+
contains testContext
202+
contains anotherTestContext
203+
204+
<<relationship>>
205+
}
206+
207+
BoundedContext testContext
208+
BoundedContext anotherTestContext
209+
''';
210+
val dslSnippets = new ArrayList<String>;
211+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [D]<-[U,OHS,PL] testContext"));
212+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [D]<-[OHS,PL] testContext"));
213+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext <-[U,OHS,PL] testContext"));
214+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext <-[OHS,PL] testContext"));
215+
216+
for(dslSnippet : dslSnippets) {
217+
// when
218+
val ContextMappingModel result = parseHelper.parse(dslSnippet);
219+
// then
220+
assertThatNoParsingErrorsOccurred(result);
221+
assertThatNoValidationErrorsOccurred(result);
222+
223+
val Relationship relationship = result.map.relationships.get(0)
224+
assertTrue(relationship.class.interfaces.contains(UpstreamDownstreamRelationship))
225+
226+
val UpstreamDownstreamRelationship upstreamDownstreamRelationship = relationship as UpstreamDownstreamRelationship
227+
assertEquals("testContext", upstreamDownstreamRelationship.upstream.name)
228+
assertEquals("anotherTestContext", upstreamDownstreamRelationship.downstream.name)
229+
230+
assertTrue(upstreamDownstreamRelationship.upstreamRoles.contains(UpstreamRole.OPEN_HOST_SERVICE))
231+
assertTrue(upstreamDownstreamRelationship.upstreamRoles.contains(UpstreamRole.PUBLISHED_LANGUAGE))
232+
}
233+
}
234+
235+
@Test
236+
def void canDefineUpstreamDownstreamInShortSyntaxWithDownstreamRolesOnly() {
237+
// given
238+
val String dslSnippetTemplate = '''
239+
ContextMap {
240+
contains testContext
241+
contains anotherTestContext
242+
243+
<<relationship>>
244+
}
245+
246+
BoundedContext testContext
247+
BoundedContext anotherTestContext
248+
''';
249+
val dslSnippets = new ArrayList<String>;
250+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [D,CF]<-[U] testContext"));
251+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [D,CF]<- testContext"));
252+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [CF]<-[U] testContext"));
253+
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [CF]<- testContext"));
254+
255+
for(dslSnippet : dslSnippets) {
256+
// when
257+
val ContextMappingModel result = parseHelper.parse(dslSnippet);
258+
// then
259+
assertThatNoParsingErrorsOccurred(result);
260+
assertThatNoValidationErrorsOccurred(result);
261+
262+
val Relationship relationship = result.map.relationships.get(0)
263+
assertTrue(relationship.class.interfaces.contains(UpstreamDownstreamRelationship))
264+
265+
val UpstreamDownstreamRelationship upstreamDownstreamRelationship = relationship as UpstreamDownstreamRelationship
266+
assertEquals("testContext", upstreamDownstreamRelationship.upstream.name)
267+
assertEquals("anotherTestContext", upstreamDownstreamRelationship.downstream.name)
268+
269+
assertTrue(upstreamDownstreamRelationship.downstreamRoles.contains(DownstreamRole.CONFORMIST))
270+
}
271+
}
207272

208273
@Test
209274
def void canDefineCustomerSupplier() {
@@ -309,15 +374,7 @@ class UpstreamDownstreamRelationshipDSLParsingTest {
309374
val dslSnippets = new ArrayList<String>;
310375
// all variants only with S and C
311376
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [C]<-[S] testContext"));
312-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[C]anotherTestContext <- [S]testContext"));
313-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext[C] <- testContext[S]"));
314-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[C]anotherTestContext <- testContext[S]"));
315-
316-
// all variants with U, S and D, C
317377
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext [D,C]<-[U,S] testContext"));
318-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[D,C]anotherTestContext <- [U,S]testContext"));
319-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "anotherTestContext[D,C] <- testContext[U,S]"));
320-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[D,C]anotherTestContext <- testContext[U,S]"));
321378

322379
for(dslSnippet : dslSnippets) {
323380
// when
@@ -352,15 +409,7 @@ class UpstreamDownstreamRelationshipDSLParsingTest {
352409
val dslSnippets = new ArrayList<String>;
353410
// all variants only with S and C
354411
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [S]->[C] anotherTestContext"));
355-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[S]testContext -> [C]anotherTestContext"));
356-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext[S] -> anotherTestContext[C]"));
357-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[S]testContext -> anotherTestContext[C]"));
358-
359-
// all variants with U, S and D, C
360412
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [U,S]->[D,C] anotherTestContext"));
361-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[U,S]testContext -> [D,C]anotherTestContext"));
362-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext[U,S] -> anotherTestContext[D,C]"));
363-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[U,S]testContext -> anotherTestContext[D,C]"));
364413

365414
for(dslSnippet : dslSnippets) {
366415
// when
@@ -395,15 +444,7 @@ class UpstreamDownstreamRelationshipDSLParsingTest {
395444
val dslSnippets = new ArrayList<String>;
396445
// all variants only with S and C
397446
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [S,PL]->[C,ACL] anotherTestContext"));
398-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[S,PL]testContext -> [C,ACL]anotherTestContext"));
399-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext[S,PL] -> anotherTestContext[C,ACL]"));
400-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[S,PL]testContext -> anotherTestContext[C,ACL]"));
401-
402-
// all variants with U, S and D, C
403447
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext [U,S,PL]->[D,C,ACL] anotherTestContext"));
404-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[U,S,PL]testContext -> [D,C,ACL]anotherTestContext"));
405-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "testContext[U,S,PL] -> anotherTestContext[D,C,ACL]"));
406-
dslSnippets.add(dslSnippetTemplate.replace("<<relationship>>", "[U,S,PL]testContext -> anotherTestContext[D,C,ACL]"));
407448

408449
for(dslSnippet : dslSnippets) {
409450
// when

org.contextmapper.dsl/src/org/contextmapper/dsl/ContextMappingDSL.xtext

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -123,20 +123,8 @@ UpstreamDownstreamRelationship:
123123
CustomerSupplierRelationship |
124124
(
125125
(
126-
(
127-
((upstream = [BoundedContext] (('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']')) '->' ((('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']') downstream = [BoundedContext])) |
128-
(((('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']') upstream = [BoundedContext]) '->'((('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']') downstream = [BoundedContext])) |
129-
((upstream = [BoundedContext] (('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']')) '->' (downstream = [BoundedContext] (('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']'))) |
130-
(((('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']') upstream = [BoundedContext]) '->' (downstream = [BoundedContext] (('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']'))) |
131-
(upstream = [BoundedContext] '->' downstream = [BoundedContext])
132-
) |
133-
(
134-
(downstream = [BoundedContext] (('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']') '<-' (('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']') upstream = [BoundedContext]) |
135-
((('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']') downstream = [BoundedContext] '<-'(('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']') upstream = [BoundedContext]) |
136-
(downstream = [BoundedContext] (('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']') '<-' upstream = [BoundedContext] (('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']')) |
137-
((('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']') downstream = [BoundedContext] '<-' upstream = [BoundedContext] (('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']')) |
138-
(downstream = [BoundedContext] '<-' upstream = [BoundedContext])
139-
) |
126+
(upstream = [BoundedContext] (('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']')? '->' (('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']')? downstream = [BoundedContext]) |
127+
(downstream = [BoundedContext] (('[''D'']') | ('['('D'',')?(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)']')? '<-' (('[''U'']') | ('['('U'',')?(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)']')? upstream = [BoundedContext]) |
140128
(upstream = [BoundedContext] ('['((upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']')?'Upstream-Downstream'('['((downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']')? downstream = [BoundedContext]) |
141129
(downstream = [BoundedContext] ('['((downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']')?'Downstream-Upstream'('['((upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']')? upstream = [BoundedContext])
142130
)
@@ -153,18 +141,8 @@ UpstreamDownstreamRelationship:
153141
CustomerSupplierRelationship:
154142
(
155143
(
156-
(
157-
(upstream = [BoundedContext] '['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' '->' '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' downstream = [BoundedContext]) |
158-
('['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' upstream = [BoundedContext] '->' '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' downstream = [BoundedContext]) |
159-
(upstream = [BoundedContext] '['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' '->' downstream = [BoundedContext] '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']') |
160-
('['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' upstream = [BoundedContext] '->' downstream = [BoundedContext] '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']')
161-
) |
162-
(
163-
(downstream = [BoundedContext] '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' '<-' '['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' upstream = [BoundedContext]) |
164-
('['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' downstream = [BoundedContext] '<-''['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' upstream = [BoundedContext]) |
165-
(downstream = [BoundedContext] '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' '<-' upstream = [BoundedContext] '['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']') |
166-
('['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' downstream = [BoundedContext] '<-' upstream = [BoundedContext] '['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']')
167-
) |
144+
(upstream = [BoundedContext] '['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' '->' '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' downstream = [BoundedContext]) |
145+
(downstream = [BoundedContext] '['('D'',')?'C'(','(downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']' '<-' '['('U'',')?'S'(','(upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']' upstream = [BoundedContext]) |
168146
(downstream = [BoundedContext] ('['((downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']')?'Customer-Supplier'('['((upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']')? upstream = [BoundedContext]) |
169147
(upstream = [BoundedContext] ('['((upstreamRoles+=UpstreamRole) ("," upstreamRoles+=UpstreamRole)*)?']')?'Supplier-Customer'('['((downstreamRoles+=DownstreamRole) ("," downstreamRoles+=DownstreamRole)*)?']')? downstream = [BoundedContext])
170148
)

0 commit comments

Comments
 (0)