// Path: src/main/java/me/bayes/vertx/vest/util/UriPathUtil.java
// public final class UriPathUtil {
// 	
// 	private UriPathUtil() { }
// 	
// 	
// 	/**
// 	 * Retrieve the context from the provided {@link Application}'s {@link ApplicationPath}.
// 	 *
// 	 * @param application with a {@link ApplicationPath} annotation.
// 	 * @return String of the path.
// 	 */
// 	public static String getApplicationContext(Application application) {
// 
// 		final Class<?> clazz = application.getClass();
// 		final ApplicationPath applicationPath = clazz.getAnnotation(ApplicationPath.class);
// 
// 		String path = (applicationPath == null) ? "/" :
// 			applicationPath.value();
// 
// 		if(path.length() < 1) {
// 			return "/";
// 		} else {
// 			return path.charAt(0) == '/' ? path : "/" + path;
// 		}
// 	}
// 
// 
// 	/**
// 	 * Concat paths to a single one in the form of parent/child.
// 	 *
// 	 * @param parent
// 	 * @param child
// 	 * @return a url in {@link String} form.
// 	 */
// 	public static String concatPaths(String parent, String child) {
// 
// 		if(parent.endsWith("/") ^ child.startsWith("/")) {
// 			return parent + child;
// 		} else if(!parent.endsWith("/") && !child.startsWith("/")) {
// 			return parent + "/" + child;
// 		} else if(parent.endsWith("/") && child.startsWith("/")) {
// 			return parent + child.substring(1);
// 		} else {
// 			return (parent + child).replaceAll("//", "/");
// 		}
// 
// 	}
// 
// 
// 	/**
// 	 * Taken path declared in a {@link javax.ws.rs.Path} annotation and replaces it with
// 	 * a vertx compliant path. 
// 	 * 
// 	 * http://vertx.io/core_manual_java.html#extracting-parameters-from-the-path
// 	 * 
// 	 * WARNING: This current approach removes the regular expression validations of 
// 	 * 			the path parameters.
// 	 * 
// 	 * @param path - URI of the service
// 	 * @return vertx path as string
// 	 */
// 	public static String convertPath(String path) {
// 		
// 		final StringBuilder newPath = new StringBuilder();
// 		
// 		boolean foundPathVariable = false;
// 		boolean foundRegularExpression = false;
// 		
// 		for(int i = 0; i < path.length(); i++) {
// 			char currentCharacter = path.charAt(i);
// 			
// 			if(currentCharacter == '{') {
// 				foundPathVariable = true;
// 				newPath.append(":");
// 			} else if(currentCharacter == '}') {
// 				foundPathVariable = false;
// 				foundRegularExpression = false;
// 			} else if(foundPathVariable && currentCharacter == ':') {
// 				foundRegularExpression = true;
// 			} else if(foundPathVariable && (foundRegularExpression ||
// 					currentCharacter == ' ')) {
// 				continue;
// 			} else if(i == path.length() - 1 && currentCharacter == '/') {
// 				continue;
// 			} else {
// 				newPath.append(currentCharacter);
// 			}
// 		}
// 		
// 		return newPath.toString();
// 		
// 	}
// 
// }


import static org.junit.Assert.*;
import me.bayes.vertx.vest.util.UriPathUtil;
import org.junit.Test;
/**
 * Copyright 2013 Bayes Technologies
 *
 *  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 me.bayes.vertx.vest;




public class TestJaxrsToVertxPathConverter {

	@Test
	public void testConvertPathWithVariable() {
		//given
		String path = "/username/{username : [a-zA-Z][a-zA-Z_0-9]}";
		String expected = "/username/:username";
		
		//when
// Path: src/main/java/me/bayes/vertx/vest/util/UriPathUtil.java
// public final class UriPathUtil {
// 	
// 	private UriPathUtil() { }
// 	
// 	
// 	/**
// 	 * Retrieve the context from the provided {@link Application}'s {@link ApplicationPath}.
// 	 *
// 	 * @param application with a {@link ApplicationPath} annotation.
// 	 * @return String of the path.
// 	 */
// 	public static String getApplicationContext(Application application) {
// 
// 		final Class<?> clazz = application.getClass();
// 		final ApplicationPath applicationPath = clazz.getAnnotation(ApplicationPath.class);
// 
// 		String path = (applicationPath == null) ? "/" :
// 			applicationPath.value();
// 
// 		if(path.length() < 1) {
// 			return "/";
// 		} else {
// 			return path.charAt(0) == '/' ? path : "/" + path;
// 		}
// 	}
// 
// 
// 	/**
// 	 * Concat paths to a single one in the form of parent/child.
// 	 *
// 	 * @param parent
// 	 * @param child
// 	 * @return a url in {@link String} form.
// 	 */
// 	public static String concatPaths(String parent, String child) {
// 
// 		if(parent.endsWith("/") ^ child.startsWith("/")) {
// 			return parent + child;
// 		} else if(!parent.endsWith("/") && !child.startsWith("/")) {
// 			return parent + "/" + child;
// 		} else if(parent.endsWith("/") && child.startsWith("/")) {
// 			return parent + child.substring(1);
// 		} else {
// 			return (parent + child).replaceAll("//", "/");
// 		}
// 
// 	}
// 
// 
// 	/**
// 	 * Taken path declared in a {@link javax.ws.rs.Path} annotation and replaces it with
// 	 * a vertx compliant path. 
// 	 * 
// 	 * http://vertx.io/core_manual_java.html#extracting-parameters-from-the-path
// 	 * 
// 	 * WARNING: This current approach removes the regular expression validations of 
// 	 * 			the path parameters.
// 	 * 
// 	 * @param path - URI of the service
// 	 * @return vertx path as string
// 	 */
// 	public static String convertPath(String path) {
// 		
// 		final StringBuilder newPath = new StringBuilder();
// 		
// 		boolean foundPathVariable = false;
// 		boolean foundRegularExpression = false;
// 		
// 		for(int i = 0; i < path.length(); i++) {
// 			char currentCharacter = path.charAt(i);
// 			
// 			if(currentCharacter == '{') {
// 				foundPathVariable = true;
// 				newPath.append(":");
// 			} else if(currentCharacter == '}') {
// 				foundPathVariable = false;
// 				foundRegularExpression = false;
// 			} else if(foundPathVariable && currentCharacter == ':') {
// 				foundRegularExpression = true;
// 			} else if(foundPathVariable && (foundRegularExpression ||
// 					currentCharacter == ' ')) {
// 				continue;
// 			} else if(i == path.length() - 1 && currentCharacter == '/') {
// 				continue;
// 			} else {
// 				newPath.append(currentCharacter);
// 			}
// 		}
// 		
// 		return newPath.toString();
// 		
// 	}
// 
// }


// Path: src/test/java/me/bayes/vertx/vest/TestJaxrsToVertxPathConverter.java
import static org.junit.Assert.*;
import me.bayes.vertx.vest.util.UriPathUtil;
import org.junit.Test;

/**
 * Copyright 2013 Bayes Technologies
 *
 *  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 me.bayes.vertx.vest;




public class TestJaxrsToVertxPathConverter {

	@Test
	public void testConvertPathWithVariable() {
		//given
		String path = "/username/{username : [a-zA-Z][a-zA-Z_0-9]}";
		String expected = "/username/:username";
		
		//when
		String result = UriPathUtil.convertPath(path);