1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.ini4j.spi;
17
18 import org.easymock.EasyMock;
19
20 import org.ini4j.Config;
21 import org.ini4j.Ini4jCase;
22 import org.ini4j.InvalidFileFormatException;
23
24 import org.ini4j.sample.Dwarf;
25 import org.ini4j.sample.Dwarfs;
26
27 import org.ini4j.test.DwarfsData;
28 import org.ini4j.test.Helper;
29
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertSame;
32
33 import org.junit.Test;
34
35 import java.io.BufferedReader;
36 import java.io.ByteArrayInputStream;
37 import java.io.ByteArrayOutputStream;
38 import java.io.InputStreamReader;
39 import java.io.OutputStreamWriter;
40 import java.io.PrintWriter;
41 import java.io.Reader;
42 import java.io.StringReader;
43
44 public class OptionsParserTest extends Ini4jCase
45 {
46 private static final String CFG_EMPTY_OPTION = "option\n";
47 private static final String NONAME = "=value\n";
48 private static final String OPTION = "option";
49 private static final String UNICODE_STRING = "áÁéÉíÍóÓöÖőŐúÚüÜűŰ-ÄÖÜäöü";
50
51 @Test public void testBad() throws Exception
52 {
53 OptionsParser parser = new OptionsParser();
54 OptionsHandler handler = EasyMock.createNiceMock(OptionsHandler.class);
55
56 try
57 {
58 parser.parse(new ByteArrayInputStream(NONAME.getBytes()), handler);
59 missing(InvalidFileFormatException.class);
60 }
61 catch (InvalidFileFormatException x)
62 {
63
64 }
65 }
66
67 @Test public void testEmptyOption() throws Exception
68 {
69 OptionsParser parser = new OptionsParser();
70 OptionsHandler handler = EasyMock.createMock(OptionsHandler.class);
71
72 handler.startOptions();
73 handler.handleOption(OPTION, null);
74 handler.endOptions();
75 EasyMock.replay(handler);
76 Config cfg = new Config();
77
78 cfg.setEmptyOption(true);
79 parser.setConfig(cfg);
80 parser.parse(new StringReader(CFG_EMPTY_OPTION), handler);
81 EasyMock.verify(handler);
82 }
83
84 @Test public void testNewInstance() throws Exception
85 {
86 Config cfg = new Config();
87 OptionsParser parser = OptionsParser.newInstance();
88
89 assertEquals(OptionsParser.class, parser.getClass());
90 parser = OptionsParser.newInstance(cfg);
91 assertEquals(OptionsParser.class, parser.getClass());
92 assertSame(cfg, parser.getConfig());
93 }
94
95 @Test public void testParse() throws Exception
96 {
97 OptionsParser parser = new OptionsParser();
98 OptionsHandler handler = EasyMock.createMock(OptionsHandler.class);
99 Dwarf dwarf;
100 String prefix;
101
102 handler.startOptions();
103 handler.handleComment(Helper.HEADER_COMMENT);
104 handler.handleComment((String) EasyMock.anyObject());
105 handler.handleComment((String) EasyMock.anyObject());
106 dwarf = DwarfsData.dopey;
107 handler.handleOption(Dwarf.PROP_WEIGHT, DwarfsData.OPT_DOPEY_WEIGHT);
108 handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.OPT_DOPEY_HEIGHT);
109 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
110 handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
111 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
112 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "11");
113 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "33");
114 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "55");
115
116 handler.handleComment((String) EasyMock.anyObject());
117
118
119 handler.handleComment(" " + Dwarfs.PROP_BASHFUL);
120 dwarf = DwarfsData.bashful;
121 prefix = Dwarfs.PROP_BASHFUL + ".";
122
123 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
124 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
125 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
126 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
127 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
128 handler.handleComment(" " + Dwarfs.PROP_DOC);
129 dwarf = DwarfsData.doc;
130 prefix = Dwarfs.PROP_DOC + ".";
131
132 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
133 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
134 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
135 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
136 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
137 handler.handleComment(" " + Dwarfs.PROP_DOPEY);
138 dwarf = DwarfsData.dopey;
139 prefix = Dwarfs.PROP_DOPEY + ".";
140
141 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, DwarfsData.OPT_DOPEY_WEIGHT);
142 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_DOPEY_HEIGHT);
143 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
144 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
145 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
146 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
147 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
148 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
149 handler.handleComment(" " + Dwarfs.PROP_GRUMPY);
150 dwarf = DwarfsData.grumpy;
151 prefix = Dwarfs.PROP_GRUMPY + ".";
152
153 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
154 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_GRUMPY_HEIGHT);
155 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
156 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
157 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
158 handler.handleComment(" " + Dwarfs.PROP_HAPPY);
159 dwarf = DwarfsData.happy;
160 prefix = Dwarfs.PROP_HAPPY + ".";
161
162 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
163 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
164 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
165 handler.handleOption(EasyMock.eq(prefix + Dwarf.PROP_HOME_PAGE), (String) EasyMock.anyObject());
166 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
167 handler.handleComment(" " + Dwarfs.PROP_SLEEPY);
168 dwarf = DwarfsData.sleepy;
169 prefix = Dwarfs.PROP_SLEEPY + ".";
170
171 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
172 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_SLEEPY_HEIGHT);
173 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
174 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
175 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
176 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
177 handler.handleComment(" " + Dwarfs.PROP_SNEEZY);
178 dwarf = DwarfsData.sneezy;
179 prefix = Dwarfs.PROP_SNEEZY + ".";
180
181 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
182 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
183 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
184 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, DwarfsData.OPT_SNEEZY_HOME_PAGE);
185 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
186 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
187 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
188 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
189 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[3]));
190 handler.handleComment(" " + Dwarfs.PROP_HAPPY + " again");
191 dwarf = DwarfsData.happy;
192 prefix = Dwarfs.PROP_HAPPY + ".";
193
194 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
195 handler.handleComment("}");
196 handler.endOptions();
197
198
199 EasyMock.replay(handler);
200 parser.parse(Helper.getResourceURL(Helper.DWARFS_OPT), handler);
201 EasyMock.verify(handler);
202 }
203
204 @Test public void testUnicode() throws Exception
205 {
206 ByteArrayOutputStream out = new ByteArrayOutputStream();
207 OptionsFormatter formatter = new OptionsFormatter();
208
209 formatter.setOutput(new PrintWriter(new OutputStreamWriter(out)));
210 formatter.handleOption(OPTION, UNICODE_STRING);
211 formatter.getOutput().flush();
212 Reader in = new InputStreamReader(new ByteArrayInputStream(out.toByteArray()));
213 String line = new BufferedReader(in).readLine();
214
215 assertEquals(OPTION + " = " + UNICODE_STRING, EscapeTool.getInstance().unescape(line));
216 }
217 }