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.Ini4jCase;
019    
020    import static org.junit.Assert.assertEquals;
021    
022    import org.junit.Before;
023    import org.junit.Test;
024    
025    public class WinEscapeToolTest extends Ini4jCase
026    {
027        public static final String VALUE1 = "simple";
028        public static final String ESCAPE1 = "simple";
029        public static final String VALUE2 = "Iv??n";
030        public static final String ESCAPE2 = "Iv\\xe1n";
031        public static final String VALUE3 = "1\t2\n3\f4\b5\r6";
032        public static final String ESCAPE3 = "1\\t2\\n3\\f4\\b5\\r6";
033        public static final String VALUE4 = "Iv\u0017n";
034        public static final String ESCAPE4 = "Iv\\x17n";
035        public static final String VALUE5 = "??rv??ztrt??k??rf??r??g??p";
036        public static final String ESCAPE5 = "\\xc1rv\\xedztrt\\xfck\\xf6rf\\xfar\\xf3g\\xe9p";
037        private static final String INVALID_HEX = "\\x1_";
038        private static final String INVALID_OCT = "\\o19_";
039        protected WinEscapeTool instance;
040    
041        @Before @Override public void setUp() throws Exception
042        {
043            super.setUp();
044            instance = WinEscapeTool.getInstance();
045        }
046    
047        @Test public void testEscape() throws Exception
048        {
049            assertEquals(ESCAPE1, instance.escape(VALUE1));
050            assertEquals(ESCAPE2, instance.escape(VALUE2));
051            assertEquals(ESCAPE3, instance.escape(VALUE3));
052            assertEquals(ESCAPE4, instance.escape(VALUE4));
053            assertEquals(ESCAPE5, instance.escape(VALUE5));
054        }
055    
056        @Test public void testInvalidHex()
057        {
058            try
059            {
060                instance.unescape(INVALID_HEX);
061                missing(IllegalArgumentException.class);
062            }
063            catch (IllegalArgumentException x)
064            {
065                //
066            }
067        }
068    
069        @Test public void testInvalidOctal()
070        {
071            try
072            {
073                instance.unescape(INVALID_OCT);
074                missing(IllegalArgumentException.class);
075            }
076            catch (IllegalArgumentException x)
077            {
078                //
079            }
080        }
081    
082        @Test public void testSingleton() throws Exception
083        {
084            assertEquals(WinEscapeTool.class, WinEscapeTool.getInstance().getClass());
085        }
086    
087        @Test public void testUnescape() throws Exception
088        {
089            assertEquals(VALUE1, instance.unescape(ESCAPE1));
090            assertEquals(VALUE2, instance.unescape(ESCAPE2));
091            assertEquals(VALUE3, instance.unescape(ESCAPE3));
092            assertEquals(VALUE4, instance.unescape(ESCAPE4));
093            assertEquals(VALUE5, instance.unescape(ESCAPE5));
094            assertEquals("=", instance.unescape("\\="));
095            assertEquals("xAx", instance.unescape("x\\o101x"));
096        }
097    }