View Javadoc

1   /*
2    * Copyright 2005,2009 Ivan SZKIBA
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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 }