characteristics 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10cb6aa4ebfd58994b086a0f39dfba5e469a5898
4
- data.tar.gz: e959c0f9778f8b7be7abb2eababcbc371813a065
3
+ metadata.gz: 95c672e25105f6a9281caee75f58cc242e50bee5
4
+ data.tar.gz: 17fe74e2842c0175b284e9a0b170561aba80c7af
5
5
  SHA512:
6
- metadata.gz: 546df909b9f275220b3d72531e226191e088517ed906b27efafe6a4a283939d106051a6c57650d79e2dfccae98242662939090f53f5b22320dc3e61389e2c112
7
- data.tar.gz: b7148696e8d471d840b0c039d199e41fa5059dabecbc6ee75a9299e103f5e32428f1ec2089d6f9e89519a6e54bc66e6db998c3b21293a9d277ea387b15046bb1
6
+ metadata.gz: f12e4d9b7b471019a606060166629a99e950b1e5fc3d44f933da70239f2cbc5ed4ac8023b9bb79998709a6bed14c3681dd141f1894c11ddec14649e31c68d841
7
+ data.tar.gz: 5110369bc3619f9e3ddc23c9bc6dd5abd7ff0e8ffdfd46889fbc2b04aea1d7611de607852ed0dfab04befa330e8c3e8c3afe5fa680ff0cb16ace232a5a968f6d
data/.travis.yml CHANGED
@@ -3,13 +3,13 @@ language: ruby
3
3
 
4
4
  rvm:
5
5
  - ruby-head
6
- - 2.4.0
7
- - 2.3.3
6
+ - 2.4.1
7
+ - 2.3.4
8
8
  - 2.2
9
9
  - 2.1
10
10
  - 2.0
11
11
  - jruby-head
12
- - jruby-9.1.7.0
12
+ - jruby-9.1.8.0
13
13
 
14
14
  cache:
15
15
  - bundler
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## CHANGELOG
2
2
 
3
+ ### 0.6.0
4
+
5
+ * Add separator? property
6
+ * Ensure all characteristics have a c0? / c1? method
7
+ * Add GB1988 encoding (which is a 7bit ascii-like)
8
+
3
9
  ### 0.5.2
4
10
 
5
11
  * Add another Hangul blank (U+FFA0)
data/README.md CHANGED
@@ -7,7 +7,7 @@ A Ruby library which provides some basic information about how characters behave
7
7
  - Is a character a special control character?
8
8
  - Could a character be invisible (blank)?
9
9
 
