blob: f7cf8038a7daf634e120228b8cfd8564af03aa3e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.struts2.util;
import junit.framework.TestCase;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
public class RegexPatternMatcherTest extends TestCase {
private RegexPatternMatcher matcher = new RegexPatternMatcher();
public void testIsLiteral() {
assertTrue(matcher.isLiteral(null));
assertTrue(matcher.isLiteral(""));
assertTrue(matcher.isLiteral(" \t"));
assertTrue(matcher.isLiteral("something"));
assertFalse(matcher.isLiteral("{"));
}
public void testCompile0() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/some/{test}");
assertNotNull(expr);
//params
Map<Integer, String> params = expr.getParams();
assertNotNull(params);
assertEquals(1, params.size());
assertEquals("test", params.get(1));
//pattern
Pattern pattern = expr.getPattern();
assertNotNull(pattern);
assertEquals("/some/(.*?)", pattern.pattern());
}
public void testCompile1() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/{test}/some/{test1}/");
assertNotNull(expr);
//params
Map<Integer, String> params = expr.getParams();
assertNotNull(params);
assertEquals(2, params.size());
assertEquals("test", params.get(1));
assertEquals("test1", params.get(2));
//pattern
Pattern pattern = expr.getPattern();
assertNotNull(pattern);
assertEquals("/(.*?)/some/(.*?)/", pattern.pattern());
}
public void testCompileNamedParams0() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/some/{test:.+}");
assertNotNull(expr);
//params
Map<Integer, String> params = expr.getParams();
assertNotNull(params);
assertEquals(1, params.size());
assertEquals("test", params.get(1));
//pattern
Pattern pattern = expr.getPattern();
assertNotNull(pattern);
assertEquals("/some/(.+)", pattern.pattern());
}
public void testCompileNamedParams1() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/some/{test1:.+}/{test2:.*}");
assertNotNull(expr);
//params
Map<Integer, String> params = expr.getParams();
assertNotNull(params);
assertEquals(2, params.size());
assertEquals("test1", params.get(1));
assertEquals("test2", params.get(2));
//pattern
Pattern pattern = expr.getPattern();
assertNotNull(pattern);
assertEquals("/some/(.+)/(.*)", pattern.pattern());
}
public void testMatch0() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/some/{test}");
Map<String, String> values = new HashMap<String, String>();
assertTrue(matcher.match(values, "/some/val", expr));
assertEquals(3, values.size());
assertEquals("val", values.get("test"));
assertEquals("val", values.get("1"));
assertEquals("/some/val", values.get("0"));
}
public void testMatch1() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/some/{test0}/some/{test1}");
Map<String, String> values = new HashMap<String, String>();
assertTrue(matcher.match(values, "/some/val0/some/val1", expr));
assertEquals(5, values.size());
assertEquals("val0", values.get("test0"));
assertEquals("val1", values.get("test1"));
assertEquals("val0", values.get("1"));
assertEquals("val1", values.get("2"));
assertEquals("/some/val0/some/val1", values.get("0"));
}
public void testMatch2() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/some/{test0}/some/{test1}/.*");
Map<String, String> values = new HashMap<String, String>();
assertTrue(matcher.match(values, "/some/val0/some/val1/buaaa", expr));
assertEquals(5, values.size());
assertEquals("val0", values.get("test0"));
assertEquals("val1", values.get("test1"));
assertEquals("val0", values.get("1"));
assertEquals("val1", values.get("2"));
assertEquals("/some/val0/some/val1/buaaa", values.get("0"));
}
/**
* See WW-3747
*/
public void testWW_3747() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/{type}/{author:.+}/list");
Map<String, String> values = new HashMap<String, String>();
assertTrue(matcher.match(values, "/philosophy/AynRand/list", expr));
assertEquals(5, values.size());
assertEquals("philosophy", values.get("type"));
assertEquals("AynRand", values.get("author"));
assertEquals("/philosophy/AynRand/list", values.get("0"));
}
/**
* See WW-3747
*/
public void testWW_3747_2() {
RegexPatternMatcherExpression expr = matcher.compilePattern("/event/modify/{action}/{eventId:[0-9]+}");
Map<String, String> values = new HashMap<String, String>();
assertTrue(matcher.match(values, "/event/modify/delete/1234", expr));
assertEquals(5, values.size());
assertEquals("delete", values.get("action"));
assertEquals("1234", values.get("eventId"));
assertEquals("/event/modify/delete/1234", values.get("0"));
}
public void testCompileBad0() {
try {
matcher.compilePattern("/{test/some");
fail("Should have failed");
} catch (Exception e) {
//ok
}
}
public void testCompileBad1() {
try {
matcher.compilePattern("/test/{p:}");
fail("Should have failed");
} catch (Exception e) {
//ok
}
}
}