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 */
016package org.ini4j.spi;
017
018import org.ini4j.Ini4jCase;
019
020import static org.junit.Assert.assertEquals;
021import static org.junit.Assert.assertNull;
022
023import org.junit.Before;
024import org.junit.Test;
025
026public class EscapeToolTest extends Ini4jCase
027{
028    private static final String VALUE1 = "simple";
029    private static final String ESCAPE1 = "simple";
030    private static final String VALUE2 = "Iv\ufffdn";
031    private static final String ESCAPE2 = "Iv\\ufffdn";
032    private static final String VALUE3 = "1\t2\n3\f4\b5\r6";
033    private static final String ESCAPE3 = "1\\t2\\n3\\f4\\b5\\r6";
034    private static final String VALUE4 = "Iv\u0017n";
035    private static final String ESCAPE4 = "Iv\\u0017n";
036    private static final String INVALID_UNICODE = "\\u98x";
037    private static final String UNQUOTED1 = "simple";
038    private static final String QUOTED1 = "\"simple\"";
039    private static final String UNQUOTED2 = "no\\csak\"";
040    private static final String QUOTED2 = "\"no\\\\csak\\\"\"";
041    private static final String UNQUOTED3 = "";
042    private static final String QUOTED3 = "";
043    protected EscapeTool instance;
044
045    @Before @Override public void setUp() throws Exception
046    {
047        super.setUp();
048        instance = EscapeTool.getInstance();
049    }
050
051    @Test public void testEscape() throws Exception
052    {
053        assertEquals(ESCAPE1, instance.escape(VALUE1));
054        assertEquals(ESCAPE2, instance.escape(VALUE2));
055        assertEquals(ESCAPE3, instance.escape(VALUE3));
056        assertEquals(ESCAPE4, instance.escape(VALUE4));
057    }
058
059    @Test public void testInvalidUnicode()
060    {
061        try
062        {
063            instance.unescape(INVALID_UNICODE);
064            missing(IllegalArgumentException.class);
065        }
066        catch (IllegalArgumentException x)
067        {
068            //
069        }
070    }
071
072    @Test public void testQuote() throws Exception
073    {
074        assertEquals(QUOTED1, instance.quote(UNQUOTED1));
075        assertEquals(QUOTED2, instance.quote(UNQUOTED2));
076        assertEquals(QUOTED3, instance.quote(UNQUOTED3));
077        assertNull(instance.quote(null));
078    }
079
080    @Test public void testSingleton() throws Exception
081    {
082        assertEquals(EscapeTool.class, EscapeTool.getInstance().getClass());
083    }
084
085    @SuppressWarnings("empty-statement")
086    @Test public void testUnescape() throws Exception
087    {
088        assertEquals(VALUE1, instance.unescape(ESCAPE1));
089        assertEquals(VALUE2, instance.unescape(ESCAPE2));
090        assertEquals(VALUE3, instance.unescape(ESCAPE3));
091        assertEquals(VALUE4, instance.unescape(ESCAPE4));
092        assertEquals("=", instance.unescape("\\="));
093    }
094}