@@ -10,47 +10,59 @@ import StdlibUnicodeUnittest
10
10
import Foundation
11
11
12
12
let StringGraphemeBreaking = TestSuite ( " StringGraphemeBreaking " )
13
+ defer { runAllTests ( ) }
13
14
14
15
extension String {
15
- var backwardsCount : Int {
16
- var c = 0
17
- var index = endIndex
18
- while index != startIndex {
19
- c += 1
20
- formIndex ( before: & index)
16
+ var forwardPieces : [ [ Unicode . Scalar ] ] {
17
+ var i = startIndex
18
+ var r : [ [ Unicode . Scalar ] ] = [ ]
19
+ while i < endIndex {
20
+ let j = self . index ( after: i)
21
+ r. append ( Array ( self [ i..< j] . unicodeScalars) )
22
+ i = j
21
23
}
22
- return c
24
+ return r
25
+ }
26
+
27
+ var backwardPieces : [ [ Unicode . Scalar ] ] {
28
+ var j = endIndex
29
+ var r : [ [ Unicode . Scalar ] ] = [ ]
30
+ while j > startIndex {
31
+ let i = self . index ( before: j)
32
+ r. append ( Array ( self [ i..< j] . unicodeScalars) )
33
+ j = i
34
+ }
35
+ r. reverse ( )
36
+ return r
23
37
}
24
38
}
25
39
26
40
if #available( SwiftStdlib 5 . 6 , * ) {
27
41
StringGraphemeBreaking . test ( " grapheme breaking " ) {
28
- for graphemeBreakTest in graphemeBreakTests {
42
+ for test in graphemeBreakTests {
29
43
expectEqual (
30
- graphemeBreakTest. 1 ,
31
- graphemeBreakTest. 0 . count,
32
- " string: \( String ( reflecting: graphemeBreakTest. 0 ) ) " )
44
+ test. string. forwardPieces, test. pieces,
45
+ " string: \( String ( reflecting: test. string) ) (forward) " )
33
46
expectEqual (
34
- graphemeBreakTest. 1 ,
35
- graphemeBreakTest. 0 . backwardsCount,
36
- " string: \( String ( reflecting: graphemeBreakTest. 0 ) ) " )
47
+ test. string. backwardPieces, test. pieces,
48
+ " string: \( String ( reflecting: test. string) ) (backward) " )
37
49
}
38
50
}
39
51
}
40
52
41
53
// The most simple subclass of NSString that CoreFoundation does not know
42
54
// about.
43
- class NonContiguousNSString : NSString {
55
+ class NonContiguousNSString : NSString {
44
56
required init ( coder aDecoder: NSCoder ) {
45
57
fatalError ( " don't call this initializer " )
46
58
}
47
59
required init ( itemProviderData data: Data , typeIdentifier: String ) throws {
48
- fatalError ( " don't call this initializer " )
60
+ fatalError ( " don't call this initializer " )
49
61
}
50
62
51
- override init ( ) {
63
+ override init ( ) {
52
64
_value = [ ]
53
- super. init ( )
65
+ super. init ( )
54
66
}
55
67
56
68
init ( _ value: [ UInt16 ] ) {
@@ -80,33 +92,19 @@ extension _StringGuts {
80
92
func _isForeign( ) -> Bool
81
93
}
82
94
83
- func getUTF16Array( from string: String ) -> [ UInt16 ] {
84
- var result : [ UInt16 ] = [ ]
85
-
86
- for cp in string. utf16 {
87
- result. append ( cp)
88
- }
89
-
90
- return result
91
- }
92
-
93
95
if #available( SwiftStdlib 5 . 6 , * ) {
94
96
StringGraphemeBreaking . test ( " grapheme breaking foreign " ) {
95
- for graphemeBreakTest in graphemeBreakTests {
96
- let foreignTest = NonContiguousNSString (
97
- getUTF16Array ( from: graphemeBreakTest. 0 )
98
- )
99
- let test = foreignTest as String
97
+ for test in graphemeBreakTests {
98
+ let foreign = NonContiguousNSString ( Array ( test. string. utf16) )
99
+ let string = foreign as String
100
100
101
- expectTrue ( test . _guts. _isForeign ( ) )
101
+ expectTrue ( string . _guts. _isForeign ( ) )
102
102
expectEqual (
103
- graphemeBreakTest . 1 , test. count ,
104
- " string: \( String ( reflecting: graphemeBreakTest . 0 ) ) " )
103
+ string . forwardPieces , test. pieces ,
104
+ " string: \( String ( reflecting: test . string ) ) (forward )" )
105
105
expectEqual (
106
- graphemeBreakTest . 1 , test. backwardsCount ,
107
- " string: \( String ( reflecting: graphemeBreakTest . 0 ) ) " )
106
+ string . backwardPieces , test. pieces ,
107
+ " string: \( String ( reflecting: test . string ) ) (backward )" )
108
108
}
109
109
}
110
110
}
111
-
112
- runAllTests ( )
0 commit comments