@@ -54,15 +54,14 @@ public void EmptyTagPrefix(string prefix)
5454
5555 private static readonly object [ ] MergeMessages =
5656 {
57- new object [ ] { "Merge branch 'feature/one'" , "feature/one" , null , null } ,
58- new object [ ] { "Merge branch 'origin/feature/one'" , "origin/feature/one" , null , null } ,
59- new object [ ] { "Merge tag 'v4.0.0' into master" , "v4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
60- new object [ ] { "Merge tag 'V4.0.0' into master" , "V4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
61- new object [ ] { "Merge branch 'feature/4.1/one'" , "feature/4.1/one" , null , new SemanticVersion ( 4 , 1 ) } ,
62- new object [ ] { "Merge branch 'origin/4.1/feature/one'" , "origin/4.1/feature/one" , null , new SemanticVersion ( 4 , 1 ) } ,
63- new object [ ] { "Merge tag 'v://10.10.10.10' into master" , "v://10.10.10.10" , "master" , null }
64-
65- } ;
57+ new object [ ] { "Merge branch 'feature/one'" , "feature/one" , null , null } ,
58+ new object [ ] { "Merge branch 'origin/feature/one'" , "origin/feature/one" , null , null } ,
59+ new object [ ] { "Merge tag 'v4.0.0' into master" , "v4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
60+ new object [ ] { "Merge tag 'V4.0.0' into master" , "V4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
61+ new object [ ] { "Merge branch 'feature/4.1/one'" , "feature/4.1/one" , null , new SemanticVersion ( 4 , 1 ) } ,
62+ new object [ ] { "Merge branch 'origin/4.1/feature/one'" , "origin/4.1/feature/one" , null , new SemanticVersion ( 4 , 1 ) } ,
63+ new object [ ] { "Merge tag 'v://10.10.10.10' into master" , "v://10.10.10.10" , "master" , null }
64+ } ;
6665
6766 [ TestCaseSource ( nameof ( MergeMessages ) ) ]
6867 public void ParsesMergeMessage (
@@ -75,6 +74,7 @@ public void ParsesMergeMessage(
7574 var sut = new MergeMessage ( message , _config ) ;
7675
7776 // Assert
77+ sut . MatchDefinition . ShouldBe ( "Default" ) ;
7878 sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
7979 sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
8080 sut . IsMergedPullRequest . ShouldBeFalse ( ) ;
@@ -84,21 +84,14 @@ public void ParsesMergeMessage(
8484
8585 private static readonly object [ ] GitHubPullPullMergeMessages =
8686 {
87- new object [ ] { "Merge pull request #1234 from feature/one" , "feature/one" , null , null , 1234 } ,
88- new object [ ] { "Merge pull request #1234 in feature/one" , "feature/one" , null , null , 1234 } ,
89- new object [ ] { "Merge pull request #1234 in v4.0.0" , "v4.0.0" , null , new SemanticVersion ( 4 ) , 1234 } ,
90- new object [ ] { "Merge pull request #1234 in V4.0.0" , "V4.0.0" , null , new SemanticVersion ( 4 ) , 1234 } ,
91- new object [ ] { "Merge pull request #1234 from origin/feature/one" , "origin/feature/one" , null , null , 1234 } ,
92- new object [ ] { "Merge pull request #1234 in feature/4.1/one" , "feature/4.1/one" , null , new SemanticVersion ( 4 , 1 ) , 1234 } ,
93- new object [ ] { "Merge pull request #1234 in V://10.10.10.10" , "V://10.10.10.10" , null , null , 1234 } ,
94-
95-
96- //TODO: Investigate successful github merge messages that may be invalid
97- // Should an empty PR number be valid?
98- new object [ ] { "Merge pull request # from feature/one" , "feature/one" , null , null , 0 } ,
99- // The branch name appears to be incorrect
100- new object [ ] { "Merge pull request #1234 from feature/one into dev" , "feature/one into dev" , "dev" , null , 1234 } ,
101- } ;
87+ new object [ ] { "Merge pull request #1234 from feature/one" , "feature/one" , null , null , 1234 } ,
88+ new object [ ] { "Merge pull request #1234 in feature/one" , "feature/one" , null , null , 1234 } ,
89+ new object [ ] { "Merge pull request #1234 in v4.0.0" , "v4.0.0" , null , new SemanticVersion ( 4 ) , 1234 } ,
90+ new object [ ] { "Merge pull request #1234 from origin/feature/one" , "origin/feature/one" , null , null , 1234 } ,
91+ new object [ ] { "Merge pull request #1234 in feature/4.1/one" , "feature/4.1/one" , null , new SemanticVersion ( 4 , 1 ) , 1234 } ,
92+ new object [ ] { "Merge pull request #1234 in V://10.10.10.10" , "V://10.10.10.10" , null , null , 1234 } ,
93+ new object [ ] { "Merge pull request #1234 from feature/one into dev" , "feature/one" , "dev" , null , 1234 }
94+ } ;
10295
10396 [ TestCaseSource ( nameof ( GitHubPullPullMergeMessages ) ) ]
10497 public void ParsesGitHubPullMergeMessage (
@@ -112,6 +105,7 @@ public void ParsesGitHubPullMergeMessage(
112105 var sut = new MergeMessage ( message , _config ) ;
113106
114107 // Assert
108+ sut . MatchDefinition . ShouldBe ( "GitHubPull" ) ;
115109 sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
116110 sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
117111 sut . IsMergedPullRequest . ShouldBeTrue ( ) ;
@@ -121,23 +115,17 @@ public void ParsesGitHubPullMergeMessage(
121115
122116 private static readonly object [ ] BitBucketPullMergeMessages =
123117 {
124- new object [ ] { "Merge pull request #1234 from feature/one from feature/two to dev" , "feature/two" , null , null , 1234 } ,
125- new object [ ] { "Merge pull request #1234 in feature/one from feature/two to dev" , "feature/two" , null , null , 1234 } ,
126- new object [ ] { "Merge pull request #1234 in v4.0.0 from v4.1.0 to dev" , "v4.1.0" , null , new SemanticVersion ( 4 , 1 ) , 1234 } ,
127- new object [ ] { "Merge pull request #1234 in V4.0.0 from V4.1.0 to dev" , "V4.1.0" , null , new SemanticVersion ( 4 , 1 ) , 1234 } ,
128- new object [ ] { "Merge pull request #1234 from origin/feature/one from origin/feature/4.2/two to dev" , "origin/feature/4.2/two" , null , new SemanticVersion ( 4 , 2 ) , 1234 } ,
129- new object [ ] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev" , "feature/4.2/two" , null , new SemanticVersion ( 4 , 2 ) , 1234 } ,
130- new object [ ] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev into master" , "feature/4.2/two" , "master" , new SemanticVersion ( 4 , 2 ) , 1234 } ,
131- new object [ ] { "Merge pull request #1234 in V4.1.0 from V://10.10.10.10 to dev" , "V://10.10.10.10" , null , null , 1234 } ,
132- //TODO: Investigate successful bitbucket merge messages that may be invalid
133- // Regex has double 'from/in from' section. Is that correct?
134- new object [ ] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev" , "feature/4.2/two" , null , new SemanticVersion ( 4 , 2 ) , 1234 } ,
135- new object [ ] { "Merge pull request #1234 from feature/one from v4.0.0 to master" , "v4.0.0" , null , new SemanticVersion ( 4 ) , 1234 } ,
136- // target branch is not resolved from targetbranch group
137- new object [ ] { "Merge pull request #1234 from feature/one from feature/two to master" , "feature/two" , null , null , 1234 } ,
138- // Should an empty PR number be valid?
139- new object [ ] { "Merge pull request # in feature/one from feature/two to master" , "feature/two" , null , null , 0 }
140- } ;
118+ new object [ ] { "Merge pull request #1234 from feature/one from feature/two to dev" , "feature/two" , "dev" , null , 1234 } ,
119+ new object [ ] { "Merge pull request #1234 in feature/one from feature/two to dev" , "feature/two" , "dev" , null , 1234 } ,
120+ new object [ ] { "Merge pull request #1234 in v4.0.0 from v4.1.0 to dev" , "v4.1.0" , "dev" , new SemanticVersion ( 4 , 1 ) , 1234 } ,
121+ new object [ ] { "Merge pull request #1234 from origin/feature/one from origin/feature/4.2/two to dev" , "origin/feature/4.2/two" , "dev" , new SemanticVersion ( 4 , 2 ) , 1234 } ,
122+ new object [ ] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev" , "feature/4.2/two" , "dev" , new SemanticVersion ( 4 , 2 ) , 1234 } ,
123+ new object [ ] { "Merge pull request #1234 from feature/one from feature/two to master" , "feature/two" , "master" , null , 1234 } ,
124+ new object [ ] { "Merge pull request #1234 in V4.1.0 from V://10.10.10.10 to dev" , "V://10.10.10.10" , "dev" , null , 1234 } ,
125+ //TODO: Investigate successful bitbucket merge messages that may be invalid
126+ // Regex has double 'from/in from' section. Is that correct?
127+ new object [ ] { "Merge pull request #1234 from feature/one from v4.0.0 to master" , "v4.0.0" , "master" , new SemanticVersion ( 4 ) , 1234 }
128+ } ;
141129
142130 [ TestCaseSource ( nameof ( BitBucketPullMergeMessages ) ) ]
143131 public void ParsesBitBucketPullMergeMessage (
@@ -151,26 +139,25 @@ public void ParsesBitBucketPullMergeMessage(
151139 var sut = new MergeMessage ( message , _config ) ;
152140
153141 // Assert
142+ sut . MatchDefinition . ShouldBe ( "BitBucketPull" ) ;
154143 sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
155144 sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
156145 sut . IsMergedPullRequest . ShouldBeTrue ( ) ;
157146 sut . PullRequestNumber . ShouldBe ( expectedPullRequestNumber ) ;
158147 sut . Version . ShouldBe ( expectedVersion ) ;
159148 }
160149
150+
161151 private static readonly object [ ] SmartGitMergeMessages =
162152 {
163- new object [ ] { "Finish feature/one" , "feature/one" , null , null } ,
164- new object [ ] { "Finish origin/feature/one" , "origin/feature/one" , null , null } ,
165- new object [ ] { "Finish v4.0.0" , "v4.0.0" , null , new SemanticVersion ( 4 ) } ,
166- new object [ ] { "Finish feature/4.1/one" , "feature/4.1/one" , null , new SemanticVersion ( 4 , 1 ) } ,
167- new object [ ] { "Finish origin/4.1/feature/one" , "origin/4.1/feature/one" , null , new SemanticVersion ( 4 , 1 ) } ,
168- new object [ ] { "Finish V://10.10.10.10" , "V://10.10.10.10" , null , null } ,
169-
170- //TODO: Investigate successful smart git merge messages that may be invalid
171- // The branch name appears to be incorrect
172- new object [ ] { "Finish V4.0.0 into master" , "V4.0.0 into master" , "master" , new SemanticVersion ( 4 ) }
173- } ;
153+ new object [ ] { "Finish feature/one" , "feature/one" , null , null } ,
154+ new object [ ] { "Finish origin/feature/one" , "origin/feature/one" , null , null } ,
155+ new object [ ] { "Finish v4.0.0" , "v4.0.0" , null , new SemanticVersion ( 4 ) } ,
156+ new object [ ] { "Finish feature/4.1/one" , "feature/4.1/one" , null , new SemanticVersion ( 4 , 1 ) } ,
157+ new object [ ] { "Finish origin/4.1/feature/one" , "origin/4.1/feature/one" , null , new SemanticVersion ( 4 , 1 ) } ,
158+ new object [ ] { "Finish V://10.10.10.10" , "V://10.10.10.10" , null , null } ,
159+ new object [ ] { "Finish V4.0.0 into master" , "V4.0.0" , "master" , new SemanticVersion ( 4 ) }
160+ } ;
174161
175162 [ TestCaseSource ( nameof ( SmartGitMergeMessages ) ) ]
176163 public void ParsesSmartGitMergeMessage (
@@ -183,6 +170,7 @@ public void ParsesSmartGitMergeMessage(
183170 var sut = new MergeMessage ( message , _config ) ;
184171
185172 // Assert
173+ sut . MatchDefinition . ShouldBe ( "SmartGit" ) ;
186174 sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
187175 sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
188176 sut . IsMergedPullRequest . ShouldBeFalse ( ) ;
@@ -192,14 +180,14 @@ public void ParsesSmartGitMergeMessage(
192180
193181 private static readonly object [ ] RemoteTrackingMergeMessages =
194182 {
195- new object [ ] { "Merge remote-tracking branch 'feature/one' into master" , "feature/one" , "master" , null } ,
196- new object [ ] { "Merge remote-tracking branch 'origin/feature/one' into dev" , "origin/feature/one" , "dev" , null } ,
197- new object [ ] { "Merge remote-tracking branch 'v4.0.0' into master" , "v4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
198- new object [ ] { "Merge remote-tracking branch 'V4.0.0' into master" , "V4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
199- new object [ ] { "Merge remote-tracking branch 'feature/4.1/one' into dev" , "feature/4.1/one" , "dev" , new SemanticVersion ( 4 , 1 ) } ,
200- new object [ ] { "Merge remote-tracking branch 'origin/4.1/feature/one' into master" , "origin/4.1/feature/one" , "master" , new SemanticVersion ( 4 , 1 ) } ,
201- new object [ ] { "Merge remote-tracking branch 'v://10.10.10.10' into master" , "v://10.10.10.10" , "master" , null }
202- } ;
183+ new object [ ] { "Merge remote-tracking branch 'feature/one' into master" , "feature/one" , "master" , null } ,
184+ new object [ ] { "Merge remote-tracking branch 'origin/feature/one' into dev" , "origin/feature/one" , "dev" , null } ,
185+ new object [ ] { "Merge remote-tracking branch 'v4.0.0' into master" , "v4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
186+ new object [ ] { "Merge remote-tracking branch 'V4.0.0' into master" , "V4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
187+ new object [ ] { "Merge remote-tracking branch 'feature/4.1/one' into dev" , "feature/4.1/one" , "dev" , new SemanticVersion ( 4 , 1 ) } ,
188+ new object [ ] { "Merge remote-tracking branch 'origin/4.1/feature/one' into master" , "origin/4.1/feature/one" , "master" , new SemanticVersion ( 4 , 1 ) } ,
189+ new object [ ] { "Merge remote-tracking branch 'v://10.10.10.10' into master" , "v://10.10.10.10" , "master" , null }
190+ } ;
203191
204192 [ TestCaseSource ( nameof ( RemoteTrackingMergeMessages ) ) ]
205193 public void ParsesRemoteTrackingMergeMessage (
@@ -212,11 +200,96 @@ public void ParsesRemoteTrackingMergeMessage(
212200 var sut = new MergeMessage ( message , _config ) ;
213201
214202 // Assert
203+ sut . MatchDefinition . ShouldBe ( "RemoteTracking" ) ;
215204 sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
216205 sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
217206 sut . IsMergedPullRequest . ShouldBeFalse ( ) ;
218207 sut . PullRequestNumber . ShouldBeNull ( ) ;
219208 sut . Version . ShouldBe ( expectedVersion ) ;
220209 }
210+
211+ private static readonly object [ ] ParsesTfsEnglishUSMergeMessages =
212+ {
213+ new object [ ] { "Merge feature/one to master" , "feature/one" , "master" , null } ,
214+ new object [ ] { "Merge v://10.10.10.10 to master" , "v://10.10.10.10" , "master" , null } ,
215+ new object [ ] { "Merge feature/one to v://10.10.10.10" , "feature/one" , "v://10.10.10.10" , null } ,
216+ new object [ ] { "Merge V4.0.0 to master" , "V4.0.0" , "master" , new SemanticVersion ( 4 ) } ,
217+ new object [ ] { "Merge feature/4.1/one to master" , "feature/4.1/one" , "master" , new SemanticVersion ( 4 , 1 ) }
218+ } ;
219+
220+ [ TestCaseSource ( nameof ( ParsesTfsEnglishUSMergeMessages ) ) ]
221+ public void ParsesTfsEnglishUSMessage (
222+ string message ,
223+ string expectedMergedBranch ,
224+ string expectedTargetBranch ,
225+ SemanticVersion expectedVersion )
226+ {
227+ // Act
228+ var sut = new MergeMessage ( message , _config ) ;
229+
230+ // Assert
231+ sut . MatchDefinition . ShouldBe ( "TfsMergeMessageEnglishUS" ) ;
232+ sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
233+ sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
234+ sut . IsMergedPullRequest . ShouldBeFalse ( ) ;
235+ sut . PullRequestNumber . ShouldBeNull ( ) ;
236+ sut . Version . ShouldBe ( expectedVersion ) ;
237+ }
238+
239+ private static readonly object [ ] ParsesTfsGermanDEMergeMessages =
240+ {
241+ new object [ ] { "Zusammengeführter PR \" 1234\" : feature/one mit master mergen" , "feature/one" , "master" , null , 1234 } ,
242+ new object [ ] { "Zusammengeführter PR \" 1234\" : v://10.10.10.10 mit master mergen" , "v://10.10.10.10" , "master" , null , 1234 } ,
243+ new object [ ] { "Zusammengeführter PR \" 1234\" : feature/one mit v://10.10.10.10 mergen" , "feature/one" , "v://10.10.10.10" , null , 1234 } ,
244+ new object [ ] { "Zusammengeführter PR \" 1234\" : V4.0.0 mit master mergen" , "V4.0.0" , "master" , new SemanticVersion ( 4 ) , 1234 } ,
245+ new object [ ] { "Zusammengeführter PR \" 1234\" : feature/4.1/one mit master mergen" , "feature/4.1/one" , "master" , new SemanticVersion ( 4 , 1 ) , 1234 }
246+ } ;
247+
248+ [ TestCaseSource ( nameof ( ParsesTfsGermanDEMergeMessages ) ) ]
249+ public void ParseTfsGermanDEMessage (
250+ string message ,
251+ string expectedMergedBranch ,
252+ string expectedTargetBranch ,
253+ SemanticVersion expectedVersion ,
254+ int ? expectedPullRequestNumber )
255+ {
256+ // Act
257+ var sut = new MergeMessage ( message , _config ) ;
258+
259+ // Assert
260+ sut . MatchDefinition . ShouldBe ( "TfsMergeMessageGermanDE" ) ;
261+ sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
262+ sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
263+ sut . IsMergedPullRequest . ShouldBeTrue ( ) ;
264+ sut . PullRequestNumber . ShouldBe ( expectedPullRequestNumber ) ;
265+ sut . Version . ShouldBe ( expectedVersion ) ;
266+ }
267+
268+ private static readonly object [ ] InvalidMergeMessages =
269+ {
270+ new object [ ] { "Merge pull request # from feature/one" , "" , null , null , null } ,
271+ new object [ ] { "Merge pull request # in feature/one from feature/two to master" , "" , null , null , null } ,
272+ new object [ ] { "Zusammengeführter PR : feature/one mit master mergen" , "" , null , null , null }
273+ } ;
274+
275+ [ TestCaseSource ( nameof ( InvalidMergeMessages ) ) ]
276+ public void ParsesInvalidMergeMessage (
277+ string message ,
278+ string expectedMergedBranch ,
279+ string expectedTargetBranch ,
280+ SemanticVersion expectedVersion ,
281+ int ? expectedPullRequestNumber )
282+ {
283+ // Act
284+ var sut = new MergeMessage ( message , _config ) ;
285+
286+ // Assert
287+ sut . MatchDefinition . ShouldBeNull ( ) ;
288+ sut . TargetBranch . ShouldBe ( expectedTargetBranch ) ;
289+ sut . MergedBranch . ShouldBe ( expectedMergedBranch ) ;
290+ sut . IsMergedPullRequest . ShouldBeFalse ( ) ;
291+ sut . PullRequestNumber . ShouldBe ( expectedPullRequestNumber ) ;
292+ sut . Version . ShouldBe ( expectedVersion ) ;
293+ }
221294 }
222295}
0 commit comments