1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Licensed to the Apache Software Foundation (ASF) under one or more
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.nio.charset;
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.ByteBuffer;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.CharBuffer;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.CharacterCodingException;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.Charset;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.CharsetDecoder;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.CharsetEncoder;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.nio.charset.CodingErrorAction;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Super class for concrete charset test suites.
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Charset_TestGenerator {
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Charset charset;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    CharsetDecoder decoder;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    CharsetEncoder encoder;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final int[] codes = {
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        9, 12, 28, 31, 48, 51, 54, 57, 65, 68, 71, 74, 77, 80, 83, 86,
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        89, 97, 100, 103, 106, 109, 112, 115, 118, 121, 170, 181, 186, 192, 195, 198,
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        201, 204, 207, 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246,
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291, 294,
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333, 336, 339, 342,
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        345, 348, 351, 354, 357, 360, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390,
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        393, 396, 399, 402, 405, 408, 411, 414, 417, 420, 423, 426, 429, 432, 435, 438,
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486,
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        489, 492, 495, 498, 501, 504, 507, 510, 513, 516, 519, 522, 525, 528, 531, 534,
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        537, 540, 543, 546, 549, 552, 555, 558, 561, 564, 592, 595, 598, 601, 604, 607,
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        610, 613, 616, 619, 622, 625, 628, 631, 634, 637, 640, 643, 646, 649, 652, 655,
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        658, 661, 664, 667, 670, 673, 676, 679, 682, 685, 688, 691, 694, 697, 700, 703,
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        710, 713, 716, 719, 736, 739, 750, 890, 902, 905, 908, 911, 914, 917, 920, 923,
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        926, 929, 932, 935, 938, 941, 944, 947, 950, 953, 956, 959, 962, 965, 968, 971,
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        974, 977, 980, 983, 986, 989, 992, 995, 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019,
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        1024, 1027, 1060, 1093, 1126, 1162, 1195, 1228, 1261, 1294, 1329, 1362, 1395, 1488, 1521, 1569,
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        1602, 1635, 1668, 1701, 1734, 1774, 1808, 1869, 1920, 1953, 2308, 2341, 2384, 2437, 2470, 2524,
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        2565, 2598, 2649, 2693, 2726, 2768, 2821, 2854, 2908, 2947, 2980, 3047, 3080, 3114, 3168, 3205,
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        3238, 3294, 3333, 3366, 3424, 3461, 3494, 3585, 3618, 3651, 3713, 3746, 3779, 3840, 3873, 3906,
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        3939, 3976, 4096, 4129, 4162, 4256, 4289, 4322, 4355, 4388, 4421, 4454, 4487, 4520, 4553, 4586,
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        4619, 4652, 4685, 4718, 4752, 4786, 4819, 4852, 4885, 4918, 4951, 5024, 5057, 5090, 5123, 5156,
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        5189, 5222, 5255, 5288, 5321, 5354, 5387, 5420, 5453, 5486, 5519, 5552, 5585, 5618, 5651, 5684,
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        5717, 5750, 5783, 5816, 5849, 5888, 5921, 5954, 5987, 6020, 6053, 6103, 6158, 6191, 6224, 6257,
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        6290, 6400, 6470, 6503, 7424, 7457, 7490, 7523, 7680, 7713, 7746, 7779, 7812, 7845, 7878, 7911,
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        7944, 7977, 8010, 8043, 8076, 8109, 8144, 8178, 8232, 8287, 8450, 8484, 8517, 12288, 12337, 12370,
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        12403, 12436, 12469, 12502, 12535, 12568, 12601, 12634, 12667, 12704, 12784, 13312, 13345, 13378, 13411, 13444,
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        13477, 13510, 13543, 13576, 13609, 13642, 13675, 13708, 13741, 13774, 13807, 13840, 13873, 13906, 13939, 13972,
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        14005, 14038, 14071, 14104, 14137, 14170, 14203, 14236, 14269, 14302, 14335, 14368, 14401, 14434, 14467, 14500,
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        14533, 14566, 14599, 14632, 14665, 14698, 14731, 14764, 14797, 14830, 14863, 14896, 14929, 14962, 14995, 15028,
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        15061, 15094, 15127, 15160, 15193, 15226, 15259, 15292, 15325, 15358, 15391, 15424, 15457, 15490, 15523, 15556,
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        15589, 15622, 15655, 15688, 15721, 15754, 15787, 15820, 15853, 15886, 15919, 15952, 15985, 16018, 16051, 16084,
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        16117, 16150, 16183, 16216, 16249, 16282, 16315, 16348, 16381, 16414, 16447, 16480, 16513, 16546, 16579, 16612,
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        16645, 16678, 16711, 16744, 16777, 16810, 16843, 16876, 16909, 16942, 16975, 17008, 17041, 17074, 17107, 17140,
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        17173, 17206, 17239, 17272, 17305, 17338, 17371, 17404, 17437, 17470, 17503, 17536, 17569, 17602, 17635, 17668,
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        17701, 17734, 17767, 17800, 17833, 17866, 17899, 17932, 17965, 17998, 18031, 18064, 18097, 18130, 18163, 18196,
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        18229, 18262, 18295, 18328, 18361, 18394, 18427, 18460, 18493, 18526, 18559, 18592, 18625, 18658, 18691, 18724,
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        18757, 18790, 18823, 18856, 18889, 18922, 18955, 18988, 19021, 19054, 19087, 19120, 19153, 19186, 19219, 19252,
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        19285, 19318, 19351, 19384, 19417, 19450, 19483, 19516, 19549, 19582, 19615, 19648, 19681, 19714, 19747, 19780,
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        19813, 19846, 19879, 19968, 20001, 20034, 20067, 20100, 20133, 20166, 20199, 20232, 20265, 20298, 20331, 20364,
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        20397, 20430, 20463, 20496, 20529, 20562, 20595, 20628, 20661, 20694, 20727, 20760, 20793, 20826, 20859, 20892,
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        20925, 20958, 20991, 21024, 21057, 21090, 21123, 21156, 21189, 21222, 21255, 21288, 21321, 21354, 21387, 21420,
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        21453, 21486, 21519, 21552, 21585, 21618, 21651, 21684, 21717, 21750, 21783, 21816, 21849, 21882, 21915, 21948,
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        21981, 22014, 22047, 22080, 22113, 22146, 22179, 22212, 22245, 22278, 22311, 22344, 22377, 22410, 22443, 22476,
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        22509, 22542, 22575, 22608, 22641, 22674, 22707, 22740, 22773, 22806, 22839, 22872, 22905, 22938, 22971, 23004,
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        23037, 23070, 23103, 23136, 23169, 23202, 23235, 23268, 23301, 23334, 23367, 23400, 23433, 23466, 23499, 23532,
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        23565, 23598, 23631, 23664, 23697, 23730, 23763, 23796, 23829, 23862, 23895, 23928, 23961, 23994, 24027, 24060,
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        24093, 24126, 24159, 24192, 24225, 24258, 24291, 24324, 24357, 24390, 24423, 24456, 24489, 24522, 24555, 24588,
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        24621, 24654, 24687, 24720, 24753, 24786, 24819, 24852, 24885, 24918, 24951, 24984, 25017, 25050, 25083, 25116,
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        25149, 25182, 25215, 25248, 25281, 25314, 25347, 25380, 25413, 25446, 25479, 25512, 25545, 25578, 25611, 25644,
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        25677, 25710, 25743, 25776, 25809, 25842, 25875, 25908, 25941, 25974, 26007, 26040, 26073, 26106, 26139, 26172,
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        26205, 26238, 26271, 26304, 26337, 26370, 26403, 26436, 26469, 26502, 26535, 26568, 26601, 26634, 26667, 26700,
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        26733, 26766, 26799, 26832, 26865, 26898, 26931, 26964, 26997, 27030, 27063, 27096, 27129, 27162, 27195, 27228,
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        27261, 27294, 27327, 27360, 27393, 27426, 27459, 27492, 27525, 27558, 27591, 27624, 27657, 27690, 27723, 27756,
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        27789, 27822, 27855, 27888, 27921, 27954, 27987, 28020, 28053, 28086, 28119, 28152, 28185, 28218, 28251, 28284,
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        28317, 28350, 28383, 28416, 28449, 28482, 28515, 28548, 28581, 28614, 28647, 28680, 28713, 28746, 28779, 28812,
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        28845, 28878, 28911, 28944, 28977, 29010, 29043, 29076, 29109, 29142, 29175, 29208, 29241, 29274, 29307, 29340,
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        29373, 29406, 29439, 29472, 29505, 29538, 29571, 29604, 29637, 29670, 29703, 29736, 29769, 29802, 29835, 29868,
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        29901, 29934, 29967, 30000, 30033, 30066, 30099, 30132, 30165, 30198, 30231, 30264, 30297, 30330, 30363, 30396,
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        30429, 30462, 30495, 30528, 30561, 30594, 30627, 30660, 30693, 30726, 30759, 30792, 30825, 30858, 30891, 30924,
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        30957, 30990, 31023, 31056, 31089, 31122, 31155, 31188, 31221, 31254, 31287, 31320, 31353, 31386, 31419, 31452,
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        31485, 31518, 31551, 31584, 31617, 31650, 31683, 31716, 31749, 31782, 31815, 31848, 31881, 31914, 31947, 31980,
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        32013, 32046, 32079, 32112, 32145, 32178, 32211, 32244, 32277, 32310, 32343, 32376, 32409, 32442, 32475, 32508,
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        32541, 32574, 32607, 32640, 32673, 32706, 32739
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    };
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final char[] chars = Charset_AbstractTest.theseChars(codes);
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static abstract class CodesGenerator {
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int row = 0, col = 0;
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        abstract void consume (int code);
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean isAccepted (int code)
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return Character.isLetterOrDigit(code);
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class CodesGenerator1 extends CodesGenerator {
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        void consume (int code) {
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print(code);
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print(", ");
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            col++;
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (col == 16) {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println();
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                row++;
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                col = 0;
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean isAccepted (int code)
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return Character.isLetterOrDigit(code) || Character.isWhitespace(code);
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class CodesGenerator2 extends CodesGenerator {
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        void consume (int code) {
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//            System.out.print(code);
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//            System.out.print(", ");
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print((char) code);
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            col++;
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (col == 80) {
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println();
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                row++;
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                col = 0;
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class CodesGenerator3 extends CodesGenerator {
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        char[] buf = new char[8];
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        void consume (int code) {
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            buf[col] = (char) code;
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print(code);
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print(", ");
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            col++;
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (col == 8) {
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.print(" // ");
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println(buf);
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                row++;
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                col = 0;
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean isAccepted (int code)
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return Character.isLetterOrDigit(code);
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//                    || Character.isWhitespace(code);
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static void genCodes () {
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CodesGenerator gen = new CodesGenerator1();
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int code = 0;
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (code < (1 << 10)) {
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            while (!gen.isAccepted(code)) code ++;
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            gen.consume(code);
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            code += 3;
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (code < (1 << 15)) {
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            while (!gen.isAccepted(code)) code ++;
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            gen.consume(code);
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            code += 33;
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static abstract class Dumper {
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int row = 0, col = 0;
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        abstract void consume (int code);
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class Dumper1 extends Dumper {
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int colMax;
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Dumper1 () {
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            colMax = 16;
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Dumper1 (int colums) {
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            colMax = colums;
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        void consume (int code) {
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print(code);
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.print(", ");
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            col++;
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (col == colMax) {
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println();
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                row++;
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                col = 0;
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static void genEncoded (Charset charset, CharBuffer cb) {
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println(charset.name());
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Dumper out = new Dumper1();
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CharsetEncoder encoder = charset.newEncoder();
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        encoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ByteBuffer bb = encoder.encode(cb);
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//            bb.rewind();
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            while (bb.hasRemaining()) {
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.consume(bb.get());
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (CharacterCodingException e) {
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.println(e);
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//                e.printStackTrace();
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static void genDecoded (Charset charset, ByteBuffer bb) {
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        CharsetDecoder decoder = charset.newDecoder();
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        System.out.println(code);
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        bytes[0] = (byte) code;
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        System.out.println(bytes[0]);
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        ByteBuffer inputBB = ByteBuffer.wrap(bytes);
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        CharBuffer outputCB;
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        try {
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//            outputCB = decoder.decode(inputBB);
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//            outputCB.rewind();
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//            System.out.println(outputCB);
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        } catch (CharacterCodingException e) {
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//            System.out.println(e);
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project////                e.printStackTrace();
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        }
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void main(String[] args) {
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        charset = Charset.defaultCharset();
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        decoder = charset.newDecoder();
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        System.out.println(charset.name());
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        genEncoded(Charset.forName("MacRoman"), CharBuffer.wrap(chars));
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//        genEncoded(Charset.forName(charsetNames[37]), CharBuffer.wrap(chars));
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
268