001 /*
002 * Copyright 2005,2009 Ivan SZKIBA
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.ini4j.spi;
017
018 import org.ini4j.Config;
019 import org.ini4j.Ini;
020 import org.ini4j.Ini4jCase;
021 import org.ini4j.InvalidFileFormatException;
022
023 import org.junit.Test;
024
025 import java.nio.charset.Charset;
026
027 public class UnicodeInputStreamReaderTest extends Ini4jCase
028 {
029 @Test public void _testUTF32BE() throws Exception
030 {
031 test("UTF-32BE.ini", "UTF-32BE");
032 }
033
034 @Test public void _testUTF32BE_BOM() throws Exception
035 {
036 test("UTF-32BE-BOM.ini", null);
037 test("UTF-32BE-BOM.ini", "UTF-8");
038 test("UTF-32BE-BOM.ini", "UTF-16");
039 }
040
041 @Test public void _testUTF32BE_fail() throws Exception
042 {
043 try
044 {
045 test("UTF-32BE.ini", "ISO-8859-1");
046 missing(IllegalStateException.class);
047 }
048 catch (IllegalStateException x)
049 {
050 //
051 }
052 }
053
054 @Test public void _testUTF32LE() throws Exception
055 {
056 test("UTF-32LE.ini", "UTF-32LE");
057 }
058
059 @Test public void _testUTF32LE_BOM() throws Exception
060 {
061 test("UTF-32LE-BOM.ini", null);
062 test("UTF-32LE-BOM.ini", "UTF-8");
063 test("UTF-32LE-BOM.ini", "UTF-16");
064 }
065
066 @Test public void _testUTF32LE_fail() throws Exception
067 {
068 try
069 {
070 test("UTF-32LE.ini", "ISO-8859-1");
071 missing(IllegalStateException.class);
072 }
073 catch (IllegalStateException x)
074 {
075 //
076 }
077 }
078
079 @Test public void t_e_s_tUTF16BE_fail() throws Exception
080 {
081 try
082 {
083 test("UTF-16BE.ini", "ISO-8859-1");
084 missing(IllegalStateException.class);
085 }
086 catch (IllegalStateException x)
087 {
088 //
089 }
090 }
091
092 @Test public void t_e_s_tUTF16LE_fail() throws Exception
093 {
094 try
095 {
096 test("UTF-16LE.ini", "ISO-8859-1");
097 missing(IllegalStateException.class);
098 }
099 catch (IllegalStateException x)
100 {
101 //
102 }
103 }
104
105 @Test public void testUTF16BE() throws Exception
106 {
107 test("UTF-16BE.ini", "UTF-16BE");
108 }
109
110 @Test public void testUTF16BE_BOM() throws Exception
111 {
112 test("UTF-16BE-BOM.ini", null);
113 test("UTF-16BE-BOM.ini", "UTF-8");
114 test("UTF-16BE-BOM.ini", "UTF-16");
115 }
116
117 @Test public void testUTF16LE() throws Exception
118 {
119 test("UTF-16LE.ini", "UTF-16LE");
120 }
121
122 @Test public void testUTF16LE_BOM() throws Exception
123 {
124 test("UTF-16LE-BOM.ini", null);
125 test("UTF-16LE-BOM.ini", "UTF-8");
126 test("UTF-16LE-BOM.ini", "UTF-16");
127 }
128
129 @Test public void testUTF8() throws Exception
130 {
131 test("UTF-8.ini", null);
132 test("UTF-8.ini", "UTF-8");
133 }
134
135 @Test public void testUTF8_BOM() throws Exception
136 {
137 test("UTF-8-BOM.ini", null);
138 test("UTF-8-BOM.ini", "UTF-8");
139 test("UTF-8-BOM.ini", "UTF-16");
140 }
141
142 @Test public void testUTF8_fail() throws Exception
143 {
144 try
145 {
146 test("UTF-8.ini", "UTF-16");
147 missing(InvalidFileFormatException.class);
148 }
149 catch (InvalidFileFormatException x)
150 {
151 //
152 }
153 }
154
155 private UnicodeInputStreamReader instantiate(String filename, String defaultEncoding)
156 {
157 Charset charset = (defaultEncoding == null) ? Charset.defaultCharset() : Charset.forName(defaultEncoding);
158
159 return new UnicodeInputStreamReader(getClass().getResourceAsStream(filename), charset);
160 }
161
162 private void test(String filename, String defaultEncoding) throws Exception
163 {
164 Charset charset = (defaultEncoding == null) ? Config.DEFAULT_FILE_ENCODING : Charset.forName(defaultEncoding);
165 UnicodeInputStreamReader reader = new UnicodeInputStreamReader(getClass().getResourceAsStream(filename), charset);
166 Ini ini = new Ini();
167
168 ini.setConfig(Config.getGlobal().clone());
169 ini.getConfig().setFileEncoding(charset);
170 ini.load(reader);
171 Ini.Section sec = ini.get("section");
172
173 if (sec == null)
174 {
175 throw new IllegalStateException("Missing section: section");
176 }
177
178 if (!"value".equals(sec.get("option")))
179 {
180 throw new IllegalStateException("Missing option: option");
181 }
182 }
183 }