/*
* Copyright (c) 2015 Mozilla Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package nu.validator.encoding.test;
import nu.validator.encoding.Encoding;
public class Big5Tester extends EncodingTester {
public static void main(String[] args) {
new Big5Tester().test();
}
private void test() {
// ASCII
decodeBig5("\u6162", "\u0061\u0062");
// Edge cases
decodeBig5("\u8740", "\u43F0");
decodeBig5("\uFEFE", "\u79D4");
decodeBig5("\uFEFD", "\uD864\uDD0D");
decodeBig5("\u8862", "\u00CA\u0304");
decodeBig5("\u8864", "\u00CA\u030C");
decodeBig5("\u8866", "\u00CA");
decodeBig5("\u88A3", "\u00EA\u0304");
decodeBig5("\u88A5", "\u00EA\u030C");
decodeBig5("\u88A7", "\u00EA");
decodeBig5("\u99D4", "\u8991");
decodeBig5("\u99D5", "\uD85E\uDD67");
decodeBig5("\u99D6", "\u8A29");
// Edge cases surrounded with ASCII
decodeBig5("\u6187\u4062", "\u0061\u43F0\u0062");
decodeBig5("\u61FE\uFE62", "\u0061\u79D4\u0062");
decodeBig5("\u61FE\uFD62", "\u0061\uD864\uDD0D\u0062");
decodeBig5("\u6188\u6262", "\u0061\u00CA\u0304\u0062");
decodeBig5("\u6188\u6462", "\u0061\u00CA\u030C\u0062");
decodeBig5("\u6188\u6662", "\u0061\u00CA\u0062");
decodeBig5("\u6188\uA362", "\u0061\u00EA\u0304\u0062");
decodeBig5("\u6188\uA562", "\u0061\u00EA\u030C\u0062");
decodeBig5("\u6188\uA762", "\u0061\u00EA\u0062");
decodeBig5("\u6199\uD462", "\u0061\u8991\u0062");
decodeBig5("\u6199\uD562", "\u0061\uD85E\uDD67\u0062");
decodeBig5("\u6199\uD662", "\u0061\u8A29\u0062");
// Bad sequences
decodeBig5("\u8061", "\uFFFD\u0061");
decodeBig5("\uFF61", "\uFFFD\u0061");
decodeBig5("\uFE39", "\uFFFD\u0039");
decodeBig5("\u8766", "\uFFFD\u0066");
decodeBig5("\u8140", "\uFFFD\u0040");
decodeBig5("\u6181", "\u0061\uFFFD");
// ASCII
encodeBig5("\u0061\u0062", "\u6162");
// Edge cases
encodeBig5("\u9EA6\u0061", "\u3F61");
encodeBig5("\uD858\uDE6B\u0061", "\u3F61");
encodeBig5("\u3000", "\uA140");
encodeBig5("\u20AC", "\uA3E1");
encodeBig5("\u4E00", "\uA440");
encodeBig5("\uD85D\uDE07", "\uC8A4");
encodeBig5("\uFFE2", "\uC8CD");
encodeBig5("\u79D4", "\uFEFE");
// Not in index
encodeBig5("\u2603\u0061", "\u3F61");
// duplicate low bits
encodeBig5("\uD840\uDFB5", "\uFD6A");
// prefer last
encodeBig5("\u2550", "\uF9F9");
}
private void decodeBig5(String input, String expectation) {
decode(input, expectation, Encoding.BIG5);
}
private void encodeBig5(String input, String expectation) {
encode(input, expectation, Encoding.BIG5);
}
}