blob: d7b84892492cd0b9f1ffa20cb3c66d5d22378949 [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.juneau.rest;
import static org.apache.juneau.testutils.TestUtils.*;
import static org.junit.Assert.*;
import java.util.*;
import org.apache.juneau.parser.*;
import org.junit.*;
import org.junit.runners.*;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class StaticFilesMappingTest {
private static Collection<StaticFileMapping> parse(String input) throws ParseException {
return StaticFileMapping.parse(null, input);
}
//------------------------------------------------------------------------------------------------------------------
// Empty input.
//------------------------------------------------------------------------------------------------------------------
@Test
public void a01_null() throws Exception {
assertObjectEquals("[]", parse(null));
}
@Test
public void a02_emptySpaces() throws Exception {
assertObjectEquals("[]", parse(" "));
}
//------------------------------------------------------------------------------------------------------------------
// Basic tests.
//------------------------------------------------------------------------------------------------------------------
@Test
public void b01_basic2Part() throws Exception {
assertObjectEquals("[{path:'foo',location:'bar'}]", parse("foo:bar"));
}
@Test
public void b02_basic2Part_withSpaces() throws Exception {
assertObjectEquals("[{path:'foo',location:'bar'}]", parse(" foo : bar "));
}
@Test
public void b03_basic3Part() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{baz:'qux'}}]",
parse("foo:bar:{baz:'qux'}")
);
}
@Test
public void b04_basic3Part_withSpaces() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{baz:'qux'}}]",
parse(" foo : bar : { baz : 'qux' } ")
);
}
@Test
public void b05_multipleHeaders() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{baz:'qux',qux:'quux'}}]",
parse("foo:bar:{baz:'qux',qux:'quux'}")
);
}
@Test
public void b06_multipleHeaders_withSpaces() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{baz:'qux',qux:'quux'}}]",
parse(" foo : bar : { baz : 'qux' , qux: 'quux' } ")
);
}
@Test
public void b07_nestedHeaders() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c'}}}]",
parse("foo:bar:{a:{b:'c'}}")
);
}
@Test
public void b08_nestedHeaders_complex() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c',d:'e'},f:{g:'h',i:'j'}}}]",
parse("foo:bar:{a:{b:'c',d:'e'},f:{g:'h',i:'j'}}")
);
}
@Test
public void b09_nestedHeaders_complex_withSpaces() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c',d:'e'},f:{g:'h',i:'j'}}}]",
parse(" foo : bar : { a : { b : 'c' , d : 'e' } , f : { g : 'h' , i : 'j' } } ")
);
}
@Test
public void b10_emptyHeaders() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar'}]",
parse("foo:bar:{}")
);
}
//------------------------------------------------------------------------------------------------------------------
// Multiple mappings
//------------------------------------------------------------------------------------------------------------------
@Test
public void c01_multipleMappings_basic2Part() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar'},{path:'baz',location:'qux'}]",
parse("foo:bar,baz:qux")
);
}
@Test
public void c02_multipleMappings_basic2Part_withSpaces() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar'},{path:'baz',location:'qux'}]",
parse(" foo : bar , baz : qux ")
);
}
@Test
public void c03_multipleMappings_basic3Part() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:'b'}},{path:'baz',location:'qux',responseHeaders:{c:'d'}}]",
parse("foo:bar:{a:'b'},baz:qux:{c:'d'}")
);
}
@Test
public void c04_multipleMappings_basic3Part_withSpaces() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:'b'}},{path:'baz',location:'qux',responseHeaders:{c:'d'}}]",
parse(" foo : bar : { a : 'b' } , baz : qux : { c : 'd' } ")
);
}
@Test
public void c05_multipleMappings_multipleHeaders() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:'b',c:'d'}},{path:'baz',location:'qux',responseHeaders:{e:'f',g:'h'}}]",
parse("foo:bar:{a:'b',c:'d'},baz:qux:{e:'f',g:'h'}")
);
}
@Test
public void c06_multipleMappings_multipleHeaders_withSpaces() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:'b',c:'d'}},{path:'baz',location:'qux',responseHeaders:{e:'f',g:'h'}}]",
parse(" foo : bar : { a : 'b' , c : 'd' } , baz : qux : { e : 'f' , g : 'h' } ")
);
}
@Test
public void c07_multipleMappings_nestedHeaders() throws Exception {
assertObjectEquals(
"[{path:'foo',location:'bar',responseHeaders:{a:{b:'c'}}},{path:'baz',location:'qux',responseHeaders:{d:{e:'f'}}}]",
parse("foo:bar:{a:{b:'c'}},baz:qux:{d:{e:'f'}}")
);
}
//------------------------------------------------------------------------------------------------------------------
// Error conditions
//------------------------------------------------------------------------------------------------------------------
@Test
public void d01_error_malformedJson() {
try {
parse("foo:bar:xxx");
fail("Exception expected.");
} catch (ParseException e) {
assertContains(e, "Expected { at beginning of headers.");
}
}
@Test
public void d02_error_textFollowingJson() {
try {
parse("foo:bar:{a:'b'}x");
fail("Exception expected.");
} catch (ParseException e) {
assertContains(e, "Invalid text following headers.");
}
}
@Test
public void d03_error_missingLocation() {
try {
parse("foo");
fail("Exception expected.");
} catch (ParseException e) {
assertContains(e, "Couldn't find ':' following path.");
}
}
@Test
public void d04_error_danglingColonAfterLocation() {
try {
parse("foo:bar:");
fail("Exception expected.");
} catch (ParseException e) {
assertContains(e, "Found extra ':' following location.");
}
}
@Test
public void d05_error_malformedHeaders_openEnded() {
try {
parse("foo:bar:{");
fail("Exception expected.");
} catch (ParseException e) {
assertContains(e, "Malformed headers.");
}
}
@Test
public void d06_error_malformedHeaders_mismatchedBrackets() {
try {
parse("foo:bar:{{}");
fail("Exception expected.");
} catch (ParseException e) {
assertContains(e, "Malformed headers.");
}
}
}