1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.io;
18  
19  import java.io.ByteArrayInputStream;
20  import java.io.ByteArrayOutputStream;
21  import java.io.File;
22  import java.io.IOException;
23  import java.io.ObjectInputStream;
24  import java.io.ObjectOutputStream;
25  
26  import junit.framework.Test;
27  import junit.framework.TestSuite;
28  import junit.textui.TestRunner;
29  
30  import org.apache.commons.io.testtools.FileBasedTestCase;
31  
32  /**
33   * This is used to test IOCase for correctness.
34   *
35   * @author Stephen Colebourne
36   * @version $Id: IOCaseTestCase.java 437567 2006-08-28 06:39:07Z bayard $
37   */
38  public class IOCaseTestCase extends FileBasedTestCase {
39  
40      private static final boolean WINDOWS = (File.separatorChar == '\\');
41  
42      public static void main(String[] args) {
43          TestRunner.run(suite());
44      }
45  
46      public static Test suite() {
47          return new TestSuite(IOCaseTestCase.class);
48      }
49  
50      public IOCaseTestCase(String name) throws IOException {
51          super(name);
52      }
53  
54      protected void setUp() throws Exception {
55  
56      }
57  
58      protected void tearDown() throws Exception {
59      }
60  
61      //-----------------------------------------------------------------------
62      public void test_forName() throws Exception {
63          assertEquals(IOCase.SENSITIVE, IOCase.forName("Sensitive"));
64          assertEquals(IOCase.INSENSITIVE, IOCase.forName("Insensitive"));
65          assertEquals(IOCase.SYSTEM, IOCase.forName("System"));
66          try {
67              IOCase.forName("Blah");
68              fail();
69          } catch (IllegalArgumentException ex) {}
70          try {
71              IOCase.forName(null);
72              fail();
73          } catch (IllegalArgumentException ex) {}
74      }
75  
76      public void test_serialization() throws Exception {
77          assertSame(IOCase.SENSITIVE, serialize(IOCase.SENSITIVE));
78          assertSame(IOCase.INSENSITIVE, serialize(IOCase.INSENSITIVE));
79          assertSame(IOCase.SYSTEM, serialize(IOCase.SYSTEM));
80      }
81  
82      public void test_getName() throws Exception {
83          assertEquals("Sensitive", IOCase.SENSITIVE.getName());
84          assertEquals("Insensitive", IOCase.INSENSITIVE.getName());
85          assertEquals("System", IOCase.SYSTEM.getName());
86      }
87  
88      public void test_toString() throws Exception {
89          assertEquals("Sensitive", IOCase.SENSITIVE.toString());
90          assertEquals("Insensitive", IOCase.INSENSITIVE.toString());
91          assertEquals("System", IOCase.SYSTEM.toString());
92      }
93  
94      public void test_isCaseSensitive() throws Exception {
95          assertEquals(true, IOCase.SENSITIVE.isCaseSensitive());
96          assertEquals(false, IOCase.INSENSITIVE.isCaseSensitive());
97          assertEquals(!WINDOWS, IOCase.SYSTEM.isCaseSensitive());
98      }
99  
100     //-----------------------------------------------------------------------
101     public void test_checkEquals_functionality() throws Exception {
102         assertEquals(false, IOCase.SENSITIVE.checkEquals("ABC", ""));
103         assertEquals(false, IOCase.SENSITIVE.checkEquals("ABC", "A"));
104         assertEquals(false, IOCase.SENSITIVE.checkEquals("ABC", "AB"));
105         assertEquals(true, IOCase.SENSITIVE.checkEquals("ABC", "ABC"));
106         assertEquals(false, IOCase.SENSITIVE.checkEquals("ABC", "BC"));
107         assertEquals(false, IOCase.SENSITIVE.checkEquals("ABC", "C"));
108         assertEquals(false, IOCase.SENSITIVE.checkEquals("ABC", "ABCD"));
109         assertEquals(false, IOCase.SENSITIVE.checkEquals("", "ABC"));
110         assertEquals(true, IOCase.SENSITIVE.checkEquals("", ""));
111         
112         try {
113             IOCase.SENSITIVE.checkEquals("ABC", null);
114             fail();
115         } catch (NullPointerException ex) {}
116         try {
117             IOCase.SENSITIVE.checkEquals(null, "ABC");
118             fail();
119         } catch (NullPointerException ex) {}
120         try {
121             IOCase.SENSITIVE.checkEquals(null, null);
122             fail();
123         } catch (NullPointerException ex) {}
124     }
125 
126     public void test_checkEquals_case() throws Exception {
127         assertEquals(true, IOCase.SENSITIVE.checkEquals("ABC", "ABC"));
128         assertEquals(false, IOCase.SENSITIVE.checkEquals("ABC", "Abc"));
129         
130         assertEquals(true, IOCase.INSENSITIVE.checkEquals("ABC", "ABC"));
131         assertEquals(true, IOCase.INSENSITIVE.checkEquals("ABC", "Abc"));
132         
133         assertEquals(true, IOCase.SYSTEM.checkEquals("ABC", "ABC"));
134         assertEquals(WINDOWS, IOCase.SYSTEM.checkEquals("ABC", "Abc"));
135     }
136 
137     //-----------------------------------------------------------------------
138     public void test_checkStartsWith_functionality() throws Exception {
139         assertEquals(true, IOCase.SENSITIVE.checkStartsWith("ABC", ""));
140         assertEquals(true, IOCase.SENSITIVE.checkStartsWith("ABC", "A"));
141         assertEquals(true, IOCase.SENSITIVE.checkStartsWith("ABC", "AB"));
142         assertEquals(true, IOCase.SENSITIVE.checkStartsWith("ABC", "ABC"));
143         assertEquals(false, IOCase.SENSITIVE.checkStartsWith("ABC", "BC"));
144         assertEquals(false, IOCase.SENSITIVE.checkStartsWith("ABC", "C"));
145         assertEquals(false, IOCase.SENSITIVE.checkStartsWith("ABC", "ABCD"));
146         assertEquals(false, IOCase.SENSITIVE.checkStartsWith("", "ABC"));
147         assertEquals(true, IOCase.SENSITIVE.checkStartsWith("", ""));
148         
149         try {
150             IOCase.SENSITIVE.checkStartsWith("ABC", null);
151             fail();
152         } catch (NullPointerException ex) {}
153         try {
154             IOCase.SENSITIVE.checkStartsWith(null, "ABC");
155             fail();
156         } catch (NullPointerException ex) {}
157         try {
158             IOCase.SENSITIVE.checkStartsWith(null, null);
159             fail();
160         } catch (NullPointerException ex) {}
161     }
162 
163     public void test_checkStartsWith_case() throws Exception {
164         assertEquals(true, IOCase.SENSITIVE.checkStartsWith("ABC", "AB"));
165         assertEquals(false, IOCase.SENSITIVE.checkStartsWith("ABC", "Ab"));
166         
167         assertEquals(true, IOCase.INSENSITIVE.checkStartsWith("ABC", "AB"));
168         assertEquals(true, IOCase.INSENSITIVE.checkStartsWith("ABC", "Ab"));
169         
170         assertEquals(true, IOCase.SYSTEM.checkStartsWith("ABC", "AB"));
171         assertEquals(WINDOWS, IOCase.SYSTEM.checkStartsWith("ABC", "Ab"));
172     }
173 
174     //-----------------------------------------------------------------------
175     public void test_checkEndsWith_functionality() throws Exception {
176         assertEquals(true, IOCase.SENSITIVE.checkEndsWith("ABC", ""));
177         assertEquals(false, IOCase.SENSITIVE.checkEndsWith("ABC", "A"));
178         assertEquals(false, IOCase.SENSITIVE.checkEndsWith("ABC", "AB"));
179         assertEquals(true, IOCase.SENSITIVE.checkEndsWith("ABC", "ABC"));
180         assertEquals(true, IOCase.SENSITIVE.checkEndsWith("ABC", "BC"));
181         assertEquals(true, IOCase.SENSITIVE.checkEndsWith("ABC", "C"));
182         assertEquals(false, IOCase.SENSITIVE.checkEndsWith("ABC", "ABCD"));
183         assertEquals(false, IOCase.SENSITIVE.checkEndsWith("", "ABC"));
184         assertEquals(true, IOCase.SENSITIVE.checkEndsWith("", ""));
185         
186         try {
187             IOCase.SENSITIVE.checkEndsWith("ABC", null);
188             fail();
189         } catch (NullPointerException ex) {}
190         try {
191             IOCase.SENSITIVE.checkEndsWith(null, "ABC");
192             fail();
193         } catch (NullPointerException ex) {}
194         try {
195             IOCase.SENSITIVE.checkEndsWith(null, null);
196             fail();
197         } catch (NullPointerException ex) {}
198     }
199 
200     public void test_checkEndsWith_case() throws Exception {
201         assertEquals(true, IOCase.SENSITIVE.checkEndsWith("ABC", "BC"));
202         assertEquals(false, IOCase.SENSITIVE.checkEndsWith("ABC", "Bc"));
203         
204         assertEquals(true, IOCase.INSENSITIVE.checkEndsWith("ABC", "BC"));
205         assertEquals(true, IOCase.INSENSITIVE.checkEndsWith("ABC", "Bc"));
206         
207         assertEquals(true, IOCase.SYSTEM.checkEndsWith("ABC", "BC"));
208         assertEquals(WINDOWS, IOCase.SYSTEM.checkEndsWith("ABC", "Bc"));
209     }
210 
211     //-----------------------------------------------------------------------
212     public void test_checkRegionMatches_functionality() throws Exception {
213         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, ""));
214         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "A"));
215         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB"));
216         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABC"));
217         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "BC"));
218         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "C"));
219         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "ABCD"));
220         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("", 0, "ABC"));
221         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("", 0, ""));
222         
223         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("ABC", 1, ""));
224         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "A"));
225         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "AB"));
226         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABC"));
227         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "BC"));
228         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "C"));
229         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 1, "ABCD"));
230         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("", 1, "ABC"));
231         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("", 1, ""));
232         
233         try {
234             IOCase.SENSITIVE.checkRegionMatches("ABC", 0, null);
235             fail();
236         } catch (NullPointerException ex) {}
237         try {
238             IOCase.SENSITIVE.checkRegionMatches(null, 0, "ABC");
239             fail();
240         } catch (NullPointerException ex) {}
241         try {
242             IOCase.SENSITIVE.checkRegionMatches(null, 0, null);
243             fail();
244         } catch (NullPointerException ex) {}
245         try {
246             IOCase.SENSITIVE.checkRegionMatches("ABC", 1, null);
247             fail();
248         } catch (NullPointerException ex) {}
249         try {
250             IOCase.SENSITIVE.checkRegionMatches(null, 1, "ABC");
251             fail();
252         } catch (NullPointerException ex) {}
253         try {
254             IOCase.SENSITIVE.checkRegionMatches(null, 1, null);
255             fail();
256         } catch (NullPointerException ex) {}
257     }
258 
259     public void test_checkRegionMatches_case() throws Exception {
260         assertEquals(true, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "AB"));
261         assertEquals(false, IOCase.SENSITIVE.checkRegionMatches("ABC", 0, "Ab"));
262         
263         assertEquals(true, IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "AB"));
264         assertEquals(true, IOCase.INSENSITIVE.checkRegionMatches("ABC", 0, "Ab"));
265         
266         assertEquals(true, IOCase.SYSTEM.checkRegionMatches("ABC", 0, "AB"));
267         assertEquals(WINDOWS, IOCase.SYSTEM.checkRegionMatches("ABC", 0, "Ab"));
268     }
269 
270     //-----------------------------------------------------------------------
271     private IOCase serialize(IOCase value) throws Exception {
272         ByteArrayOutputStream buf = new ByteArrayOutputStream();
273         ObjectOutputStream out = new ObjectOutputStream(buf);
274         out.writeObject(value);
275         out.flush();
276         out.close();
277 
278         ByteArrayInputStream bufin = new ByteArrayInputStream(buf.toByteArray());
279         ObjectInputStream in = new ObjectInputStream(bufin);
280         return (IOCase) in.readObject();
281     }
282 
283 }