@@ -22,9 +22,10 @@ class DetectShortlinkTests: XCTestCase {
22
22
return builder. build ( )
23
23
}
24
24
25
- func checkForIssueLink( _ styledTexts: [ StyledText ] ) -> ( linkText: String , issueNumber: Int ) ? {
25
+ func checkForIssueLink( _ styledTexts: [ StyledText ] ) -> [ ( linkText: String , issueNumber: Int ) ] {
26
26
// scanning for a styledText unit that has been formatted with blue font and
27
27
// contains an Issue MarkdownAttribute
28
+ var links = [ ( linkText: String, issueNumber: Int) ] ( )
28
29
for styledText in styledTexts {
29
30
let style = styledText. style
30
31
guard style. attributes [ . foregroundColor] != nil ,
@@ -34,11 +35,11 @@ class DetectShortlinkTests: XCTestCase {
34
35
if case let . text( text) = styledText. storage {
35
36
let issueModel = style. attributes [ MarkdownAttribute . issue] as! IssueDetailsModel
36
37
let issueNumber = issueModel. number
37
- return ( text, issueNumber)
38
+ links . append ( ( text, issueNumber) )
38
39
}
39
40
}
40
41
}
41
- return nil
42
+ return links
42
43
}
43
44
44
45
func test_positiveMatches( ) {
@@ -50,83 +51,110 @@ class DetectShortlinkTests: XCTestCase {
50
51
51
52
var testString = " #1234 "
52
53
var builder : StyledTextString = setupBuilder ( with: testString)
53
- var containsLink = checkForIssueLink ( builder. styledTexts) !
54
+ var containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
54
55
XCTAssertEqual ( containsLink. linkText, " #1234 " )
55
56
XCTAssertEqual ( containsLink. issueNumber, 1234 )
56
57
XCTAssertEqual ( builder. allText, testString)
57
58
58
59
testString = " with a space preceding #1235 "
59
60
builder = setupBuilder ( with: testString)
60
- containsLink = checkForIssueLink ( builder. styledTexts) !
61
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
61
62
XCTAssertEqual ( containsLink. linkText, " #1235 " )
62
63
XCTAssertEqual ( containsLink. issueNumber, 1235 )
63
64
XCTAssertEqual ( builder. allText, testString)
64
65
65
66
testString = " with a newline preceding \n #345 "
66
67
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 ]
68
81
XCTAssertEqual ( containsLink. linkText, " #345 " )
69
82
XCTAssertEqual ( containsLink. issueNumber, 345 )
70
83
XCTAssertEqual ( builder. allText, testString)
71
84
72
85
testString = " embedded in parentheses (#1900) "
73
86
builder = setupBuilder ( with: testString)
74
- containsLink = checkForIssueLink ( builder. styledTexts) !
87
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
75
88
XCTAssertEqual ( containsLink. linkText, " #1900 " )
76
89
XCTAssertEqual ( containsLink. issueNumber, 1900 )
77
90
XCTAssertEqual ( builder. allText, testString)
78
91
79
92
testString = " with owner and repo preceding rnystrom/githawk#4321 "
80
93
builder = setupBuilder ( with: testString)
81
- containsLink = checkForIssueLink ( builder. styledTexts) !
94
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
82
95
XCTAssertEqual ( containsLink. linkText, " rnystrom/githawk#4321 " )
83
96
XCTAssertEqual ( containsLink. issueNumber, 4321 )
84
97
XCTAssertEqual ( builder. allText, testString)
85
98
86
99
testString = " Fixes (#1 "
87
100
builder = setupBuilder ( with: testString)
88
- containsLink = checkForIssueLink ( builder. styledTexts) !
101
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
89
102
XCTAssertEqual ( containsLink. linkText, " #1 " )
90
103
XCTAssertEqual ( containsLink. issueNumber, 1 )
91
104
XCTAssertEqual ( builder. allText, testString)
92
105
93
106
testString = " Fixes #12) "
94
107
builder = setupBuilder ( with: testString)
95
- containsLink = checkForIssueLink ( builder. styledTexts) !
108
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
96
109
XCTAssertEqual ( containsLink. linkText, " #12 " )
97
110
XCTAssertEqual ( containsLink. issueNumber, 12 )
98
111
XCTAssertEqual ( builder. allText, testString)
99
112
100
113
testString = " Fixes(#432) "
101
114
builder = setupBuilder ( with: testString)
102
- containsLink = checkForIssueLink ( builder. styledTexts) !
115
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
103
116
XCTAssertEqual ( containsLink. linkText, " #432 " )
104
117
XCTAssertEqual ( containsLink. issueNumber, 432 )
105
118
XCTAssertEqual ( builder. allText, testString)
106
119
107
120
testString = " !#4 yada yada "
108
121
builder = setupBuilder ( with: testString)
109
- containsLink = checkForIssueLink ( builder. styledTexts) !
122
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
110
123
XCTAssertEqual ( containsLink. linkText, " #4 " )
111
124
XCTAssertEqual ( containsLink. issueNumber, 4 )
112
125
XCTAssertEqual ( builder. allText, testString)
113
126
}
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
+ }
114
142
115
143
func test_negativeMatches( ) {
116
144
var builder = setupBuilder ( with: " !1234 " )
117
145
var containsLink = checkForIssueLink ( builder. styledTexts)
118
- XCTAssertNil ( containsLink)
146
+ XCTAssertEqual ( containsLink. count , 0 )
119
147
120
148
builder = setupBuilder ( with: " imo the best pr so far is prob # 1906 " )
121
149
containsLink = checkForIssueLink ( builder. styledTexts)
122
- XCTAssertNil ( containsLink)
150
+ XCTAssertEqual ( containsLink. count , 0 )
123
151
124
152
builder = setupBuilder ( with: " #123F " )
125
153
containsLink = checkForIssueLink ( builder. styledTexts)
126
- XCTAssertNil ( containsLink)
154
+ XCTAssertEqual ( containsLink. count , 0 )
127
155
128
156
builder = setupBuilder ( with: " f#123 " )
129
157
containsLink = checkForIssueLink ( builder. styledTexts)
130
- XCTAssertNil ( containsLink)
158
+ XCTAssertEqual ( containsLink. count , 0 )
131
159
}
132
160
}
0 commit comments