summaryrefslogtreecommitdiff
path: root/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/niocharset/Latin1Test.scala
blob: f6ddc36c0953cc7e72eb2d6a051fd2dfe618f2e8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*                     __                                               *\
**     ________ ___   / /  ___      __ ____  Scala.js Test Suite        **
**    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, LAMP/EPFL        **
**  __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \    http://scala-js.org/       **
** /____/\___/_/ |_/____/_/ | |__/ /____/                               **
**                          |/____/                                     **
\*                                                                      */
package scala.scalajs.testsuite.niocharset

import java.nio._
import java.nio.charset._

import scala.scalajs.niocharset.StandardCharsets

import BaseCharsetTest._

object Latin1Test extends BaseCharsetTest(StandardCharsets.ISO_8859_1) {
  describe("ISO-8859-1") {
    it("decode") {
      // Simple tests

      testDecode(bb"48 65 6c 6c 6f")(cb"Hello")
      testDecode(bb"42 6f 6e 6a 6f 75 72")(cb"Bonjour")

      testDecode(bb"00 01 0a 10 20")(cb"\u0000\u0001\u000a\u0010 ")
      testDecode(bb"7f 7f")(cb"\u007f\u007f")

      testDecode(bb"c8 e5 ec ec ef")(cb"Èåììï")
      testDecode(bb"c2 ef ee ea ef f5 f2")(cb"Âïîêïõò")

      testDecode(bb"80 81 8a 90 a0")(cb"\u0080\u0081\u008a\u0090\u00a0")
      testDecode(bb"ff ff")(cb"ÿÿ")
    }

    it("encode") {
      // Simple tests

      testEncode(cb"Hello")(bb"48 65 6c 6c 6f")
      testEncode(cb"Bonjour")(bb"42 6f 6e 6a 6f 75 72")

      testEncode(cb"\u0000\u0001\u000a\u0010 ")(bb"00 01 0a 10 20")
      testEncode(cb"\u007f\u007f")(bb"7f 7f")

      testEncode(cb"Èåììï")(bb"c8 e5 ec ec ef")
      testEncode(cb"Âïîêïõò")(bb"c2 ef ee ea ef f5 f2")

      testEncode(cb"\u0080\u0081\u008a\u0090\u00a0")(bb"80 81 8a 90 a0")
      testEncode(cb"ÿÿ")(bb"ff ff")

      // Unmappable characters

      testEncode(cb"\u0100")(Unmappable(1))
      testEncode(cb"\u07ff")(Unmappable(1))
      testEncode(cb"\ue000")(Unmappable(1))
      testEncode(cb"\uffff")(Unmappable(1))
      testEncode(cb"\ud835\udcd7")(Unmappable(2))

      testEncode(cb"\u0100A")(Unmappable(1), bb"41")
      testEncode(cb"\u07ffA")(Unmappable(1), bb"41")
      testEncode(cb"\ue000A")(Unmappable(1), bb"41")
      testEncode(cb"\uffffA")(Unmappable(1), bb"41")
      testEncode(cb"\ud835\udcd7A")(Unmappable(2), bb"41")

      // Single UTF-16 surrogates
      testEncode(cb"\ud800")(Malformed(1))
      testEncode(cb"\udaff")(Malformed(1))
      testEncode(cb"\udb80")(Malformed(1))
      testEncode(cb"\udbff")(Malformed(1))
      testEncode(cb"\udc00")(Malformed(1))
      testEncode(cb"\udf80")(Malformed(1))
      testEncode(cb"\udfff")(Malformed(1))

      // High UTF-16 surrogates not followed by low surrogates
      testEncode(cb"\ud800A")(Malformed(1), bb"41")
      testEncode(cb"\ud800\ud800")(Malformed(1), Malformed(1))
      testEncode(cb"\ud800\ud835\udcd7")(Malformed(1), Unmappable(2))
      testEncode(cb"\udbffA")(Malformed(1), bb"41")
      testEncode(cb"\udbff\udb8f")(Malformed(1), Malformed(1))
      testEncode(cb"\udbff\ud835\udcd7")(Malformed(1), Unmappable(2))
    }

    it("isLegalReplacement") {
      val encoder = charset.newEncoder
      expect(encoder.isLegalReplacement(Array(0x00.toByte))).toBeTruthy
      expect(encoder.isLegalReplacement(Array(0x41.toByte))).toBeTruthy
      expect(encoder.isLegalReplacement(Array('?'.toByte))).toBeTruthy
      expect(encoder.isLegalReplacement(Array(0x80.toByte))).toBeTruthy
      expect(encoder.isLegalReplacement(Array(0xff.toByte))).toBeTruthy
    }
  }
}