/******************************************************************************* * 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.wink.common.internal; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.PathSegment; import junit.framework.TestCase; public class PathSegmentImplTest extends TestCase { private static String PATH_CLEAN = "cleanpath"; private static String PATH_WITH_ONE_MATRIX = "matrix;a=a1"; private static String PATH_WITH_TWO_MATRIX = "matrix;a=a1;b=b1"; private static String PATH_WITH_TWO_MATRIX_VALUES = "matrix;a=a1;a=a2;b=b1"; public void testPathSegmentClean() { PathSegment segment = new PathSegmentImpl(PATH_CLEAN); assertEquals(PATH_CLEAN, segment.getPath()); MultivaluedMap<String, String> matrixParameters = segment.getMatrixParameters(); assertNotNull(matrixParameters); assertEquals(0, matrixParameters.size()); } public void testPathSegmentWithOneMatrix() { PathSegment segment = new PathSegmentImpl(PATH_WITH_ONE_MATRIX); assertEquals("matrix", segment.getPath()); MultivaluedMap<String, String> matrixParameters = segment.getMatrixParameters(); assertNotNull(matrixParameters); assertEquals(1, matrixParameters.size()); assertEquals(1, matrixParameters.get("a").size()); assertEquals("a1", matrixParameters.getFirst("a")); assertNull(matrixParameters.get("b")); } public void testPathSegmentWithTwoMatrix() { PathSegment segment = new PathSegmentImpl(PATH_WITH_TWO_MATRIX); assertEquals("matrix", segment.getPath()); MultivaluedMap<String, String> matrixParameters = segment.getMatrixParameters(); assertNotNull(matrixParameters); assertEquals(2, matrixParameters.size()); assertEquals(1, matrixParameters.get("a").size()); assertEquals("a1", matrixParameters.getFirst("a")); assertEquals(1, matrixParameters.get("b").size()); assertEquals("b1", matrixParameters.getFirst("b")); } public void testPathSegmentWithTwoMatrixValues() { PathSegment segment = new PathSegmentImpl(PATH_WITH_TWO_MATRIX_VALUES); testPathSegmentWithTwoMatrixValues(segment); } public void testClone() { PathSegmentImpl segment = new PathSegmentImpl(PATH_WITH_TWO_MATRIX_VALUES); testPathSegmentWithTwoMatrixValues(segment.clone()); } private void testPathSegmentWithTwoMatrixValues(PathSegment segment) { assertEquals("matrix", segment.getPath()); MultivaluedMap<String, String> matrixParameters = segment.getMatrixParameters(); assertNotNull(matrixParameters); assertEquals(2, matrixParameters.size()); assertEquals(2, matrixParameters.get("a").size()); assertEquals("a1", matrixParameters.get("a").get(0)); assertEquals("a2", matrixParameters.get("a").get(1)); assertEquals(1, matrixParameters.get("b").size()); assertEquals("b1", matrixParameters.getFirst("b")); assertNull(matrixParameters.get("c")); } public void testPathSegmentImplSpecifics() { PathSegmentImpl segment = new PathSegmentImpl(PATH_WITH_TWO_MATRIX_VALUES); MultivaluedMap<String, String> matrixParameters = segment.getMatrixParameters(); matrixParameters.add("a", "a3"); matrixParameters.add("a", "a4"); matrixParameters.add("c", "c1"); assertEquals(3, matrixParameters.size()); assertEquals(4, matrixParameters.get("a").size()); assertEquals("a1", matrixParameters.get("a").get(0)); assertEquals("a2", matrixParameters.get("a").get(1)); assertEquals("a3", matrixParameters.get("a").get(2)); assertEquals("a4", matrixParameters.get("a").get(3)); assertEquals(1, matrixParameters.get("c").size()); assertEquals("c1", matrixParameters.get("c").get(0)); segment.clearMatrixParameter("c"); assertEquals(2, matrixParameters.size()); assertNull(matrixParameters.get("c")); segment.clearAllMatrixParameters(); assertEquals(0, matrixParameters.size()); segment.setMatrixParameters("A=A1;B=B2"); assertEquals(2, matrixParameters.size()); assertEquals("A1", matrixParameters.get("A").get(0)); assertEquals("B2", matrixParameters.get("B").get(0)); assertNull(matrixParameters.get("a")); assertNull(matrixParameters.get("b")); } public void testToString() { PathSegmentImpl segment = new PathSegmentImpl(PATH_WITH_TWO_MATRIX_VALUES); String string = segment.toString(); assertEquals(PATH_WITH_TWO_MATRIX_VALUES, string); segment = new PathSegmentImpl(PATH_CLEAN); string = segment.toString(); assertEquals(PATH_CLEAN, string); } public void testEquality() { PathSegmentImpl segment1 = new PathSegmentImpl("matrix"); PathSegmentImpl segment2 = new PathSegmentImpl("matrix"); assertEquals(segment1, segment2); segment1 = new PathSegmentImpl(";a=a1;a=a2;b=b1"); segment2 = new PathSegmentImpl(";a=a1;a=a2;b=b1"); assertEquals(segment1, segment2); segment1 = new PathSegmentImpl("matrix;a=a1;a=a2;b=b1"); segment2 = new PathSegmentImpl("matrix;a=a1;a=a2;b=b1"); assertEquals(segment1, segment2); segment1 = new PathSegmentImpl("matrix;a=a2;a=a1;b=b1"); segment2 = new PathSegmentImpl("matrix;a=a1;a=a2;b=b1"); assertFalse(segment1.equals(segment2)); segment1 = new PathSegmentImpl("matrix1;a=a1;a=a2;b=b1"); segment2 = new PathSegmentImpl("matrix2;a=a1;a=a2;b=b1"); assertFalse(segment1.equals(segment2)); segment1 = new PathSegmentImpl("matrix;a=a1;a=a2;b=b1"); segment2 = new PathSegmentImpl("matrix;a=a1;a=a2"); assertFalse(segment1.equals(segment2)); } public void testBadInput() { try { new PathSegmentImpl(null); fail("expected NuulPointerException"); } catch (NullPointerException e) { } try { new PathSegmentImpl(null, (String)null); fail("expected NuulPointerException"); } catch (NullPointerException e) { } try { new PathSegmentImpl(null, (MultivaluedMap<String, String>)null); fail("expected NuulPointerException"); } catch (NullPointerException e) { } } public void testDecode() { PathSegmentImpl segment = new PathSegmentImpl("a%20b;m%201=a%201;m%202=a%202;m3=3"); PathSegmentImpl expected = new PathSegmentImpl("a b;m 1=a 1;m 2=a 2;m3=3"); assertEquals(expected, PathSegmentImpl.decode(segment)); } }