10
- The [unibits](https://github.com/janlelis/unibits) gem makes use of this data to visualize it accordingliy.
10
+ The [unibits](https://github.com/janlelis/unibits) and [uniscribe](https://github.com/janlelis/uniscribe) gems makes use of this data to visualize it accordingliy.
11
11
 
12
12
  ## Setup
13
13
 
@@ -20,12 +20,13 @@ gem 'characteristics'
20
20
  ## Usage
21
21
 
22
22
  ```ruby
23
- char_info = Characteristics.new(character)
23
+ char_info = Characteristics.create(character)
24
24
  char_info.valid? # => true / false
25
25
  char_info.unicode? # => true / false
26
26
  char_info.assigned? # => true / false
27
27
  char_info.control? # => true / false
28
28
  char_info.blank? # => true / false
29
+ char_info.separator? # => true / false
29
30
  char_info.format? # => true / false
30
31
  ```
31
32
 
@@ -38,7 +39,7 @@ This library knows of four different kinds of encodings:
38
39
  - **:byte** Known single-byte encoding
39
40
  - *ISO-8859-X*, *Windows-125X*, *IBMX*, *CP85X*, *macX*, *TIS-620*, *Windows-874*, *KOI-X*
40
41
  - **:ascii** 7-Bit ASCII
41
- - *US-ASCII*
42
+ - *US-ASCII*, *GB1988*
42
43
  - **:binary** Arbitrary string
43
44
  - *ASCII-8BIT*
44
45
 
@@ -48,7 +49,7 @@ Other encodings are not supported, yet.
48
49
 
49
50
  ### `valid?`
50
51
 
51
- Validness is determined by Ruby's String#valid_encoding?
52
+ Validness is determined by Ruby's `String#valid_encoding?`
52
53
 
53
54
  ### `unicode?`
54
55
 
@@ -66,7 +67,11 @@ Control characters are codepoints in the is [C0, delete or C1 control character
66
67
 
67
68
  ### `blank?`
68
69
 
69
- The library includes a list of characters that might not be rendered visually. This list does not include unassigned codepoints, control characters (except for `\t`, `\n`, `\v`, `\f`, `\r`), or special formatting characters (right-to-left marker, variation selectors, etc).
70
+ The library includes a list of characters that might not be rendered visually. This list does not include unassigned codepoints, control characters (except for `\t`, `\n`, `\v`, `\f`, `\r`, and `\u{85}` in Unicode), or special formatting characters (right-to-left markers, variation selectors, etc).
71
+
72
+ ### `separator?`
73
+
74
+ Returns true if character is considered a separator. All separators also return true for the `blank?` check. In Unicode, the following characters are separators: `\n`, `\v`, `\f`, `\r`, `\u{85}` (next line), `\u{2028}` (line separator), and `\u{2029}` (paragraph separator)
70
75
 
71
76
  ### `format?`
72
77
 
@@ -75,7 +80,6 @@ This flag is `true` only for special formatting characters, which are not contro
75
80
  ## Todo
76
81
 
77
82
  - Support all non-dummy encodings that Ruby supports
78
- - Complete test matrix
79
83
 
80
84
  ## MIT License
81
85
 
@@ -10,7 +10,7 @@ require_relative "characteristics/unicode"
10
10
  class Characteristics
11
11
  def self.type_from_encoding_name(encoding_name)
12
12
  case encoding_name
13
- when "US-ASCII"
13
+ when "US-ASCII", "GB1988"
14
14
  :ascii
15
15
  when "ASCII-8BIT"
16
16
  :binary
@@ -63,6 +63,15 @@ class Characteristics
63
63
  def control?
64
64
  end
65
65
 
66
+ def c0?
67
+ end
68
+
69
+ def delete?
70
+ end
71
+
72
+ def c1?
73
+ end
74
+
66
75
  def blank?
67
76
  end
68
77
 
@@ -18,6 +18,10 @@ class AsciiCharacteristics < Characteristics
18
18
  @ord = char.ord if @is_valid
19
19
  end
20
20
 
21
+ def valid?
22
+ @is_valid && !(@encoding_name != "US-ASCII" && @ord >= 0x80)
23
+ end
24
+
21
25
  def unicode?
22
26
  false
23
27
  end
@@ -46,6 +50,10 @@ class AsciiCharacteristics < Characteristics
46
50
  @is_valid && ( BLANKS.include?(@ord) || SEPARATORS.include?(@ord) )
47
51
  end
48
52
 
53
+ def separator?
54
+ SEPARATORS.include?(@ord)
55
+ end
56
+
49
57
  def format?
50
58
  false
51
59
  end
@@ -43,10 +43,18 @@ class BinaryCharacteristics < Characteristics
43
43
  @ord == 0x7F
44
44
  end
45
45
 
46
+ def c1?
47
+ false
48
+ end
49
+
46
50
  def blank?
47
51
  BLANKS.include?(@ord) || SEPARATORS.include?(@ord)
48
52
  end
49
53
 
54
+ def separator?
55
+ SEPARATORS.include?(@ord)
56
+ end
57
+
50
58
  def format?
51
59
  false
52
60
  end
@@ -183,6 +183,10 @@ class ByteCharacteristics < Characteristics
183
183
  EXTRA_BLANKS[@ord] =~ @encoding_name
184
184
  end
185
185
 
186
+ def separator?
187
+ SEPARATORS.include?(@ord)
188
+ end
189
+
186
190
  def format?
187
191
  FORMATS[@ord] =~ @encoding_name
188
192
  end
@@ -130,6 +130,10 @@ class UnicodeCharacteristics < Characteristics
130
130
  @is_valid && ( BLANKS.include?(@ord) || SEPARATORS.include?(@ord) )
131
131
  end
132
132
 
133
+ def separator?
134
+ @is_valid && SEPARATORS.include?(@ord)
135
+ end
136
+
133
137
  def format?
134
138
  @is_valid && @category == "Cf"
135
139
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Characteristics
4
- VERSION = "0.5.2".freeze
4
+ VERSION = "0.6.0".freeze
5
5
  UNICODE_VERSION = "9.0.0".freeze
6
6
  end
@@ -18,6 +18,10 @@ describe Characteristics do
18
18
  Characteristics.create(char.force_encoding(encoding)).blank?
19
19
  end
20
20
 
21
+ def separator?(char)
22
+ Characteristics.create(char.force_encoding(encoding)).separator?
23
+ end
24
+
21
25
  def format?(char)
22
26
  Characteristics.create(char.force_encoding(encoding)).format?
23
27
  end
@@ -52,6 +56,11 @@ describe Characteristics do
52
56
  refute blank? "\x21"
53
57
  end
54
58
 
59
+ it "is separator or not" do
60
+ assert separator? "\n"
61
+ refute separator? "\x20"
62
+ end
63
+
55
64
  it "is format or not" do
56
65
  assert format? "\uFFF9"
57
66
  refute format? "\x21"
@@ -107,6 +116,11 @@ describe Characteristics do
107
116
  refute blank? "\x21"
108
117
  end
109
118
 
119
+ it "is separator or not" do
120
+ assert separator? "\n"
121
+ refute separator? "\x20"
122
+ end
123
+
110
124
  it "is never format" do
111
125
  refute format? "\x21"
112
126
  end
@@ -141,6 +155,48 @@ describe Characteristics do
141
155
  refute blank? "\x21"
142
156
  end
143
157
 
158
+ it "is separator or not" do
159
+ assert separator? "\n"
160
+ refute separator? "\x20"
161
+ end
162
+
163
+ it "is never format" do
164
+ refute format? "\x21"
165
+ end
166
+
167
+ it "is never bidi_control" do
168
+ refute bidi_control? "\x21"
169
+ end
170
+ end
171
+
172
+ describe "GB1988" do
173
+ let(:encoding) { "GB1988" }
174
+
175
+ it "is valid or not" do
176
+ assert valid? "\x21"
177
+ refute valid? "\x80"
178
+ end
179
+
180
+ it "is always assigned" do
181
+ assert assigned? "\x21"
182
+ end
183
+
184
+ it "is control or not" do
185
+ assert control? "\x1E"
186
+ assert control? "\x7F"
187
+ refute control? "\x67"
188
+ end
189
+
190
+ it "is blank or not" do
191
+ assert blank? "\x20"
192
+ refute blank? "\x21"
193
+ end
194
+
195
+ it "is separator or not" do
196
+ assert separator? "\n"
197
+ refute separator? "\x20"
198
+ end
199
+
144
200
  it "is never format" do
145
201
  refute format? "\x21"
146
202
  end
@@ -177,6 +233,11 @@ describe Characteristics do
177
233
  refute blank? "\x21"
178
234
  end
179
235
 
236
+ it "is separator or not" do
237
+ assert separator? "\n"
238
+ refute separator? "\x20"
239
+ end
240
+
180
241
  it "is never format" do
181
242
  refute format? "\x21"
182
243
  end
@@ -186,27 +247,46 @@ describe Characteristics do
186
247
  end
187
248
  end
188
249
 
189
- # TODO
250
+ describe "ISO-8859-2" do
251
+ let(:encoding) { "ISO-8859-2" }
190
252
 
191
- # describe "ISO-8859-2" do
192
- # describe "ISO-8859-3" do
193
- # describe "ISO-8859-4" do
194
- # describe "ISO-8859-5" do
195
- # describe "ISO-8859-6" do
196
- # describe "ISO-8859-7" do
197
- # describe "ISO-8859-8" do
198
- # describe "ISO-8859-9" do
199
- # describe "ISO-8859-10" do
200
- # describe "ISO-8859-11" do
201
- # describe "ISO-8859-13" do
202
- # describe "ISO-8859-14" do
203
- # describe "ISO-8859-15" do
204
- # describe "ISO-8859-16" do
205
- end
253
+ it "is always valid" do
254
+ assert valid? "\x80"
255
+ end
206
256
 
207
- describe "Windows-125*" do
208
- describe "Windows-1252" do
209
- let(:encoding) { "Windows-1252" }
257
+ it "is always assigned" do
258
+ assert assigned? "\x21"
259
+ assert assigned? "\x80"
260
+ end
261
+
262
+ it "is control or not" do
263
+ assert control? "\x1E"
264
+ assert control? "\x7F"
265
+ assert control? "\x80"
266
+ refute control? "\x67"
267
+ end
268
+
269
+ it "is blank or not" do
270
+ assert blank? "\x20"
271
+ refute blank? "\x21"
272
+ end
273
+
274
+ it "is separator or not" do
275
+ assert separator? "\n"
276
+ refute separator? "\x20"
277
+ end
278
+
279
+ it "is never format" do
280
+ refute format? "\x21"
281
+ end
282
+
283
+ it "is never bidi_control" do
284
+ refute bidi_control? "\x21"
285
+ end
286
+ end
287
+
288
+ describe "ISO-8859-3" do
289
+ let(:encoding) { "ISO-8859-3" }
210
290
 
211
291
  it "is always valid" do
212
292
  assert valid? "\x80"
@@ -214,11 +294,13 @@ describe Characteristics do
214
294
 
215
295
  it "is assigned or not" do
216
296
  assert assigned? "\x21"
217
- refute assigned? "\x81"
297
+ refute assigned? "\xA5"
218
298
  end
219
299
 
220
300
  it "is control or not" do
221
301
  assert control? "\x1E"
302
+ assert control? "\x7F"
303
+ assert control? "\x80"
222
304
  refute control? "\x67"
223
305
  end
224
306
 
@@ -227,6 +309,11 @@ describe Characteristics do
227
309
  refute blank? "\x21"
228
310
  end
229
311
 
312
+ it "is separator or not" do
313
+ assert separator? "\n"
314
+ refute separator? "\x20"
315
+ end
316
+
230
317
  it "is never format" do
231
318
  refute format? "\x21"
232
319
  end
@@ -236,33 +323,22 @@ describe Characteristics do
236
323
  end
237
324
  end
238
325
 
239
- # TODO
240
-
241
- # describe "Windows-1250" do
242
- # describe "Windows-1251" do
243
- # describe "Windows-1253" do
244
- # describe "Windows-1254" do
245
- # describe "Windows-1255" do
246
- # describe "Windows-1256" do
247
- # describe "Windows-1257" do
248
- # describe "Windows-1258" do
249
- end
250
-
251
- describe "IBM*, CP85*" do
252
- describe "IBM869" do
253
- let(:encoding) { "IBM869" }
326
+ describe "ISO-8859-4" do
327
+ let(:encoding) { "ISO-8859-4" }
254
328
 
255
329
  it "is always valid" do
256
330
  assert valid? "\x80"
257
331
  end
258
332
 
259
- it "is assigned or not" do
333
+ it "is always assigned" do
260
334
  assert assigned? "\x21"
261
- refute assigned? "\x80"
335
+ assert assigned? "\x80"
262
336
  end
263
337
 
264
338
  it "is control or not" do
265
339
  assert control? "\x1E"
340
+ assert control? "\x7F"
341
+ assert control? "\x80"
266
342
  refute control? "\x67"
267
343
  end
268
344
 
@@ -271,6 +347,11 @@ describe Characteristics do
271
347
  refute blank? "\x21"
272
348
  end
273
349
 
350
+ it "is separator or not" do
351
+ assert separator? "\n"
352
+ refute separator? "\x20"
353
+ end
354
+
274
355
  it "is never format" do
275
356
  refute format? "\x21"
276
357
  end
@@ -280,27 +361,8 @@ describe Characteristics do
280
361
  end
281
362
  end
282
363
 
283
- # describe "IBM437" do
284
- # describe "IBM737" do
285
- # describe "IBM775" do
286
- # describe "CP850" do
287
- # describe "IBM852" do
288
- # describe "CP852" do
289
- # describe "IBM855" do
290
- # describe "CP855" do
291
- # describe "IBM857" do
292
- # describe "IBM860" do
293
- # describe "IBM861" do
294
- # describe "IBM862" do
295
- # describe "IBM863" do
296
- # describe "IBM864" do
297
- # describe "IBM865" do
298
- # describe "IBM866" do
299
- end
300
-
301
- describe "mac*" do
302
- describe "macRoman" do
303
- let(:encoding) { "macRoman" }
364
+ describe "ISO-8859-5" do
365
+ let(:encoding) { "ISO-8859-5" }
304
366
 
305
367
  it "is always valid" do
306
368
  assert valid? "\x80"
@@ -308,10 +370,13 @@ describe Characteristics do
308
370
 
309
371
  it "is always assigned" do
310
372
  assert assigned? "\x21"
373
+ assert assigned? "\x80"
311
374
  end
312
375
 
313
376
  it "is control or not" do
314
377
  assert control? "\x1E"
378
+ assert control? "\x7F"
379
+ assert control? "\x80"
315
380
  refute control? "\x67"
316
381
  end
317
382
 
@@ -320,6 +385,11 @@ describe Characteristics do
320
385
  refute blank? "\x21"
321
386
  end
322
387
 
388
+ it "is separator or not" do
389
+ assert separator? "\n"
390
+ refute separator? "\x20"
391
+ end
392
+
323
393
  it "is never format" do
324
394
  refute format? "\x21"
325
395
  end
@@ -329,20 +399,46 @@ describe Characteristics do
329
399
  end
330
400
  end
331
401
 
332
- # describe "macCentEuro" do
333
- # describe "macCroatian" do
334
- # describe "macCyrillic" do
335
- # describe "macGreek" do
336
- # describe "macIceland" do
337
- # describe "macRomania" do
338
- # describe "macThai" do
339
- # describe "macTurkish" do
340
- # describe "macUkraine" do
341
- end
402
+ describe "ISO-8859-6" do
403
+ let(:encoding) { "ISO-8859-6" }
342
404
 
343
- describe "TIS-620/Windows-874" do
344
- describe "TIS-620" do
345
- let(:encoding) { "TIS-620" }
405
+ it "is always valid" do
406
+ assert valid? "\x80"
407
+ end
408
+
409
+ it "is assigned or not" do
410
+ assert assigned? "\x21"
411
+ refute assigned? "\xA1"
412
+ end
413
+
414
+ it "is control or not" do
415
+ assert control? "\x1E"
416
+ assert control? "\x7F"
417
+ assert control? "\x80"
418
+ refute control? "\x67"
419
+ end
420
+
421
+ it "is blank or not" do
422
+ assert blank? "\x20"
423
+ refute blank? "\x21"
424
+ end
425
+
426
+ it "is separator or not" do
427
+ assert separator? "\n"
428
+ refute separator? "\x20"
429
+ end
430
+
431
+ it "is never format" do
432
+ refute format? "\x21"
433
+ end
434
+
435
+ it "is never bidi_control" do
436
+ refute bidi_control? "\x21"
437
+ end
438
+ end
439
+
440
+ describe "ISO-8859-7" do
441
+ let(:encoding) { "ISO-8859-7" }
346
442
 
347
443
  it "is always valid" do
348
444
  assert valid? "\x80"
@@ -350,11 +446,13 @@ describe Characteristics do
350
446
 
351
447
  it "is assigned or not" do
352
448
  assert assigned? "\x21"
353
- refute assigned? "\xA0"
449
+ refute assigned? "\xFF"
354
450
  end
355
451
 
356
452
  it "is control or not" do
357
453
  assert control? "\x1E"
454
+ assert control? "\x7F"
455
+ assert control? "\x80"
358
456
  refute control? "\x67"
359
457
  end
360
458
 
@@ -363,6 +461,11 @@ describe Characteristics do
363
461
  refute blank? "\x21"
364
462
  end
365
463
 
464
+ it "is separator or not" do
465
+ assert separator? "\n"
466
+ refute separator? "\x20"
467
+ end
468
+
366
469
  it "is never format" do
367
470
  refute format? "\x21"
368
471
  end
@@ -372,20 +475,62 @@ describe Characteristics do
372
475
  end
373
476
  end
374
477
 
375
- describe "Windows-874" do
376
- let(:encoding) { "Windows-874" }
478
+ describe "ISO-8859-8" do
479
+ let(:encoding) { "ISO-8859-8" }
377
480
 
378
481
  it "is always valid" do
379
482
  assert valid? "\x80"
380
483
  end
381
484
 
382
485
  it "is assigned or not" do
383
- assert assigned? "\xA0"
384
- refute assigned? "\x99"
486
+ assert assigned? "\x21"
487
+ refute assigned? "\xA1"
488
+ end
489
+
490
+ it "is control or not" do
491
+ assert control? "\x1E"
492
+ assert control? "\x7F"
493
+ assert control? "\x80"
494
+ refute control? "\x67"
495
+ end
496
+
497
+ it "is blank or not" do
498
+ assert blank? "\x20"
499
+ refute blank? "\x21"
500
+ end
501
+
502
+ it "is separator or not" do
503
+ assert separator? "\n"
504
+ refute separator? "\x20"
505
+ end
506
+
507
+ it "is format or not" do
508
+ assert format? "\xFE"
509
+ refute format? "\x21"
510
+ end
511
+
512
+ it "is bidi_control or not" do
513
+ assert bidi_control? "\xFE"
514
+ refute bidi_control? "\x21"
515
+ end
516
+ end
517
+
518
+ describe "ISO-8859-9" do
519
+ let(:encoding) { "ISO-8859-9" }
520
+
521
+ it "is always valid" do
522
+ assert valid? "\x80"
523
+ end
524
+
525
+ it "is always assigned" do
526
+ assert assigned? "\x21"
527
+ assert assigned? "\x80"
385
528
  end
386
529
 
387
530
  it "is control or not" do
388
531
  assert control? "\x1E"
532
+ assert control? "\x7F"
533
+ assert control? "\x80"
389
534
  refute control? "\x67"
390
535
  end
391
536
 
@@ -394,6 +539,11 @@ describe Characteristics do
394
539
  refute blank? "\x21"
395
540
  end
396
541
 
542
+ it "is separator or not" do
543
+ assert separator? "\n"
544
+ refute separator? "\x20"
545
+ end
546
+
397
547
  it "is never format" do
398
548
  refute format? "\x21"
399
549
  end
@@ -402,11 +552,9 @@ describe Characteristics do
402
552
  refute bidi_control? "\x21"
403
553
  end
404
554
  end
405
- end
406
555
 
407
- describe "KOI8-*" do
408
- describe "KOI8-R" do
409
- let(:encoding) { "KOI8-R" }
556
+ describe "ISO-8859-10" do
557
+ let(:encoding) { "ISO-8859-10" }
410
558
 
411
559
  it "is always valid" do
412
560
  assert valid? "\x80"
@@ -414,10 +562,51 @@ describe Characteristics do
414
562
 
415
563
  it "is always assigned" do
416
564
  assert assigned? "\x21"
565
+ assert assigned? "\x80"
566
+ end
567
+
568
+ it "is control or not" do
569
+ assert control? "\x1E"
570
+ assert control? "\x7F"
571
+ assert control? "\x80"
572
+ refute control? "\x67"
573
+ end
574
+
575
+ it "is blank or not" do
576
+ assert blank? "\x20"
577
+ refute blank? "\x21"
578
+ end
579
+
580
+ it "is separator or not" do
581
+ assert separator? "\n"
582
+ refute separator? "\x20"
583
+ end
584
+
585
+ it "is never format" do
586
+ refute format? "\x21"
587
+ end
588
+
589
+ it "is never bidi_control" do
590
+ refute bidi_control? "\x21"
591
+ end
592
+ end
593
+
594
+ describe "ISO-8859-11" do
595
+ let(:encoding) { "ISO-8859-11" }
596
+
597
+ it "is always valid" do
598
+ assert valid? "\x80"
599
+ end
600
+
601
+ it "is assigned or not" do
602
+ assert assigned? "\x21"
603
+ refute assigned? "\xDB"
417
604
  end
418
605
 
419
606
  it "is control or not" do
420
607
  assert control? "\x1E"
608
+ assert control? "\x7F"
609
+ assert control? "\x80"
421
610
  refute control? "\x67"
422
611
  end
423
612
 
@@ -426,6 +615,11 @@ describe Characteristics do
426
615
  refute blank? "\x21"
427
616
  end
428
617
 
618
+ it "is separator or not" do
619
+ assert separator? "\n"
620
+ refute separator? "\x20"
621
+ end
622
+
429
623
  it "is never format" do
430
624
  refute format? "\x21"
431
625
  end
@@ -435,8 +629,8 @@ describe Characteristics do
435
629
  end
436
630
  end
437
631
 
438
- describe "KOI8-U" do
439
- let(:encoding) { "KOI8-U" }
632
+ describe "ISO-8859-13" do
633
+ let(:encoding) { "ISO-8859-13" }
440
634
 
441
635
  it "is always valid" do
442
636
  assert valid? "\x80"
@@ -444,10 +638,13 @@ describe Characteristics do
444
638
 
445
639
  it "is always assigned" do
446
640
  assert assigned? "\x21"
641
+ assert assigned? "\x80"
447
642
  end
448
643
 
449
644
  it "is control or not" do
450
645
  assert control? "\x1E"
646
+ assert control? "\x7F"
647
+ assert control? "\x80"
451
648
  refute control? "\x67"
452
649
  end
453
650
 
@@ -456,6 +653,1555 @@ describe Characteristics do
456
653
  refute blank? "\x21"
457
654
  end
458
655
 
656
+ it "is separator or not" do
657
+ assert separator? "\n"
658
+ refute separator? "\x20"
659
+ end
660
+
661
+ it "is never format" do
662
+ refute format? "\x21"
663
+ end
664
+
665
+ it "is never bidi_control" do
666
+ refute bidi_control? "\x21"
667
+ end
668
+ end
669
+
670
+ describe "ISO-8859-14" do
671
+ let(:encoding) { "ISO-8859-14" }
672
+
673
+ it "is always valid" do
674
+ assert valid? "\x80"
675
+ end
676
+
677
+ it "is always assigned" do
678
+ assert assigned? "\x21"
679
+ assert assigned? "\x80"
680
+ end
681
+
682
+ it "is control or not" do
683
+ assert control? "\x1E"
684
+ assert control? "\x7F"
685
+ assert control? "\x80"
686
+ refute control? "\x67"
687
+ end
688
+
689
+ it "is blank or not" do
690
+ assert blank? "\x20"
691
+ refute blank? "\x21"
692
+ end
693
+
694
+ it "is separator or not" do
695
+ assert separator? "\n"
696
+ refute separator? "\x20"
697
+ end
698
+
699
+ it "is never format" do
700
+ refute format? "\x21"
701
+ end
702
+
703
+ it "is never bidi_control" do
704
+ refute bidi_control? "\x21"
705
+ end
706
+ end
707
+
708
+ describe "ISO-8859-15" do
709
+ let(:encoding) { "ISO-8859-15" }
710
+
711
+ it "is always valid" do
712
+ assert valid? "\x80"
713
+ end
714
+
715
+ it "is always assigned" do
716
+ assert assigned? "\x21"
717
+ assert assigned? "\x80"
718
+ end
719
+
720
+ it "is control or not" do
721
+ assert control? "\x1E"
722
+ assert control? "\x7F"
723
+ assert control? "\x80"
724
+ refute control? "\x67"
725
+ end
726
+
727
+ it "is blank or not" do
728
+ assert blank? "\x20"
729
+ refute blank? "\x21"
730
+ end
731
+
732
+ it "is separator or not" do
733
+ assert separator? "\n"
734
+ refute separator? "\x20"
735
+ end
736
+
737
+ it "is never format" do
738
+ refute format? "\x21"
739
+ end
740
+
741
+ it "is never bidi_control" do
742
+ refute bidi_control? "\x21"
743
+ end
744
+ end
745
+
746
+ describe "ISO-8859-16" do
747
+ let(:encoding) { "ISO-8859-16" }
748
+
749
+ it "is always valid" do
750
+ assert valid? "\x80"
751
+ end
752
+
753
+ it "is always assigned" do
754
+ assert assigned? "\x21"
755
+ assert assigned? "\x80"
756
+ end
757
+
758
+ it "is control or not" do
759
+ assert control? "\x1E"
760
+ assert control? "\x7F"
761
+ assert control? "\x80"
762
+ refute control? "\x67"
763
+ end
764
+
765
+ it "is blank or not" do
766
+ assert blank? "\x20"
767
+ refute blank? "\x21"
768
+ end
769
+
770
+ it "is separator or not" do
771
+ assert separator? "\n"
772
+ refute separator? "\x20"
773
+ end
774
+
775
+ it "is never format" do
776
+ refute format? "\x21"
777
+ end
778
+
779
+ it "is never bidi_control" do
780
+ refute bidi_control? "\x21"
781
+ end
782
+ end
783
+ end
784
+
785
+ describe "Windows-125*" do
786
+ describe "Windows-1250" do
787
+ let(:encoding) { "Windows-1250" }
788
+
789
+ it "is always valid" do
790
+ assert valid? "\x80"
791
+ end
792
+
793
+ it "is assigned or not" do
794
+ assert assigned? "\x21"
795
+ refute assigned? "\x81"
796
+ end
797
+
798
+ it "is control or not" do
799
+ assert control? "\x1E"
800
+ refute control? "\x67"
801
+ end
802
+
803
+ it "is blank or not" do
804
+ assert blank? "\x20"
805
+ refute blank? "\x21"
806
+ end
807
+
808
+ it "is separator or not" do
809
+ assert separator? "\n"
810
+ refute separator? "\x20"
811
+ end
812
+
813
+ it "is never format" do
814
+ refute format? "\x21"
815
+ end
816
+
817
+ it "is never bidi_control" do
818
+ refute bidi_control? "\x21"
819
+ end
820
+ end
821
+
822
+ describe "Windows-1251" do
823
+ let(:encoding) { "Windows-1251" }
824
+
825
+ it "is always valid" do
826
+ assert valid? "\x80"
827
+ end
828
+
829
+ it "is assigned or not" do
830
+ assert assigned? "\x21"
831
+ refute assigned? "\x98"
832
+ end
833
+
834
+ it "is control or not" do
835
+ assert control? "\x1E"
836
+ refute control? "\x67"
837
+ end
838
+
839
+ it "is blank or not" do
840
+ assert blank? "\x20"
841
+ refute blank? "\x21"
842
+ end
843
+
844
+ it "is separator or not" do
845
+ assert separator? "\n"
846
+ refute separator? "\x20"
847
+ end
848
+
849
+ it "is never format" do
850
+ refute format? "\x21"
851
+ end
852
+
853
+ it "is never bidi_control" do
854
+ refute bidi_control? "\x21"
855
+ end
856
+ end
857
+
858
+ describe "Windows-1252" do
859
+ let(:encoding) { "Windows-1252" }
860
+
861
+ it "is always valid" do
862
+ assert valid? "\x80"
863
+ end
864
+
865
+ it "is assigned or not" do
866
+ assert assigned? "\x21"
867
+ refute assigned? "\x81"
868
+ end
869
+
870
+ it "is control or not" do
871
+ assert control? "\x1E"
872
+ refute control? "\x67"
873
+ end
874
+
875
+ it "is blank or not" do
876
+ assert blank? "\x20"
877
+ refute blank? "\x21"
878
+ end
879
+
880
+ it "is separator or not" do
881
+ assert separator? "\n"
882
+ refute separator? "\x20"
883
+ end
884
+
885
+ it "is never format" do
886
+ refute format? "\x21"
887
+ end
888
+
889
+ it "is never bidi_control" do
890
+ refute bidi_control? "\x21"
891
+ end
892
+ end
893
+
894
+ describe "Windows-1253" do
895
+ let(:encoding) { "Windows-1253" }
896
+
897
+ it "is always valid" do
898
+ assert valid? "\x80"
899
+ end
900
+
901
+ it "is assigned or not" do
902
+ assert assigned? "\x21"
903
+ refute assigned? "\x81"
904
+ end
905
+
906
+ it "is control or not" do
907
+ assert control? "\x1E"
908
+ refute control? "\x67"
909
+ end
910
+
911
+ it "is blank or not" do
912
+ assert blank? "\x20"
913
+ refute blank? "\x21"
914
+ end
915
+
916
+ it "is separator or not" do
917
+ assert separator? "\n"
918
+ refute separator? "\x20"
919
+ end
920
+
921
+ it "is never format" do
922
+ refute format? "\x21"
923
+ end
924
+
925
+ it "is never bidi_control" do
926
+ refute bidi_control? "\x21"
927
+ end
928
+ end
929
+
930
+ describe "Windows-1254" do
931
+ let(:encoding) { "Windows-1254" }
932
+
933
+ it "is always valid" do
934
+ assert valid? "\x80"
935
+ end
936
+
937
+ it "is assigned or not" do
938
+ assert assigned? "\x21"
939
+ refute assigned? "\x81"
940
+ end
941
+
942
+ it "is control or not" do
943
+ assert control? "\x1E"
944
+ refute control? "\x67"
945
+ end
946
+
947
+ it "is blank or not" do
948
+ assert blank? "\x20"
949
+ refute blank? "\x21"
950
+ end
951
+
952
+ it "is separator or not" do
953
+ assert separator? "\n"
954
+ refute separator? "\x20"
955
+ end
956
+
957
+ it "is never format" do
958
+ refute format? "\x21"
959
+ end
960
+
961
+ it "is never bidi_control" do
962
+ refute bidi_control? "\x21"
963
+ end
964
+ end
965
+
966
+ describe "Windows-1255" do
967
+ let(:encoding) { "Windows-1255" }
968
+
969
+ it "is always valid" do
970
+ assert valid? "\x80"
971
+ end
972
+
973
+ it "is assigned or not" do
974
+ assert assigned? "\x21"
975
+ refute assigned? "\x81"
976
+ end
977
+
978
+ it "is control or not" do
979
+ assert control? "\x1E"
980
+ refute control? "\x67"
981
+ end
982
+
983
+ it "is blank or not" do
984
+ assert blank? "\x20"
985
+ refute blank? "\x21"
986
+ end
987
+
988
+ it "is separator or not" do
989
+ assert separator? "\n"
990
+ refute separator? "\x20"
991
+ end
992
+
993
+ it "is format or not" do
994
+ assert format? "\xFE"
995
+ refute format? "\x21"
996
+ end
997
+
998
+ it "is never bidi_control" do
999
+ assert bidi_control? "\xFE"
1000
+ refute bidi_control? "\x21"
1001
+ end
1002
+ end
1003
+
1004
+ describe "Windows-1256" do
1005
+ let(:encoding) { "Windows-1256" }
1006
+
1007
+ it "is always valid" do
1008
+ assert valid? "\x80"
1009
+ end
1010
+
1011
+ it "is always assigned" do
1012
+ assert assigned? "\x21"
1013
+ end
1014
+
1015
+ it "is control or not" do
1016
+ assert control? "\x1E"
1017
+ refute control? "\x67"
1018
+ end
1019
+
1020
+ it "is blank or not" do
1021
+ assert blank? "\x20"
1022
+ refute blank? "\x21"
1023
+ end
1024
+
1025
+ it "is separator or not" do
1026
+ assert separator? "\n"
1027
+ refute separator? "\x20"
1028
+ end
1029
+
1030
+ it "is format or not" do
1031
+ assert format? "\xFE"
1032
+ refute format? "\x21"
1033
+ end
1034
+
1035
+ it "is never bidi_control" do
1036
+ assert bidi_control? "\xFE"
1037
+ refute bidi_control? "\x21"
1038
+ end
1039
+ end
1040
+
1041
+ describe "Windows-1257" do
1042
+ let(:encoding) { "Windows-1257" }
1043
+
1044
+ it "is always valid" do
1045
+ assert valid? "\x80"
1046
+ end
1047
+
1048
+ it "is assigned or not" do
1049
+ assert assigned? "\x21"
1050
+ refute assigned? "\x81"
1051
+ end
1052
+
1053
+ it "is control or not" do
1054
+ assert control? "\x1E"
1055
+ refute control? "\x67"
1056
+ end
1057
+
1058
+ it "is blank or not" do
1059
+ assert blank? "\x20"
1060
+ refute blank? "\x21"
1061
+ end
1062
+
1063
+ it "is separator or not" do
1064
+ assert separator? "\n"
1065
+ refute separator? "\x20"
1066
+ end
1067
+
1068
+ it "is never format" do
1069
+ refute format? "\x21"
1070
+ end
1071
+
1072
+ it "is never bidi_control" do
1073
+ refute bidi_control? "\x21"
1074
+ end
1075
+ end
1076
+
1077
+ describe "Windows-1258" do
1078
+ let(:encoding) { "Windows-1258" }
1079
+
1080
+ it "is always valid" do
1081
+ assert valid? "\x80"
1082
+ end
1083
+
1084
+ it "is assigned or not" do
1085
+ assert assigned? "\x21"
1086
+ refute assigned? "\x81"
1087
+ end
1088
+
1089
+ it "is control or not" do
1090
+ assert control? "\x1E"
1091
+ refute control? "\x67"
1092
+ end
1093
+
1094
+ it "is blank or not" do
1095
+ assert blank? "\x20"
1096
+ refute blank? "\x21"
1097
+ end
1098
+
1099
+ it "is separator or not" do
1100
+ assert separator? "\n"
1101
+ refute separator? "\x20"
1102
+ end
1103
+
1104
+ it "is never format" do
1105
+ refute format? "\x21"
1106
+ end
1107
+
1108
+ it "is never bidi_control" do
1109
+ refute bidi_control? "\x21"
1110
+ end
1111
+ end
1112
+ end
1113
+
1114
+ describe "IBM*, CP85*" do
1115
+ describe "IBM437" do
1116
+ let(:encoding) { "IBM437" }
1117
+
1118
+ it "is always valid" do
1119
+ assert valid? "\x80"
1120
+ end
1121
+
1122
+ it "is always assigned" do
1123
+ assert assigned? "\x21"
1124
+ end
1125
+
1126
+ it "is control or not" do
1127
+ assert control? "\x1E"
1128
+ refute control? "\x67"
1129
+ end
1130
+
1131
+ it "is blank or not" do
1132
+ assert blank? "\x20"
1133
+ refute blank? "\x21"
1134
+ end
1135
+
1136
+ it "is separator or not" do
1137
+ assert separator? "\n"
1138
+ refute separator? "\x20"
1139
+ end
1140
+
1141
+ it "is never format" do
1142
+ refute format? "\x21"
1143
+ end
1144
+
1145
+ it "is never bidi_control" do
1146
+ refute bidi_control? "\x21"
1147
+ end
1148
+ end
1149
+
1150
+ describe "IBM737" do
1151
+ let(:encoding) { "IBM737" }
1152
+
1153
+ it "is always valid" do
1154
+ assert valid? "\x80"
1155
+ end
1156
+
1157
+ it "is always assigned" do
1158
+ assert assigned? "\x21"
1159
+ end
1160
+
1161
+ it "is control or not" do
1162
+ assert control? "\x1E"
1163
+ refute control? "\x67"
1164
+ end
1165
+
1166
+ it "is blank or not" do
1167
+ assert blank? "\x20"
1168
+ refute blank? "\x21"
1169
+ end
1170
+
1171
+ it "is separator or not" do
1172
+ assert separator? "\n"
1173
+ refute separator? "\x20"
1174
+ end
1175
+
1176
+ it "is never format" do
1177
+ refute format? "\x21"
1178
+ end
1179
+
1180
+ it "is never bidi_control" do
1181
+ refute bidi_control? "\x21"
1182
+ end
1183
+ end
1184
+
1185
+ describe "IBM775" do
1186
+ let(:encoding) { "IBM775" }
1187
+
1188
+ it "is always valid" do
1189
+ assert valid? "\x80"
1190
+ end
1191
+
1192
+ it "is always assigned" do
1193
+ assert assigned? "\x21"
1194
+ end
1195
+
1196
+ it "is control or not" do
1197
+ assert control? "\x1E"
1198
+ refute control? "\x67"
1199
+ end
1200
+
1201
+ it "is blank or not" do
1202
+ assert blank? "\x20"
1203
+ refute blank? "\x21"
1204
+ end
1205
+
1206
+ it "is separator or not" do
1207
+ assert separator? "\n"
1208
+ refute separator? "\x20"
1209
+ end
1210
+
1211
+ it "is never format" do
1212
+ refute format? "\x21"
1213
+ end
1214
+
1215
+ it "is never bidi_control" do
1216
+ refute bidi_control? "\x21"
1217
+ end
1218
+ end
1219
+
1220
+ describe "CP850" do
1221
+ let(:encoding) { "CP850" }
1222
+
1223
+ it "is always valid" do
1224
+ assert valid? "\x80"
1225
+ end
1226
+
1227
+ it "is always assigned" do
1228
+ assert assigned? "\x21"
1229
+ end
1230
+
1231
+ it "is control or not" do
1232
+ assert control? "\x1E"
1233
+ refute control? "\x67"
1234
+ end
1235
+
1236
+ it "is blank or not" do
1237
+ assert blank? "\x20"
1238
+ refute blank? "\x21"
1239
+ end
1240
+
1241
+ it "is separator or not" do
1242
+ assert separator? "\n"
1243
+ refute separator? "\x20"
1244
+ end
1245
+
1246
+ it "is never format" do
1247
+ refute format? "\x21"
1248
+ end
1249
+
1250
+ it "is never bidi_control" do
1251
+ refute bidi_control? "\x21"
1252
+ end
1253
+ end
1254
+
1255
+ describe "IBM852" do
1256
+ let(:encoding) { "IBM852" }
1257
+
1258
+ it "is always valid" do
1259
+ assert valid? "\x80"
1260
+ end
1261
+
1262
+ it "is always assigned" do
1263
+ assert assigned? "\x21"
1264
+ end
1265
+
1266
+ it "is control or not" do
1267
+ assert control? "\x1E"
1268
+ refute control? "\x67"
1269
+ end
1270
+
1271
+ it "is blank or not" do
1272
+ assert blank? "\x20"
1273
+ refute blank? "\x21"
1274
+ end
1275
+
1276
+ it "is separator or not" do
1277
+ assert separator? "\n"
1278
+ refute separator? "\x20"
1279
+ end
1280
+
1281
+ it "is never format" do
1282
+ refute format? "\x21"
1283
+ end
1284
+
1285
+ it "is never bidi_control" do
1286
+ refute bidi_control? "\x21"
1287
+ end
1288
+ end
1289
+
1290
+ describe "CP852" do
1291
+ let(:encoding) { "CP852" }
1292
+
1293
+ it "is always valid" do
1294
+ assert valid? "\x80"
1295
+ end
1296
+
1297
+ it "is always assigned" do
1298
+ assert assigned? "\x21"
1299
+ end
1300
+
1301
+ it "is control or not" do
1302
+ assert control? "\x1E"
1303
+ refute control? "\x67"
1304
+ end
1305
+
1306
+ it "is blank or not" do
1307
+ assert blank? "\x20"
1308
+ refute blank? "\x21"
1309
+ end
1310
+
1311
+ it "is separator or not" do
1312
+ assert separator? "\n"
1313
+ refute separator? "\x20"
1314
+ end
1315
+
1316
+ it "is never format" do
1317
+ refute format? "\x21"
1318
+ end
1319
+
1320
+ it "is never bidi_control" do
1321
+ refute bidi_control? "\x21"
1322
+ end
1323
+ end
1324
+
1325
+ describe "IBM855" do
1326
+ let(:encoding) { "IBM855" }
1327
+
1328
+ it "is always valid" do
1329
+ assert valid? "\x80"
1330
+ end
1331
+
1332
+ it "is always assigned" do
1333
+ assert assigned? "\x21"
1334
+ end
1335
+
1336
+ it "is control or not" do
1337
+ assert control? "\x1E"
1338
+ refute control? "\x67"
1339
+ end
1340
+
1341
+ it "is blank or not" do
1342
+ assert blank? "\x20"
1343
+ refute blank? "\x21"
1344
+ end
1345
+
1346
+ it "is separator or not" do
1347
+ assert separator? "\n"
1348
+ refute separator? "\x20"
1349
+ end
1350
+
1351
+ it "is never format" do
1352
+ refute format? "\x21"
1353
+ end
1354
+
1355
+ it "is never bidi_control" do
1356
+ refute bidi_control? "\x21"
1357
+ end
1358
+ end
1359
+
1360
+ describe "CP855" do
1361
+ let(:encoding) { "CP855" }
1362
+
1363
+ it "is always valid" do
1364
+ assert valid? "\x80"
1365
+ end
1366
+
1367
+ it "is always assigned" do
1368
+ assert assigned? "\x21"
1369
+ end
1370
+
1371
+ it "is control or not" do
1372
+ assert control? "\x1E"
1373
+ refute control? "\x67"
1374
+ end
1375
+
1376
+ it "is blank or not" do
1377
+ assert blank? "\x20"
1378
+ refute blank? "\x21"
1379
+ end
1380
+
1381
+ it "is separator or not" do
1382
+ assert separator? "\n"
1383
+ refute separator? "\x20"
1384
+ end
1385
+
1386
+ it "is never format" do
1387
+ refute format? "\x21"
1388
+ end
1389
+
1390
+ it "is never bidi_control" do
1391
+ refute bidi_control? "\x21"
1392
+ end
1393
+ end
1394
+
1395
+ describe "IBM857" do
1396
+ let(:encoding) { "IBM857" }
1397
+
1398
+ it "is always valid" do
1399
+ assert valid? "\x80"
1400
+ end
1401
+
1402
+ it "is assigned or not" do
1403
+ assert assigned? "\x21"
1404
+ refute assigned? "\xE7"
1405
+ end
1406
+
1407
+ it "is control or not" do
1408
+ assert control? "\x1E"
1409
+ refute control? "\x67"
1410
+ end
1411
+
1412
+ it "is blank or not" do
1413
+ assert blank? "\x20"
1414
+ refute blank? "\x21"
1415
+ end
1416
+
1417
+ it "is separator or not" do
1418
+ assert separator? "\n"
1419
+ refute separator? "\x20"
1420
+ end
1421
+
1422
+ it "is never format" do
1423
+ refute format? "\x21"
1424
+ end
1425
+
1426
+ it "is never bidi_control" do
1427
+ refute bidi_control? "\x21"
1428
+ end
1429
+ end
1430
+
1431
+ describe "IBM860" do
1432
+ let(:encoding) { "IBM860" }
1433
+
1434
+ it "is always valid" do
1435
+ assert valid? "\x80"
1436
+ end
1437
+
1438
+ it "is always assigned" do
1439
+ assert assigned? "\x21"
1440
+ end
1441
+
1442
+ it "is control or not" do
1443
+ assert control? "\x1E"
1444
+ refute control? "\x67"
1445
+ end
1446
+
1447
+ it "is blank or not" do
1448
+ assert blank? "\x20"
1449
+ refute blank? "\x21"
1450
+ end
1451
+
1452
+ it "is separator or not" do
1453
+ assert separator? "\n"
1454
+ refute separator? "\x20"
1455
+ end
1456
+
1457
+ it "is never format" do
1458
+ refute format? "\x21"
1459
+ end
1460
+
1461
+ it "is never bidi_control" do
1462
+ refute bidi_control? "\x21"
1463
+ end
1464
+ end
1465
+
1466
+ describe "IBM861" do
1467
+ let(:encoding) { "IBM861" }
1468
+
1469
+ it "is always valid" do
1470
+ assert valid? "\x80"
1471
+ end
1472
+
1473
+ it "is always assigned" do
1474
+ assert assigned? "\x21"
1475
+ end
1476
+
1477
+ it "is control or not" do
1478
+ assert control? "\x1E"
1479
+ refute control? "\x67"
1480
+ end
1481
+
1482
+ it "is blank or not" do
1483
+ assert blank? "\x20"
1484
+ refute blank? "\x21"
1485
+ end
1486
+
1487
+ it "is separator or not" do
1488
+ assert separator? "\n"
1489
+ refute separator? "\x20"
1490
+ end
1491
+
1492
+ it "is never format" do
1493
+ refute format? "\x21"
1494
+ end
1495
+
1496
+ it "is never bidi_control" do
1497
+ refute bidi_control? "\x21"
1498
+ end
1499
+ end
1500
+
1501
+ describe "IBM862" do
1502
+ let(:encoding) { "IBM862" }
1503
+
1504
+ it "is always valid" do
1505
+ assert valid? "\x80"
1506
+ end
1507
+
1508
+ it "is always assigned" do
1509
+ assert assigned? "\x21"
1510
+ end
1511
+
1512
+ it "is control or not" do
1513
+ assert control? "\x1E"
1514
+ refute control? "\x67"
1515
+ end
1516
+
1517
+ it "is blank or not" do
1518
+ assert blank? "\x20"
1519
+ refute blank? "\x21"
1520
+ end
1521
+
1522
+ it "is separator or not" do
1523
+ assert separator? "\n"
1524
+ refute separator? "\x20"
1525
+ end
1526
+
1527
+ it "is never format" do
1528
+ refute format? "\x21"
1529
+ end
1530
+
1531
+ it "is never bidi_control" do
1532
+ refute bidi_control? "\x21"
1533
+ end
1534
+ end
1535
+
1536
+ describe "IBM863" do
1537
+ let(:encoding) { "IBM863" }
1538
+
1539
+ it "is always valid" do
1540
+ assert valid? "\x80"
1541
+ end
1542
+
1543
+ it "is always assigned" do
1544
+ assert assigned? "\x21"
1545
+ end
1546
+
1547
+ it "is control or not" do
1548
+ assert control? "\x1E"
1549
+ refute control? "\x67"
1550
+ end
1551
+
1552
+ it "is blank or not" do
1553
+ assert blank? "\x20"
1554
+ refute blank? "\x21"
1555
+ end
1556
+
1557
+ it "is separator or not" do
1558
+ assert separator? "\n"
1559
+ refute separator? "\x20"
1560
+ end
1561
+
1562
+ it "is never format" do
1563
+ refute format? "\x21"
1564
+ end
1565
+
1566
+ it "is never bidi_control" do
1567
+ refute bidi_control? "\x21"
1568
+ end
1569
+ end
1570
+
1571
+ describe "IBM864" do
1572
+ let(:encoding) { "IBM864" }
1573
+
1574
+ it "is always valid" do
1575
+ assert valid? "\x80"
1576
+ end
1577
+
1578
+ it "is assigned or not" do
1579
+ assert assigned? "\x21"
1580
+ refute assigned? "\xA6"
1581
+ end
1582
+
1583
+ it "is control or not" do
1584
+ assert control? "\x1E"
1585
+ refute control? "\x67"
1586
+ end
1587
+
1588
+ it "is blank or not" do
1589
+ assert blank? "\x20"
1590
+ refute blank? "\x21"
1591
+ end
1592
+
1593
+ it "is separator or not" do
1594
+ assert separator? "\n"
1595
+ refute separator? "\x20"
1596
+ end
1597
+
1598
+ it "is never format" do
1599
+ refute format? "\x21"
1600
+ end
1601
+
1602
+ it "is never bidi_control" do
1603
+ refute bidi_control? "\x21"
1604
+ end
1605
+ end
1606
+
1607
+ describe "IBM865" do
1608
+ let(:encoding) { "IBM865" }
1609
+
1610
+ it "is always valid" do
1611
+ assert valid? "\x80"
1612
+ end
1613
+
1614
+ it "is always assigned" do
1615
+ assert assigned? "\x21"
1616
+ end
1617
+
1618
+ it "is control or not" do
1619
+ assert control? "\x1E"
1620
+ refute control? "\x67"
1621
+ end
1622
+
1623
+ it "is blank or not" do
1624
+ assert blank? "\x20"
1625
+ refute blank? "\x21"
1626
+ end
1627
+
1628
+ it "is separator or not" do
1629
+ assert separator? "\n"
1630
+ refute separator? "\x20"
1631
+ end
1632
+
1633
+ it "is never format" do
1634
+ refute format? "\x21"
1635
+ end
1636
+
1637
+ it "is never bidi_control" do
1638
+ refute bidi_control? "\x21"
1639
+ end
1640
+ end
1641
+
1642
+ describe "IBM866" do
1643
+ let(:encoding) { "IBM866" }
1644
+
1645
+ it "is always valid" do
1646
+ assert valid? "\x80"
1647
+ end
1648
+
1649
+ it "is always assigned" do
1650
+ assert assigned? "\x21"
1651
+ end
1652
+
1653
+ it "is control or not" do
1654
+ assert control? "\x1E"
1655
+ refute control? "\x67"
1656
+ end
1657
+
1658
+ it "is blank or not" do
1659
+ assert blank? "\x20"
1660
+ refute blank? "\x21"
1661
+ end
1662
+
1663
+ it "is separator or not" do
1664
+ assert separator? "\n"
1665
+ refute separator? "\x20"
1666
+ end
1667
+
1668
+ it "is never format" do
1669
+ refute format? "\x21"
1670
+ end
1671
+
1672
+ it "is never bidi_control" do
1673
+ refute bidi_control? "\x21"
1674
+ end
1675
+ end
1676
+
1677
+ describe "IBM869" do
1678
+ let(:encoding) { "IBM869" }
1679
+
1680
+ it "is always valid" do
1681
+ assert valid? "\x80"
1682
+ end
1683
+
1684
+ it "is assigned or not" do
1685
+ assert assigned? "\x21"
1686
+ refute assigned? "\x80"
1687
+ end
1688
+
1689
+ it "is control or not" do
1690
+ assert control? "\x1E"
1691
+ refute control? "\x67"
1692
+ end
1693
+
1694
+ it "is blank or not" do
1695
+ assert blank? "\x20"
1696
+ refute blank? "\x21"
1697
+ end
1698
+
1699
+ it "is separator or not" do
1700
+ assert separator? "\n"
1701
+ refute separator? "\x20"
1702
+ end
1703
+
1704
+ it "is never format" do
1705
+ refute format? "\x21"
1706
+ end
1707
+
1708
+ it "is never bidi_control" do
1709
+ refute bidi_control? "\x21"
1710
+ end
1711
+ end
1712
+ end
1713
+
1714
+ describe "mac*" do
1715
+ describe "macCentEuro" do
1716
+ let(:encoding) { "macCentEuro" }
1717
+
1718
+ it "is always valid" do
1719
+ assert valid? "\x80"
1720
+ end
1721
+
1722
+ it "is always assigned" do
1723
+ assert assigned? "\x21"
1724
+ end
1725
+
1726
+ it "is control or not" do
1727
+ assert control? "\x1E"
1728
+ refute control? "\x67"
1729
+ end
1730
+
1731
+ it "is blank or not" do
1732
+ assert blank? "\x20"
1733
+ refute blank? "\x21"
1734
+ end
1735
+
1736
+ it "is separator or not" do
1737
+ assert separator? "\n"
1738
+ refute separator? "\x20"
1739
+ end
1740
+
1741
+ it "is never format" do
1742
+ refute format? "\x21"
1743
+ end
1744
+
1745
+ it "is never bidi_control" do
1746
+ refute bidi_control? "\x21"
1747
+ end
1748
+ end
1749
+
1750
+ describe "macCroatian" do
1751
+ let(:encoding) { "macCroatian" }
1752
+
1753
+ it "is always valid" do
1754
+ assert valid? "\x80"
1755
+ end
1756
+
1757
+ it "is always assigned" do
1758
+ assert assigned? "\x21"
1759
+ end
1760
+
1761
+ it "is control or not" do
1762
+ assert control? "\x1E"
1763
+ refute control? "\x67"
1764
+ end
1765
+
1766
+ it "is blank or not" do
1767
+ assert blank? "\x20"
1768
+ refute blank? "\x21"
1769
+ end
1770
+
1771
+ it "is separator or not" do
1772
+ assert separator? "\n"
1773
+ refute separator? "\x20"
1774
+ end
1775
+
1776
+ it "is never format" do
1777
+ refute format? "\x21"
1778
+ end
1779
+
1780
+ it "is never bidi_control" do
1781
+ refute bidi_control? "\x21"
1782
+ end
1783
+ end
1784
+
1785
+ describe "macCyrillic" do
1786
+ let(:encoding) { "macCyrillic" }
1787
+
1788
+ it "is always valid" do
1789
+ assert valid? "\x80"
1790
+ end
1791
+
1792
+ it "is always assigned" do
1793
+ assert assigned? "\x21"
1794
+ end
1795
+
1796
+ it "is control or not" do
1797
+ assert control? "\x1E"
1798
+ refute control? "\x67"
1799
+ end
1800
+
1801
+ it "is blank or not" do
1802
+ assert blank? "\x20"
1803
+ refute blank? "\x21"
1804
+ end
1805
+
1806
+ it "is separator or not" do
1807
+ assert separator? "\n"
1808
+ refute separator? "\x20"
1809
+ end
1810
+
1811
+ it "is never format" do
1812
+ refute format? "\x21"
1813
+ end
1814
+
1815
+ it "is never bidi_control" do
1816
+ refute bidi_control? "\x21"
1817
+ end
1818
+ end
1819
+
1820
+ describe "macGreek" do
1821
+ let(:encoding) { "macGreek" }
1822
+
1823
+ it "is always valid" do
1824
+ assert valid? "\x80"
1825
+ end
1826
+
1827
+ it "is always assigned" do
1828
+ assert assigned? "\x21"
1829
+ end
1830
+
1831
+ it "is control or not" do
1832
+ assert control? "\x1E"
1833
+ refute control? "\x67"
1834
+ end
1835
+
1836
+ it "is blank or not" do
1837
+ assert blank? "\x20"
1838
+ refute blank? "\x21"
1839
+ end
1840
+
1841
+ it "is separator or not" do
1842
+ assert separator? "\n"
1843
+ refute separator? "\x20"
1844
+ end
1845
+
1846
+ it "is never format" do
1847
+ refute format? "\x21"
1848
+ end
1849
+
1850
+ it "is never bidi_control" do
1851
+ refute bidi_control? "\x21"
1852
+ end
1853
+ end
1854
+
1855
+ describe "macIceland" do
1856
+ let(:encoding) { "macIceland" }
1857
+
1858
+ it "is always valid" do
1859
+ assert valid? "\x80"
1860
+ end
1861
+
1862
+ it "is always assigned" do
1863
+ assert assigned? "\x21"
1864
+ end
1865
+
1866
+ it "is control or not" do
1867
+ assert control? "\x1E"
1868
+ refute control? "\x67"
1869
+ end
1870
+
1871
+ it "is blank or not" do
1872
+ assert blank? "\x20"
1873
+ refute blank? "\x21"
1874
+ end
1875
+
1876
+ it "is separator or not" do
1877
+ assert separator? "\n"
1878
+ refute separator? "\x20"
1879
+ end
1880
+
1881
+ it "is never format" do
1882
+ refute format? "\x21"
1883
+ end
1884
+
1885
+ it "is never bidi_control" do
1886
+ refute bidi_control? "\x21"
1887
+ end
1888
+ end
1889
+
1890
+ describe "macRoman" do
1891
+ let(:encoding) { "macRoman" }
1892
+
1893
+ it "is always valid" do
1894
+ assert valid? "\x80"
1895
+ end
1896
+
1897
+ it "is always assigned" do
1898
+ assert assigned? "\x21"
1899
+ end
1900
+
1901
+ it "is control or not" do
1902
+ assert control? "\x1E"
1903
+ refute control? "\x67"
1904
+ end
1905
+
1906
+ it "is blank or not" do
1907
+ assert blank? "\x20"
1908
+ refute blank? "\x21"
1909
+ end
1910
+
1911
+ it "is separator or not" do
1912
+ assert separator? "\n"
1913
+ refute separator? "\x20"
1914
+ end
1915
+
1916
+ it "is never format" do
1917
+ refute format? "\x21"
1918
+ end
1919
+
1920
+ it "is never bidi_control" do
1921
+ refute bidi_control? "\x21"
1922
+ end
1923
+ end
1924
+
1925
+ describe "macRomania" do
1926
+ let(:encoding) { "macRomania" }
1927
+
1928
+ it "is always valid" do
1929
+ assert valid? "\x80"
1930
+ end
1931
+
1932
+ it "is always assigned" do
1933
+ assert assigned? "\x21"
1934
+ end
1935
+
1936
+ it "is control or not" do
1937
+ assert control? "\x1E"
1938
+ refute control? "\x67"
1939
+ end
1940
+
1941
+ it "is blank or not" do
1942
+ assert blank? "\x20"
1943
+ refute blank? "\x21"
1944
+ end
1945
+
1946
+ it "is separator or not" do
1947
+ assert separator? "\n"
1948
+ refute separator? "\x20"
1949
+ end
1950
+
1951
+ it "is never format" do
1952
+ refute format? "\x21"
1953
+ end
1954
+
1955
+ it "is never bidi_control" do
1956
+ refute bidi_control? "\x21"
1957
+ end
1958
+ end
1959
+
1960
+ describe "macThai" do
1961
+ let(:encoding) { "macThai" }
1962
+
1963
+ it "is always valid" do
1964
+ assert valid? "\x80"
1965
+ end
1966
+
1967
+ it "is assigned or not" do
1968
+ assert assigned? "\x21"
1969
+ refute assigned? "\xFC"
1970
+ end
1971
+
1972
+ it "is control or not" do
1973
+ assert control? "\x1E"
1974
+ refute control? "\x67"
1975
+ end
1976
+
1977
+ it "is blank or not" do
1978
+ assert blank? "\x20"
1979
+ refute blank? "\x21"
1980
+ end
1981
+
1982
+ it "is separator or not" do
1983
+ assert separator? "\n"
1984
+ refute separator? "\x20"
1985
+ end
1986
+
1987
+ it "is never format" do
1988
+ refute format? "\x21"
1989
+ end
1990
+
1991
+ it "is never bidi_control" do
1992
+ refute bidi_control? "\x21"
1993
+ end
1994
+ end
1995
+
1996
+ describe "macTurkish" do
1997
+ let(:encoding) { "macTurkish" }
1998
+
1999
+ it "is always valid" do
2000
+ assert valid? "\x80"
2001
+ end
2002
+
2003
+ it "is assigned or not" do
2004
+ assert assigned? "\x21"
2005
+ refute assigned? "\xF5"
2006
+ end
2007
+
2008
+ it "is control or not" do
2009
+ assert control? "\x1E"
2010
+ refute control? "\x67"
2011
+ end
2012
+
2013
+ it "is blank or not" do
2014
+ assert blank? "\x20"
2015
+ refute blank? "\x21"
2016
+ end
2017
+
2018
+ it "is separator or not" do
2019
+ assert separator? "\n"
2020
+ refute separator? "\x20"
2021
+ end
2022
+
2023
+ it "is never format" do
2024
+ refute format? "\x21"
2025
+ end
2026
+
2027
+ it "is never bidi_control" do
2028
+ refute bidi_control? "\x21"
2029
+ end
2030
+ end
2031
+
2032
+ describe "macUkraine" do
2033
+ let(:encoding) { "macUkraine" }
2034
+
2035
+ it "is always valid" do
2036
+ assert valid? "\x80"
2037
+ end
2038
+
2039
+ it "is always assigned" do
2040
+ assert assigned? "\x21"
2041
+ end
2042
+
2043
+ it "is control or not" do
2044
+ assert control? "\x1E"
2045
+ refute control? "\x67"
2046
+ end
2047
+
2048
+ it "is blank or not" do
2049
+ assert blank? "\x20"
2050
+ refute blank? "\x21"
2051
+ end
2052
+
2053
+ it "is separator or not" do
2054
+ assert separator? "\n"
2055
+ refute separator? "\x20"
2056
+ end
2057
+
2058
+ it "is never format" do
2059
+ refute format? "\x21"
2060
+ end
2061
+
2062
+ it "is never bidi_control" do
2063
+ refute bidi_control? "\x21"
2064
+ end
2065
+ end
2066
+
2067
+ end
2068
+
2069
+ describe "TIS-620/Windows-874" do
2070
+ describe "TIS-620" do
2071
+ let(:encoding) { "TIS-620" }
2072
+
2073
+ it "is always valid" do
2074
+ assert valid? "\x80"
2075
+ end
2076
+
2077
+ it "is assigned or not" do
2078
+ assert assigned? "\x21"
2079
+ refute assigned? "\xA0"
2080
+ end
2081
+
2082
+ it "is control or not" do
2083
+ assert control? "\x1E"
2084
+ refute control? "\x67"
2085
+ end
2086
+
2087
+ it "is blank or not" do
2088
+ assert blank? "\x20"
2089
+ refute blank? "\x21"
2090
+ end
2091
+
2092
+ it "is separator or not" do
2093
+ assert separator? "\n"
2094
+ refute separator? "\x20"
2095
+ end
2096
+
2097
+ it "is never format" do
2098
+ refute format? "\x21"
2099
+ end
2100
+
2101
+ it "is never bidi_control" do
2102
+ refute bidi_control? "\x21"
2103
+ end
2104
+ end
2105
+
2106
+ describe "Windows-874" do
2107
+ let(:encoding) { "Windows-874" }
2108
+
2109
+ it "is always valid" do
2110
+ assert valid? "\x80"
2111
+ end
2112
+
2113
+ it "is assigned or not" do
2114
+ assert assigned? "\xA0"
2115
+ refute assigned? "\x99"
2116
+ end
2117
+
2118
+ it "is control or not" do
2119
+ assert control? "\x1E"
2120
+ refute control? "\x67"
2121
+ end
2122
+
2123
+ it "is blank or not" do
2124
+ assert blank? "\x20"
2125
+ refute blank? "\x21"
2126
+ end
2127
+
2128
+ it "is separator or not" do
2129
+ assert separator? "\n"
2130
+ refute separator? "\x20"
2131
+ end
2132
+
2133
+ it "is never format" do
2134
+ refute format? "\x21"
2135
+ end
2136
+
2137
+ it "is never bidi_control" do
2138
+ refute bidi_control? "\x21"
2139
+ end
2140
+ end
2141
+ end
2142
+
2143
+ describe "KOI8-*" do
2144
+ describe "KOI8-R" do
2145
+ let(:encoding) { "KOI8-R" }
2146
+
2147
+ it "is always valid" do
2148
+ assert valid? "\x80"
2149
+ end
2150
+
2151
+ it "is always assigned" do
2152
+ assert assigned? "\x21"
2153
+ end
2154
+
2155
+ it "is control or not" do
2156
+ assert control? "\x1E"
2157
+ refute control? "\x67"
2158
+ end
2159
+
2160
+ it "is blank or not" do
2161
+ assert blank? "\x20"
2162
+ refute blank? "\x21"
2163
+ end
2164
+
2165
+ it "is separator or not" do
2166
+ assert separator? "\n"
2167
+ refute separator? "\x20"
2168
+ end
2169
+
2170
+ it "is never format" do
2171
+ refute format? "\x21"
2172
+ end
2173
+
2174
+ it "is never bidi_control" do
2175
+ refute bidi_control? "\x21"
2176
+ end
2177
+ end
2178
+
2179
+ describe "KOI8-U" do
2180
+ let(:encoding) { "KOI8-U" }
2181
+
2182
+ it "is always valid" do
2183
+ assert valid? "\x80"
2184
+ end
2185
+
2186
+ it "is always assigned" do
2187
+ assert assigned? "\x21"
2188
+ end
2189
+
2190
+ it "is control or not" do
2191
+ assert control? "\x1E"
2192
+ refute control? "\x67"
2193
+ end
2194
+
2195
+ it "is blank or not" do
2196
+ assert blank? "\x20"
2197
+ refute blank? "\x21"
2198
+ end
2199
+
2200
+ it "is separator or not" do
2201
+ assert separator? "\n"
2202
+ refute separator? "\x20"
2203
+ end
2204
+
459
2205
  it "is never format" do
460
2206
  refute format? "\x21"
461
2207
  end