/*
* Copyright 2011 <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.ocpsoft.rewrite.util;
import org.junit.Assert;
import org.junit.Test;
import org.ocpsoft.rewrite.util.ParseTools.CaptureType;
import org.ocpsoft.rewrite.util.ParseTools.CapturingGroup;
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public class ParseToolsTest
{
@Test
public void testBalancedCapture()
{
CapturingGroup group = ParseTools.balancedCapture("/foo/{bar}/cab".toCharArray(), 5, 12, CaptureType.BRACE);
Assert.assertEquals(9, group.getEnd());
Assert.assertArrayEquals("bar".toCharArray(), group.getCaptured());
group = ParseTools.balancedCapture("/foo/{{a}}/cab".toCharArray(), 5, 12, CaptureType.BRACE);
Assert.assertEquals(9, group.getEnd());
Assert.assertArrayEquals("{a}".toCharArray(), group.getCaptured());
group = ParseTools.balancedCapture("/foo/{{a}}/cab".toCharArray(), 0, 12, CaptureType.REGEX);
Assert.assertEquals(4, group.getEnd());
Assert.assertArrayEquals("foo".toCharArray(), group.getCaptured());
}
@Test(expected = IllegalArgumentException.class)
public void testBalancedThrowsExceptionIfBeginCharIsEscaped()
{
ParseTools.balancedCapture("/foo/\\{{a}}/cab".toCharArray(), 6, 12, CaptureType.BRACE);
}
@Test(expected = IllegalArgumentException.class)
public void testBalancedThrowsExceptionIfBeginCharIsEscaped2()
{
ParseTools.balancedCapture("/foo/\\\\\\{{a}}/cab".toCharArray(), 6, 12, CaptureType.BRACE);
}
@Test
public void testBalancedDoesNotThrowExceptionIfBeginCharIsNotEscaped()
{
ParseTools.balancedCapture("/foo/\\\\{a}/cab".toCharArray(), 7, 13, CaptureType.BRACE);
}
@Test
public void testBalancedDoesNotThrowExceptionIfBeginCharIsNotEscaped2()
{
ParseTools.balancedCapture("/foo/\\\\\\\\{a}/cab".toCharArray(), 9, 15, CaptureType.BRACE);
}
@Test
public void testBalancedDoesNotThrowExceptionIfBeginCharIsNotEscaped3()
{
ParseTools.balancedCapture("/foo/\\\\{{a}}/cab".toCharArray(), 7, 13, CaptureType.BRACE);
}
@Test
public void testBalancedCaptureIgnoresEscapedTerminations()
{
CapturingGroup group = ParseTools.balancedCapture("/foo/{bar\\}}/cab".toCharArray(), 5, 12, CaptureType.BRACE);
Assert.assertEquals(11, group.getEnd());
Assert.assertArrayEquals("bar\\}".toCharArray(), group.getCaptured());
}
@Test
public void testBalancedCaptureIgnoresEscapedNestedBeginChars()
{
CapturingGroup group = ParseTools.balancedCapture("/foo/{\\{a}}/cab".toCharArray(), 5, 12, CaptureType.BRACE);
Assert.assertEquals(9, group.getEnd());
Assert.assertArrayEquals("\\{a".toCharArray(), group.getCaptured());
}
@Test
public void testBalancedCaptureReturnsEmptyForEmptyCapture() throws Exception
{
CapturingGroup group = ParseTools.balancedCapture("/foo/{}/cab".toCharArray(), 5, 8, CaptureType.BRACE);
Assert.assertEquals(6, group.getEnd());
Assert.assertArrayEquals("".toCharArray(), group.getCaptured());
}
@Test
public void testIsEscapedReturnsTrueWhenCharacterIsEscaped() throws Exception
{
Assert.assertTrue(ParseTools.isEscaped("/foo{bar\\}}".toCharArray(), 9));
}
@Test
public void testIsEscapedReturnsTrueWhenSecondCharacterIsEscaped() throws Exception
{
Assert.assertTrue(ParseTools.isEscaped("\\{".toCharArray(), 1));
}
@Test
public void testIsEscapedReturnsFalseWhenCharacterIsDoubleEscaped() throws Exception
{
Assert.assertFalse(ParseTools.isEscaped("/foo{bar\\\\}}".toCharArray(), 10));
}
@Test
public void testIsEscapedReturnsTrueWhenCharacterIsTripleEscaped() throws Exception
{
Assert.assertFalse(ParseTools.isEscaped("/foo{bar\\\\\\}}".toCharArray(), 11));
}
@Test
public void testIsEscapedReturnsFalseWhenCharacterIsQuadrupleEscaped() throws Exception
{
Assert.assertFalse(ParseTools.isEscaped("/foo{bar\\\\\\\\}}".toCharArray(), 12));
}
@Test
public void testBalancedCaptureNested1()
{
CapturingGroup group = ParseTools.balancedCapture("(one(two)(three(four(five))))".toCharArray(), 0, 28,
CaptureType.PAREN);
Assert.assertEquals(28, group.getEnd());
Assert.assertArrayEquals("one(two)(three(four(five)))".toCharArray(), group.getCaptured());
}
@Test
public void testBalancedCaptureNested2()
{
CapturingGroup group = ParseTools.balancedCapture("(one(two)(three(four(five))))".toCharArray(), 4, 28,
CaptureType.PAREN);
Assert.assertEquals(8, group.getEnd());
Assert.assertArrayEquals("two".toCharArray(), group.getCaptured());
}
@Test
public void testBalancedCaptureNested3()
{
CapturingGroup group = ParseTools.balancedCapture("(one(two)(three(four(five))))".toCharArray(), 9, 28,
CaptureType.PAREN);
Assert.assertEquals(27, group.getEnd());
Assert.assertArrayEquals("three(four(five))".toCharArray(), group.getCaptured());
}
@Test
public void testBalancedCaptureNested4()
{
CapturingGroup group = ParseTools.balancedCapture("(one(two)(three(four(five))))".toCharArray(), 15, 28,
CaptureType.PAREN);
Assert.assertEquals(26, group.getEnd());
Assert.assertArrayEquals("four(five)".toCharArray(), group.getCaptured());
}
@Test
public void testBalancedCaptureNested5()
{
CapturingGroup group = ParseTools.balancedCapture("(one(two)(three(four(five))))".toCharArray(), 20, 28,
CaptureType.PAREN);
Assert.assertEquals(25, group.getEnd());
Assert.assertArrayEquals("five".toCharArray(), group.getCaptured());
}
}