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