@@ -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,105 @@ 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 = " #345 \r "
74
+ builder = setupBuilder ( with: testString)
75
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
68
76
XCTAssertEqual ( containsLink. linkText, " #345 " )
69
77
XCTAssertEqual ( containsLink. issueNumber, 345 )
70
78
XCTAssertEqual ( builder. allText, testString)
71
79
72
80
testString = " embedded in parentheses (#1900) "
73
81
builder = setupBuilder ( with: testString)
74
- containsLink = checkForIssueLink ( builder. styledTexts) !
82
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
75
83
XCTAssertEqual ( containsLink. linkText, " #1900 " )
76
84
XCTAssertEqual ( containsLink. issueNumber, 1900 )
77
85
XCTAssertEqual ( builder. allText, testString)
78
86
79
87
testString = " with owner and repo preceding rnystrom/githawk#4321 "
80
88
builder = setupBuilder ( with: testString)
81
- containsLink = checkForIssueLink ( builder. styledTexts) !
89
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
82
90
XCTAssertEqual ( containsLink. linkText, " rnystrom/githawk#4321 " )
83
91
XCTAssertEqual ( containsLink. issueNumber, 4321 )
84
92
XCTAssertEqual ( builder. allText, testString)
85
93
86
94
testString = " Fixes (#1 "
87
95
builder = setupBuilder ( with: testString)
88
- containsLink = checkForIssueLink ( builder. styledTexts) !
96
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
89
97
XCTAssertEqual ( containsLink. linkText, " #1 " )
90
98
XCTAssertEqual ( containsLink. issueNumber, 1 )
91
99
XCTAssertEqual ( builder. allText, testString)
92
100
93
101
testString = " Fixes #12) "
94
102
builder = setupBuilder ( with: testString)
95
- containsLink = checkForIssueLink ( builder. styledTexts) !
103
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
96
104
XCTAssertEqual ( containsLink. linkText, " #12 " )
97
105
XCTAssertEqual ( containsLink. issueNumber, 12 )
98
106
XCTAssertEqual ( builder. allText, testString)
99
107
100
108
testString = " Fixes(#432) "
101
109
builder = setupBuilder ( with: testString)
102
- containsLink = checkForIssueLink ( builder. styledTexts) !
110
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
103
111
XCTAssertEqual ( containsLink. linkText, " #432 " )
104
112
XCTAssertEqual ( containsLink. issueNumber, 432 )
105
113
XCTAssertEqual ( builder. allText, testString)
106
114
107
115
testString = " !#4 yada yada "
108
116
builder = setupBuilder ( with: testString)
109
- containsLink = checkForIssueLink ( builder. styledTexts) !
117
+ containsLink = checkForIssueLink ( builder. styledTexts) [ 0 ]
110
118
XCTAssertEqual ( containsLink. linkText, " #4 " )
111
119
XCTAssertEqual ( containsLink. issueNumber, 4 )
112
120
XCTAssertEqual ( builder. allText, testString)
113
121
}
122
+
123
+ func test_ConsecutivePositiveMatches( ) {
124
+ var testString = " #100 #150 #200 "
125
+ var builder = setupBuilder ( with: testString)
126
+ var links = checkForIssueLink ( builder. styledTexts)
127
+
128
+ XCTAssertEqual ( links [ 0 ] . issueNumber, 100 )
129
+ XCTAssertEqual ( links [ 0 ] . linkText, " #100 " )
130
+
131
+ XCTAssertEqual ( links [ 1 ] . issueNumber, 150 )
132
+ XCTAssertEqual ( links [ 1 ] . linkText, " #150 " )
133
+
134
+ XCTAssertEqual ( links [ 2 ] . issueNumber, 200 )
135
+ XCTAssertEqual ( links [ 2 ] . linkText, " #200 " )
136
+ }
114
137
115
138
func test_negativeMatches( ) {
116
139
var builder = setupBuilder ( with: " !1234 " )
117
140
var containsLink = checkForIssueLink ( builder. styledTexts)
118
- XCTAssertNil ( containsLink)
141
+ XCTAssertEqual ( containsLink. count , 0 )
119
142
120
143
builder = setupBuilder ( with: " imo the best pr so far is prob # 1906 " )
121
144
containsLink = checkForIssueLink ( builder. styledTexts)
122
- XCTAssertNil ( containsLink)
145
+ XCTAssertEqual ( containsLink. count , 0 )
123
146
124
147
builder = setupBuilder ( with: " #123F " )
125
148
containsLink = checkForIssueLink ( builder. styledTexts)
126
- XCTAssertNil ( containsLink)
149
+ XCTAssertEqual ( containsLink. count , 0 )
127
150
128
151
builder = setupBuilder ( with: " f#123 " )
129
152
containsLink = checkForIssueLink ( builder. styledTexts)
130
- XCTAssertNil ( containsLink)
153
+ XCTAssertEqual ( containsLink. count , 0 )
131
154
}
132
155
}
0 commit comments