/*
* Copyright 2004-2008 the original author or authors.
*
* 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 org.springframework.webflow.config;
import java.net.MalformedURLException;
import junit.framework.TestCase;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.UrlResource;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.support.ServletContextResourceLoader;
/**
* Unit tests for {@link FlowDefinitionResourceFactory}.
*/
public class FlowDefinitionResourceFactoryTests extends TestCase {
private ResourceLoader resourceLoader;
private FlowDefinitionResourceFactory factory;
protected void setUp() throws Exception {
resourceLoader = new ServletContextResourceLoader(new MockServletContext());
factory = new FlowDefinitionResourceFactory();
}
public void testGetFlowIdNoBasePath() {
Resource resource = resourceLoader.getResource("/WEB-INF/hotels/booking/booking-flow.xml");
assertEquals("booking-flow", factory.getFlowId(resource));
}
public void testGetFlowIdFileSystemResourceBasePathMatch() {
Resource resource = new FileSystemResource("/the/path/on/the/file/system/sample-flow.xml");
factory.setBasePath("file:/the/path");
assertEquals("on/the/file/system", factory.getFlowId(resource));
}
public void testGetFlowIdCustomBasePath() {
Resource resource = resourceLoader.getResource("/WEB-INF/hotels/booking/booking-flow.xml");
factory.setBasePath("WEB-INF");
assertEquals("hotels/booking", factory.getFlowId(resource));
}
public void testGetFlowCustomBasePathTrailingSlash() {
Resource resource = resourceLoader.getResource("/WEB-INF/hotels/booking/booking-flow.xml");
factory.setBasePath("WEB-INF/");
assertEquals("hotels/booking", factory.getFlowId(resource));
}
public void testGetFlowIdCustomBasePathLeadingSlash() {
Resource resource = resourceLoader.getResource("/WEB-INF/hotels/booking/booking-flow.xml");
factory.setBasePath("/WEB-INF");
assertEquals("hotels/booking", factory.getFlowId(resource));
}
public void testGetFlowIdCustomBasePathLeadingAndTrailingSlash() {
Resource resource = resourceLoader.getResource("/WEB-INF/hotels/booking/booking-flow.xml");
factory.setBasePath("/WEB-INF/");
assertEquals("hotels/booking", factory.getFlowId(resource));
}
public void testGetFlowIdFlowPathIsBasePath() {
Resource resource = resourceLoader.getResource("/WEB-INF/hotels/booking/booking-flow.xml");
factory.setBasePath("/WEB-INF/hotels/booking");
assertEquals("booking-flow", factory.getFlowId(resource));
}
public void testGetFlowIdBasePathMismatch() {
Resource resource = resourceLoader.getResource("/WEB-INF/hotels/booking/booking-flow.xml");
factory.setBasePath("/foo/bar");
assertEquals("WEB-INF/hotels/booking", factory.getFlowId(resource));
}
public void testGetFlowIdClassPathResource() {
Resource resource = new ClassPathResource("org/springframework/webflow/sample/sample-flow.xml");
factory.setBasePath("classpath:org/springframework/webflow/");
assertEquals("sample", factory.getFlowId(resource));
}
public void testGetFlowIdClassPathStarResource() {
Resource resource = new ClassPathResource("org/springframework/webflow/sample/sample-flow.xml");
factory.setBasePath("classpath*:org/springframework/webflow/");
assertEquals("sample", factory.getFlowId(resource));
}
public void testGetFlowIdFileSystemResource() {
Resource resource = new FileSystemResource(
"/the/path/on/the/file/system/org/springframework/webflow/sample/sample-flow.xml");
factory.setBasePath("classpath:org/springframework/webflow/");
assertEquals("sample", factory.getFlowId(resource));
}
public void testGetFlowIdFileSystemResourceNoBasePathMatch() {
Resource resource = new FileSystemResource("/the/path/on/the/file/system/sample-flow.xml");
factory.setBasePath("classpath:org/springframework/webflow/");
assertEquals("the/path/on/the/file/system", factory.getFlowId(resource));
}
public void testGetFlowIdUrlResource() throws MalformedURLException {
Resource resource = new UrlResource(
"file:/the/path/on/the/file/system/org/springframework/webflow/sample/sample-flow.xml");
factory.setBasePath("classpath:org/springframework/webflow/");
assertEquals("sample", factory.getFlowId(resource));
}
public void testGetFlowIdUrlResourceNoBasePathMatch() throws MalformedURLException {
Resource resource = new UrlResource("file:/the/path/on/the/file/system/sample-flow.xml");
factory.setBasePath("classpath:org/springframework/webflow/");
assertEquals("the/path/on/the/file/system", factory.getFlowId(resource));
}
}