/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.turbine.auth;
import static org.junit.Assert.*;
import com.alibaba.citrus.turbine.auth.impl.AuthPattern;
import com.alibaba.citrus.turbine.auth.impl.AuthTargetPattern;
import org.junit.Test;
public class AuthTargetPatternTests {
private AuthTargetPattern pattern;
@Test(expected = IllegalArgumentException.class)
public void create_noname1() {
new AuthTargetPattern(null);
}
@Test(expected = IllegalArgumentException.class)
public void create_noname2() {
new AuthTargetPattern(" ");
}
@Test
public void getPatternName() {
pattern = new AuthTargetPattern("test");
assertEquals("/test", pattern.getPatternName());
pattern = new AuthTargetPattern("/test");
assertEquals("/test", pattern.getPatternName());
}
@Test
public void getPattern() {
// relative path
pattern = new AuthTargetPattern("test");
assertMatches(false, "/a/b/test");
assertMatches(false, "/a/test/");
assertMatches(false, "/a/test/b");
assertMatches(true, "/test");
assertMatches(true, "/test/");
assertMatches(true, "/test/b");
assertMatches(false, "/atest");
assertMatches(false, "/testb");
assertMatches(false, "/atestb");
assertMatches(false, "test");
assertMatches(false, "test/");
// abs path
pattern = new AuthTargetPattern("/t/est");
assertMatches(false, "/a/b/t/est");
assertMatches(false, "/a/t/est/");
assertMatches(false, "/a/t/est/b");
assertMatches(true, "/t/est");
assertMatches(true, "/t/est/");
assertMatches(true, "/t/est/b");
assertMatches(false, "/at/est");
assertMatches(false, "/t/estb");
assertMatches(false, "/at/estb");
assertMatches(false, "t/est");
assertMatches(false, "t/est/");
// root path
pattern = new AuthTargetPattern("/");
assertMatches(true, null);
assertMatches(true, " ");
assertMatches(true, " /");
}
private void assertMatches(boolean matches, String s) {
assertEquals(s, matches, pattern.matcher(s).find());
if (s != null) {
assertEquals(s, matches, pattern.getPattern().matcher(s).find());
}
}
@Test
public void equalsAndHashCode() {
AuthPattern p1 = new AuthTargetPattern("test");
AuthPattern p2 = new AuthTargetPattern("/test");
AuthPattern p3 = new AuthTargetPattern("/*/test");
AuthPattern p4 = new AuthTargetPattern("/");
assertEquals(p1, p1);
assertEquals(p1, p2);
assertFalse(p1.equals(p3));
assertFalse(p1.equals(null));
assertFalse(p1.equals("test"));
assertEquals(p1.hashCode(), p2.hashCode());
assertFalse(p1.hashCode() == p3.hashCode());
assertFalse(p4.hashCode() == p3.hashCode());
}
@Test
public void toString_() {
assertEquals("/test", new AuthTargetPattern(" test ").toString());
}
}