// Path: src/main/java/com/elibom/jogger/middleware/router/Route.java
// public class Route {
// 
// 	public enum HttpMethod {
// 		GET,
// 		POST,
// 		PUT,
// 		DELETE,
// 		OPTIONS,
// 		HEAD,
// 		PATCH
// 	}
// 
// 	private final HttpMethod httpMethod;
// 
// 	private final String path;
// 
// 	private final Object controller;
// 
// 	private final Method action;
// 
// 	public Route(HttpMethod httpMethod, String path, Object controller, Method action) {
// 		Preconditions.notNull(httpMethod, "no httpMethod provided");
// 		Preconditions.notNull(path, "no path provided");
// 		Preconditions.notNull(controller, "no controller provided");
// 		Preconditions.notNull(action, "no action provided");
// 
// 		this.httpMethod = httpMethod;
// 		this.path = Path.fixPath(path);
// 		this.controller = controller;
// 		this.action = action;
// 	}
// 
// 	public HttpMethod getHttpMethod() {
// 		return httpMethod;
// 	}
// 
// 	public String getPath() {
// 		return path;
// 	}
// 
// 	public Object getController() {
// 		return controller;
// 	}
// 
// 	public Method getAction() {
// 		return action;
// 	}
// 
// }
// 
// Path: src/main/java/com/elibom/jogger/middleware/router/loader/FileSystemRoutesLoader.java
// public class FileSystemRoutesLoader extends AbstractFileRoutesLoader {
// 
// 	private File file;
// 
// 	public FileSystemRoutesLoader() {
// 	}
// 
// 	public FileSystemRoutesLoader(String filePath) {
// 		this(new File(filePath));
// 	}
// 
// 	public FileSystemRoutesLoader(File file) {
// 		this.file = file;
// 	}
// 
// 	@Override
// 	protected InputStream getInputStream() throws Exception {
// 		return new FileInputStream(file);
// 	}
// 
// 	public void setFile(File file) {
// 		this.file = file;
// 	}
// 
// 	public void setFilePath(String filePath) {
// 		this.file = new File(filePath);
// 	}
// }


import java.text.ParseException;
import java.util.List;
import com.elibom.jogger.middleware.router.Route;
import com.elibom.jogger.middleware.router.loader.FileSystemRoutesLoader;
import org.testng.Assert;
import org.testng.annotations.Test;
	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithInvalidPath() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-5.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithQuestionMark() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-6.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithPoundSign() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-7.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithSpace() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-8.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithSlashInHolder() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-8.config");
		routesLoader.load();
	}

// Path: src/main/java/com/elibom/jogger/middleware/router/Route.java
// public class Route {
// 
// 	public enum HttpMethod {
// 		GET,
// 		POST,
// 		PUT,
// 		DELETE,
// 		OPTIONS,
// 		HEAD,
// 		PATCH
// 	}
// 
// 	private final HttpMethod httpMethod;
// 
// 	private final String path;
// 
// 	private final Object controller;
// 
// 	private final Method action;
// 
// 	public Route(HttpMethod httpMethod, String path, Object controller, Method action) {
// 		Preconditions.notNull(httpMethod, "no httpMethod provided");
// 		Preconditions.notNull(path, "no path provided");
// 		Preconditions.notNull(controller, "no controller provided");
// 		Preconditions.notNull(action, "no action provided");
// 
// 		this.httpMethod = httpMethod;
// 		this.path = Path.fixPath(path);
// 		this.controller = controller;
// 		this.action = action;
// 	}
// 
// 	public HttpMethod getHttpMethod() {
// 		return httpMethod;
// 	}
// 
// 	public String getPath() {
// 		return path;
// 	}
// 
// 	public Object getController() {
// 		return controller;
// 	}
// 
// 	public Method getAction() {
// 		return action;
// 	}
// 
// }
// 
// Path: src/main/java/com/elibom/jogger/middleware/router/loader/FileSystemRoutesLoader.java
// public class FileSystemRoutesLoader extends AbstractFileRoutesLoader {
// 
// 	private File file;
// 
// 	public FileSystemRoutesLoader() {
// 	}
// 
// 	public FileSystemRoutesLoader(String filePath) {
// 		this(new File(filePath));
// 	}
// 
// 	public FileSystemRoutesLoader(File file) {
// 		this.file = file;
// 	}
// 
// 	@Override
// 	protected InputStream getInputStream() throws Exception {
// 		return new FileInputStream(file);
// 	}
// 
// 	public void setFile(File file) {
// 		this.file = file;
// 	}
// 
// 	public void setFilePath(String filePath) {
// 		this.file = new File(filePath);
// 	}
// }


// Path: src/test/java/com/elibom/jogger/router/FileSystemRoutesLoaderTest.java
import java.text.ParseException;
import java.util.List;
import com.elibom.jogger.middleware.router.Route;
import com.elibom.jogger.middleware.router.loader.FileSystemRoutesLoader;
import org.testng.Assert;
import org.testng.annotations.Test;

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithInvalidPath() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-5.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithQuestionMark() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-6.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithPoundSign() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-7.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithSpace() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-8.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)
	public void shouldFailWithSlashInHolder() throws Exception {
		FileSystemRoutesLoader routesLoader = new FileSystemRoutesLoader("src/test/resources/routes/routes-8.config");
		routesLoader.load();
	}

	@Test(expectedExceptions=ParseException.class)