blob: bf47895992901707610682595d58a5cd9b386bee [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.websocket.server.pathmap;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import org.junit.Test;
public class RegexPathSpecTest
{
public static void assertMatches(PathSpec spec, String path)
{
String msg = String.format("Spec(\"%s\").matches(\"%s\")",spec.getPathSpec(),path);
assertThat(msg,spec.matches(path),is(true));
}
public static void assertNotMatches(PathSpec spec, String path)
{
String msg = String.format("!Spec(\"%s\").matches(\"%s\")",spec.getPathSpec(),path);
assertThat(msg,spec.matches(path),is(false));
}
@Test
public void testExactSpec()
{
RegexPathSpec spec = new RegexPathSpec("^/a$");
assertEquals("Spec.pathSpec","^/a$",spec.getPathSpec());
assertEquals("Spec.pattern","^/a$",spec.getPattern().pattern());
assertEquals("Spec.pathDepth",1,spec.getPathDepth());
assertEquals("Spec.group",PathSpecGroup.EXACT,spec.group);
assertMatches(spec,"/a");
assertNotMatches(spec,"/aa");
assertNotMatches(spec,"/a/");
}
@Test
public void testMiddleSpec()
{
RegexPathSpec spec = new RegexPathSpec("^/rest/([^/]*)/list$");
assertEquals("Spec.pathSpec","^/rest/([^/]*)/list$",spec.getPathSpec());
assertEquals("Spec.pattern","^/rest/([^/]*)/list$",spec.getPattern().pattern());
assertEquals("Spec.pathDepth",3,spec.getPathDepth());
assertEquals("Spec.group",PathSpecGroup.MIDDLE_GLOB,spec.group);
assertMatches(spec,"/rest/api/list");
assertMatches(spec,"/rest/1.0/list");
assertMatches(spec,"/rest/2.0/list");
assertMatches(spec,"/rest/accounts/list");
assertNotMatches(spec,"/a");
assertNotMatches(spec,"/aa");
assertNotMatches(spec,"/aa/bb");
assertNotMatches(spec,"/rest/admin/delete");
assertNotMatches(spec,"/rest/list");
}
@Test
public void testMiddleSpecNoGrouping()
{
RegexPathSpec spec = new RegexPathSpec("^/rest/[^/]+/list$");
assertEquals("Spec.pathSpec","^/rest/[^/]+/list$",spec.getPathSpec());
assertEquals("Spec.pattern","^/rest/[^/]+/list$",spec.getPattern().pattern());
assertEquals("Spec.pathDepth",3,spec.getPathDepth());
assertEquals("Spec.group",PathSpecGroup.MIDDLE_GLOB,spec.group);
assertMatches(spec,"/rest/api/list");
assertMatches(spec,"/rest/1.0/list");
assertMatches(spec,"/rest/2.0/list");
assertMatches(spec,"/rest/accounts/list");
assertNotMatches(spec,"/a");
assertNotMatches(spec,"/aa");
assertNotMatches(spec,"/aa/bb");
assertNotMatches(spec,"/rest/admin/delete");
assertNotMatches(spec,"/rest/list");
}
@Test
public void testPrefixSpec()
{
RegexPathSpec spec = new RegexPathSpec("^/a/(.*)$");
assertEquals("Spec.pathSpec","^/a/(.*)$",spec.getPathSpec());
assertEquals("Spec.pattern","^/a/(.*)$",spec.getPattern().pattern());
assertEquals("Spec.pathDepth",2,spec.getPathDepth());
assertEquals("Spec.group",PathSpecGroup.PREFIX_GLOB,spec.group);
assertMatches(spec,"/a/");
assertMatches(spec,"/a/b");
assertMatches(spec,"/a/b/c/d/e");
assertNotMatches(spec,"/a");
assertNotMatches(spec,"/aa");
assertNotMatches(spec,"/aa/bb");
}
@Test
public void testSuffixSpec()
{
RegexPathSpec spec = new RegexPathSpec("^(.*).do$");
assertEquals("Spec.pathSpec","^(.*).do$",spec.getPathSpec());
assertEquals("Spec.pattern","^(.*).do$",spec.getPattern().pattern());
assertEquals("Spec.pathDepth",0,spec.getPathDepth());
assertEquals("Spec.group",PathSpecGroup.SUFFIX_GLOB,spec.group);
assertMatches(spec,"/a.do");
assertMatches(spec,"/a/b/c.do");
assertMatches(spec,"/abcde.do");
assertMatches(spec,"/abc/efg.do");
assertNotMatches(spec,"/a");
assertNotMatches(spec,"/aa");
assertNotMatches(spec,"/aa/bb");
assertNotMatches(spec,"/aa/bb.do/more");
}
}