@@ -3,19 +3,43 @@ module Test.Data.Char.Unicode (dataCharUnicodeTests) where
3
3
4
4
import Prelude
5
5
6
+ import Control.Monad.Reader.Class (class MonadReader , ask , local )
6
7
import Data.Char (fromCharCode )
7
8
import Data.Char.Unicode (GeneralCategory (..), digitToInt , generalCategory , isAlpha , isAlphaNum , isAscii , isAsciiLower , isAsciiUpper , isControl , isDigit , isHexDigit , isLatin1 , isLetter , isLower , isMark , isNumber , isOctDigit , isPrint , isPunctuation , isSeparator , isSpace , isSymbol , isUpper )
8
9
import Data.Maybe (Maybe (..), fromJust )
10
+ import Data.Monoid (power , guard )
9
11
import Data.NonEmpty ((:|))
10
- import Effect.Class (liftEffect )
12
+ import Effect.Console (log )
13
+ import Effect.Class (class MonadEffect , liftEffect )
11
14
import Partial.Unsafe (unsafePartial )
12
15
import Test.QuickCheck (quickCheck )
13
16
import Test.QuickCheck.Arbitrary (class Arbitrary )
14
17
import Test.QuickCheck.Gen (Gen , oneOf , chooseInt )
15
- import Test.Spec (Spec , describe , it )
16
- import Test.Spec.Assertions (shouldEqual )
18
+ import Test.Assert (assertEqual )
17
19
18
- dataCharUnicodeTests :: Spec Unit
20
+
21
+ -- ---------------------------------------------------------------
22
+
23
+ -- Provide similar API to purescript-spec to reduce code changes
24
+
25
+ describe :: forall m . MonadReader Int m => MonadEffect m => String -> m Unit -> m Unit
26
+ describe msg runTest = do
27
+ indentation <- ask
28
+ let spacing = guard (indentation > 0 ) " "
29
+ liftEffect $ log $ (power " >>" indentation) <> spacing <> msg
30
+ local (_ + 1 ) runTest
31
+
32
+ it :: forall m . MonadReader Int m => MonadEffect m => String -> m Unit -> m Unit
33
+ it = describe
34
+
35
+ shouldEqual :: forall m a . MonadEffect m => Eq a => Show a => a -> a -> m Unit
36
+ shouldEqual actual expected =
37
+ liftEffect $ assertEqual { actual, expected }
38
+
39
+ -- ---------------------------------------------------------------
40
+
41
+
42
+ dataCharUnicodeTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
19
43
dataCharUnicodeTests = describe " module Data.Char.Unicode" do
20
44
generalCategoryDataTypeTests
21
45
generalCategoryTests
@@ -43,7 +67,7 @@ dataCharUnicodeTests = describe "module Data.Char.Unicode" do
43
67
isNumberTests
44
68
isSeparatorTests
45
69
46
- generalCategoryDataTypeTests :: Spec Unit
70
+ generalCategoryDataTypeTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
47
71
generalCategoryDataTypeTests = describe " GeneralCategory instances" do
48
72
describe " Eq instance" do
49
73
it " UppercaseLetter == UppercaseLetter" $
@@ -62,7 +86,7 @@ generalCategoryDataTypeTests = describe "GeneralCategory instances" do
62
86
it " top == NotAssigned" $
63
87
top `shouldEqual` NotAssigned
64
88
65
- generalCategoryTests :: Spec Unit
89
+ generalCategoryTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
66
90
generalCategoryTests = describe " generalCategory" do
67
91
it " generalCategory 'a' == LowercaseLetter" $
68
92
generalCategory ' a' `shouldEqual` Just LowercaseLetter
@@ -159,36 +183,36 @@ instance arbitrayNonAsciiHexDigit :: Arbitrary NonAsciiHexDigit where
159
183
g :: Gen Int
160
184
g = chooseInt 0 0x2F
161
185
162
- isAsciiTests :: Spec Unit
186
+ isAsciiTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
163
187
isAsciiTests = describe " isAscii" do
164
188
it " ascii chars are ascii" $ liftEffect $ quickCheck \(AsciiChar char) -> isAscii char
165
189
it " non ascii chars are not ascii" $ liftEffect $ quickCheck \(NonAsciiChar char) -> not $ isAscii char
166
190
167
- isLatin1Tests :: Spec Unit
191
+ isLatin1Tests :: forall m . MonadReader Int m => MonadEffect m => m Unit
168
192
isLatin1Tests = describe " isLatin1" do
169
193
it " ascii chars are latin1" $ liftEffect $ quickCheck \(AsciiChar char) -> isLatin1 char
170
194
it " latin1 chars are latin1" $ liftEffect $ quickCheck \(Latin1Char char) -> isLatin1 char
171
195
it " non latin1 chars are not latin1" $ liftEffect $ quickCheck \(NonLatin1Char char) -> not $ isLatin1 char
172
196
173
- isAsciiLowerTests :: Spec Unit
197
+ isAsciiLowerTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
174
198
isAsciiLowerTests = describe " isAsciiLower" do
175
199
it " lower ascii chars are lower ascii" $ liftEffect $ quickCheck \(AsciiLowerChar char) -> isAsciiLower char
176
200
it " non lower ascii chars are not lower ascii" $ liftEffect $ quickCheck \(NonAsciiLowerChar char) -> not $ isAsciiLower char
177
201
178
- isAsciiUpperTests :: Spec Unit
202
+ isAsciiUpperTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
179
203
isAsciiUpperTests = describe " isAsciiUpper" do
180
204
it " upper ascii chars are upper ascii" $ liftEffect $ quickCheck \(AsciiUpperChar char) -> isAsciiUpper char
181
205
it " non upper ascii chars are not upper ascii" $ liftEffect $ quickCheck \(NonAsciiUpperChar char) -> not $ isAsciiUpper char
182
206
183
- isControlTests :: Spec Unit
207
+ isControlTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
184
208
isControlTests = describe " isControl" do
185
209
-- DISABLED: "Illegal character escape code."
186
210
-- it "'\\04' is Control" $
187
211
-- isControl '\04' `shouldEqual` true
188
212
it " 'a' is not Control" $
189
213
isControl ' a' `shouldEqual` false
190
214
191
- isPrintTests :: Spec Unit
215
+ isPrintTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
192
216
isPrintTests = describe " isPrint" do
193
217
-- DISABLED: "Illegal character escape code."
194
218
-- it "'\\04' is not Print" $
@@ -200,7 +224,7 @@ isPrintTests = describe "isPrint" do
200
224
it " ' ' is Print" $
201
225
isPrint ' ' `shouldEqual` true
202
226
203
- isSpaceTests :: Spec Unit
227
+ isSpaceTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
204
228
isSpaceTests = describe " isSpace" do
205
229
it " ' ' is Space" $
206
230
isSpace ' ' `shouldEqual` true
@@ -213,7 +237,7 @@ isSpaceTests = describe "isSpace" do
213
237
it " 'a' is not Space" $
214
238
isSpace ' a' `shouldEqual` false
215
239
216
- isUpperTests :: Spec Unit
240
+ isUpperTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
217
241
isUpperTests = describe " isUpper" do
218
242
it " 'Z' is Upper" $
219
243
isUpper ' Z' `shouldEqual` true
@@ -226,7 +250,7 @@ isUpperTests = describe "isUpper" do
226
250
it " '日' is not Upper" $
227
251
isUpper '日' `shouldEqual` false
228
252
229
- isLowerTests :: Spec Unit
253
+ isLowerTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
230
254
isLowerTests = describe " isLower" do
231
255
it " 'a' is Lower" $
232
256
isLower ' a' `shouldEqual` true
@@ -239,7 +263,7 @@ isLowerTests = describe "isLower" do
239
263
it " '日' is not Lower" $
240
264
isLower '日' `shouldEqual` false
241
265
242
- isAlphaTests :: Spec Unit
266
+ isAlphaTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
243
267
isAlphaTests = describe " isAlpha" do
244
268
it " 'a' is Alpha" $
245
269
isAlpha ' a' `shouldEqual` true
@@ -252,7 +276,7 @@ isAlphaTests = describe "isAlpha" do
252
276
it " '\\ n' is not Alpha" $
253
277
isAlpha ' \n ' `shouldEqual` false
254
278
255
- isAlphaNumTests :: Spec Unit
279
+ isAlphaNumTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
256
280
isAlphaNumTests = describe " isAlphaNum" do
257
281
it " 'a' is AlphaNum" $
258
282
isAlphaNum ' a' `shouldEqual` true
@@ -271,22 +295,22 @@ isAlphaNumTests = describe "isAlphaNum" do
271
295
it " '\\ n' is not AlphaNum" $
272
296
isAlphaNum ' \n ' `shouldEqual` false
273
297
274
- isDigitTests :: Spec Unit
298
+ isDigitTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
275
299
isDigitTests = describe " isDigit" do
276
300
it " digits are digits" $ liftEffect $ quickCheck \(AsciiDigit char) -> isDigit char
277
301
it " non digits are not digits" $ liftEffect $ quickCheck \(NonAsciiDigit char) -> not $ isDigit char
278
302
279
- isOctDigitTests :: Spec Unit
303
+ isOctDigitTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
280
304
isOctDigitTests = describe " isOctDigit" do
281
305
it " oct digits are oct digits" $ liftEffect $ quickCheck \(AsciiOctDigit char) -> isOctDigit char
282
306
it " non oct digits are not oct digits" $ liftEffect $ quickCheck \(NonAsciiOctDigit char) -> not $ isOctDigit char
283
307
284
- isHexDigitTests :: Spec Unit
308
+ isHexDigitTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
285
309
isHexDigitTests = describe " isHexDigit" do
286
310
it " hex digits are hex digits" $ liftEffect $ quickCheck \(AsciiHexDigit char) -> isHexDigit char
287
311
it " non hex digits are not hex digits" $ liftEffect $ quickCheck \(NonAsciiHexDigit char) -> not $ isHexDigit char
288
312
289
- isPunctuationTests :: Spec Unit
313
+ isPunctuationTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
290
314
isPunctuationTests = describe " isPunctuation" do
291
315
it " 'a' is not Punctuation" $
292
316
isPunctuation ' a' `shouldEqual` false
@@ -303,7 +327,7 @@ isPunctuationTests = describe "isPunctuation" do
303
327
it " '—' is Punctuation" $
304
328
isPunctuation '—' `shouldEqual` true
305
329
306
- isSymbolTests :: Spec Unit
330
+ isSymbolTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
307
331
isSymbolTests = describe " isSymbol" do
308
332
it " 'a' is not Symbol" $
309
333
isSymbol ' a' `shouldEqual` false
@@ -321,14 +345,14 @@ isSymbolTests = describe "isSymbol" do
321
345
isSymbol ' +' `shouldEqual` true
322
346
323
347
-- TODO: These.
324
- toUpperTests :: Spec Unit
348
+ toUpperTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
325
349
toUpperTests = pure unit
326
- toLowerTests :: Spec Unit
350
+ toLowerTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
327
351
toLowerTests = pure unit
328
- toTitleTests :: Spec Unit
352
+ toTitleTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
329
353
toTitleTests = pure unit
330
354
331
- digitToIntTests :: Spec Unit
355
+ digitToIntTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
332
356
digitToIntTests = describe " digitToInt" do
333
357
it " '0'..'9' get mapped correctly" $
334
358
map digitToInt [' 0' ,' 1' ,' 2' ,' 3' ,' 4' ,' 5' ,' 6' ,' 7' ,' 8' ,' 9' ] `shouldEqual`
@@ -346,11 +370,11 @@ digitToIntTests = describe "digitToInt" do
346
370
it " '国' is not a digit" $
347
371
digitToInt '国' `shouldEqual` Nothing
348
372
349
- isLetterTests :: Spec Unit
373
+ isLetterTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
350
374
isLetterTests = describe " isLetter" do
351
375
it " isLetter == isAlpha" $ liftEffect $ quickCheck \char -> isLetter char == isAlpha char
352
376
353
- isMarkTests :: Spec Unit
377
+ isMarkTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
354
378
isMarkTests = describe " isMark" do
355
379
-- TODO: Add a positive test here.
356
380
it " 'a' is not Mark" $
@@ -362,7 +386,7 @@ isMarkTests = describe "isMark" do
362
386
it " '♥' is not Mark" $
363
387
isMark '♥' `shouldEqual` false
364
388
365
- isNumberTests :: Spec Unit
389
+ isNumberTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
366
390
isNumberTests = describe " isNumber" do
367
391
it " 'a' is not Number" $
368
392
isNumber ' a' `shouldEqual` false
@@ -382,7 +406,7 @@ isNumberTests = describe "isNumber" do
382
406
isNumber '⑳' `shouldEqual` true
383
407
it " 0..9 are Number" $ liftEffect $ quickCheck \(AsciiDigit char) -> isNumber char
384
408
385
- isSeparatorTests :: Spec Unit
409
+ isSeparatorTests :: forall m . MonadReader Int m => MonadEffect m => m Unit
386
410
isSeparatorTests = describe " isSeparator" do
387
411
it " 'a' is not Separator" $
388
412
isSeparator ' a' `shouldEqual` false
0 commit comments