@@ -22,9 +22,10 @@ class DetectShortlinkTests: XCTestCase {
2222 return builder. build ( )
2323 }
2424
25- func checkForIssueLink( _ styledTexts: [ StyledText ] ) -> ( linkText: String , issueNumber: Int ) ? {
25+ func checkForIssueLink( _ styledTexts: [ StyledText ] ) -> [ ( linkText: String , issueNumber: Int ) ] {
2626 // scanning for a styledText unit that has been formatted with blue font and
2727 // contains an Issue MarkdownAttribute
28+ var links = [ ( linkText: String, issueNumber: Int) ] ( )
2829 for styledText in styledTexts {
2930 let style = styledText. style
3031 guard style. attributes [ . foregroundColor] != nil ,
@@ -34,11 +35,11 @@ class DetectShortlinkTests: XCTestCase {
3435 if case let . text( text) = styledText. storage {
3536 let issueModel = style. attributes [ MarkdownAttribute . issue] as! IssueDetailsModel
3637 let issueNumber = issueModel. number
37- return ( text, issueNumber)
38+ links . append ( ( text, issueNumber) )
3839 }
3940 }
4041 }
41- return nil
42+ return links
4243 }
4344
4445 func test_positiveMatches( ) {
@@ -50,83 +51,110 @@ class DetectShortlinkTests: XCTestCase {
5051
5152 var testString = " #1234 "
5253 var builder : StyledTextString = setupBuilder ( with: testString)
53- var containsLink = checkForIssueLink ( builder. styledTexts) !
54+ var containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
5455 XCTAssertEqual ( containsLink. linkText, " #1234 " )
5556 XCTAssertEqual ( containsLink. issueNumber, 1234 )
5657 XCTAssertEqual ( builder. allText, testString)
5758
5859 testString = " with a space preceding #1235 "
5960 builder = setupBuilder ( with: testString)
60- containsLink = checkForIssueLink ( builder. styledTexts) !
61+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
6162 XCTAssertEqual ( containsLink. linkText, " #1235 " )
6263 XCTAssertEqual ( containsLink. issueNumber, 1235 )
6364 XCTAssertEqual ( builder. allText, testString)
6465
6566 testString = " with a newline preceding \n #345 "
6667 builder = setupBuilder ( with: testString)
67- containsLink = checkForIssueLink ( builder. styledTexts) !
68+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
69+ XCTAssertEqual ( containsLink. linkText, " #345 " )
70+ XCTAssertEqual ( containsLink. issueNumber, 345 )
71+ XCTAssertEqual ( builder. allText, testString)
72+
73+ testString =
74+ """
75+ #345
76+ newLine
77+ """
78+
79+ builder = setupBuilder ( with: testString)
80+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
6881 XCTAssertEqual ( containsLink. linkText, " #345 " )
6982 XCTAssertEqual ( containsLink. issueNumber, 345 )
7083 XCTAssertEqual ( builder. allText, testString)
7184
7285 testString = " embedded in parentheses (#1900) "
7386 builder = setupBuilder ( with: testString)
74- containsLink = checkForIssueLink ( builder. styledTexts) !
87+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
7588 XCTAssertEqual ( containsLink. linkText, " #1900 " )
7689 XCTAssertEqual ( containsLink. issueNumber, 1900 )
7790 XCTAssertEqual ( builder. allText, testString)
7891
7992 testString = " with owner and repo preceding rnystrom/githawk#4321 "
8093 builder = setupBuilder ( with: testString)
81- containsLink = checkForIssueLink ( builder. styledTexts) !
94+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
8295 XCTAssertEqual ( containsLink. linkText, " rnystrom/githawk#4321 " )
8396 XCTAssertEqual ( containsLink. issueNumber, 4321 )
8497 XCTAssertEqual ( builder. allText, testString)
8598
8699 testString = " Fixes (#1 "
87100 builder = setupBuilder ( with: testString)
88- containsLink = checkForIssueLink ( builder. styledTexts) !
101+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
89102 XCTAssertEqual ( containsLink. linkText, " #1 " )
90103 XCTAssertEqual ( containsLink. issueNumber, 1 )
91104 XCTAssertEqual ( builder. allText, testString)
92105
93106 testString = " Fixes #12) "
94107 builder = setupBuilder ( with: testString)
95- containsLink = checkForIssueLink ( builder. styledTexts) !
108+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
96109 XCTAssertEqual ( containsLink. linkText, " #12 " )
97110 XCTAssertEqual ( containsLink. issueNumber, 12 )
98111 XCTAssertEqual ( builder. allText, testString)
99112
100113 testString = " Fixes(#432) "
101114 builder = setupBuilder ( with: testString)
102- containsLink = checkForIssueLink ( builder. styledTexts) !
115+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
103116 XCTAssertEqual ( containsLink. linkText, " #432 " )
104117 XCTAssertEqual ( containsLink. issueNumber, 432 )
105118 XCTAssertEqual ( builder. allText, testString)
106119
107120 testString = " !#4 yada yada "
108121 builder = setupBuilder ( with: testString)
109- containsLink = checkForIssueLink ( builder. styledTexts) !
122+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
110123 XCTAssertEqual ( containsLink. linkText, " #4 " )
111124 XCTAssertEqual ( containsLink. issueNumber, 4 )
112125 XCTAssertEqual ( builder. allText, testString)
113126 }
127+
128+ func test_ConsecutivePositiveMatches( ) {
129+ var testString = " #100 #150 #200 "
130+ var builder = setupBuilder ( with: testString)
131+ var links = checkForIssueLink ( builder. styledTexts)
132+
133+ XCTAssertEqual ( links [ 0 ] . issueNumber, 100 )
134+ XCTAssertEqual ( links [ 0 ] . linkText, " #100 " )
135+
136+ XCTAssertEqual ( links [ 1 ] . issueNumber, 150 )
137+ XCTAssertEqual ( links [ 1 ] . linkText, " #150 " )
138+
139+ XCTAssertEqual ( links [ 2 ] . issueNumber, 200 )
140+ XCTAssertEqual ( links [ 2 ] . linkText, " #200 " )
141+ }
114142
115143 func test_negativeMatches( ) {
116144 var builder = setupBuilder ( with: " !1234 " )
117145 var containsLink = checkForIssueLink ( builder. styledTexts)
118- XCTAssertNil ( containsLink)
146+ XCTAssertEqual ( containsLink. count , 0 )
119147
120148 builder = setupBuilder ( with: " imo the best pr so far is prob # 1906 " )
121149 containsLink = checkForIssueLink ( builder. styledTexts)
122- XCTAssertNil ( containsLink)
150+ XCTAssertEqual ( containsLink. count , 0 )
123151
124152 builder = setupBuilder ( with: " #123F " )
125153 containsLink = checkForIssueLink ( builder. styledTexts)
126- XCTAssertNil ( containsLink)
154+ XCTAssertEqual ( containsLink. count , 0 )
127155
128156 builder = setupBuilder ( with: " f#123 " )
129157 containsLink = checkForIssueLink ( builder. styledTexts)
130- XCTAssertNil ( containsLink)
158+ XCTAssertEqual ( containsLink. count , 0 )
131159 }
132160}
0 commit comments