/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* 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
*******************************************************************************/
package org.ebayopensource.turmeric.tools.library;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.ebayopensource.turmeric.tools.codegen.AbstractServiceGeneratorTestCase;
import org.ebayopensource.turmeric.tools.codegen.handler.DontPromptResponseHandler;
import org.ebayopensource.turmeric.tools.library.TypeLibraryInputOptions;
import org.ebayopensource.turmeric.tools.library.codegen.TypeLibraryCodeGenContext;
import org.ebayopensource.turmeric.tools.library.utils.TypeLibraryUtilities;
import org.junit.Assert;
import org.junit.Test;
/**
* @author arajmony
*/
public class TypeLibraryUtilitiesTest extends AbstractServiceGeneratorTestCase {
public TypeLibraryUtilitiesTest(){}
@Test
public void method_checkVersionFormat(){
String version = "1.0.1";
Assert.assertTrue(TypeLibraryUtilities.checkVersionFormat(version, 3));
}
@Test
public void method_checkVersionFormat_failCase_lowerLimit(){
String version = "1.0.1";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 2);
assertFalse(status);
}
@Test
public void method_checkVersionFormat_failCase_HigherLimit(){
String version = "1.2.1";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 4);
assertFalse(status);
}
@Test
public void method_checkVersionFormat_failCase_NonNumericCase_1(){
String version = "1.ab.1";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 3);
assertFalse(status);
}
@Test
public void method_checkVersionFormat_failCase_NonNumericCase_2(){
String version = "1.//.1";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 3);
assertFalse(status);
}
@Test
public void method_checkVersionFormat_failCase_NonNumericCase_3(){
String version = "1.2.$%";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 3);
assertFalse(status);
}
@Test
public void method_checkVersionFormat_failCase_Empty(){
String version = "1..3";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 3);
assertFalse(status);
}
@Test
public void method_checkVersionFormat_failCase_Empty_2(){
String version = "..";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 3);
assertFalse(status);
}
@Test
public void method_checkVersionFormat_manyVersions(){
String version = "12.1.23.45.38989.90901";
boolean status = TypeLibraryUtilities.checkVersionFormat(version, 6);
assertTrue(status);
}
@Test
public void method_findDependentLibrariesForAType__case__one_level__no_current__only_parent() throws Exception{
Set<String> expectedLib = new HashSet<String>();
expectedLib.add("SecondLevelLib");
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "FirstLevelLib");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "FirstLevelLib", "FirstLevelType");
assertEquals(1, dependentLibAndTypeMap.size());
assertTrue(dependentLibAndTypeMap.containsKey("SecondLevelLib"));
}
@Test
public void method_findDependentLibrariesForAType__case__one_level__current__and__parent() throws Exception{
String[] expectedLibArray = new String[]{"CurrentAndParent","SecondLevelLib"};
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "CurrentAndParent");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "CurrentAndParent", "CurrentAndParenttype");
assertEquals(2, dependentLibAndTypeMap.size());
for(int i=0;i<expectedLibArray.length;i++)
{
assertTrue(dependentLibAndTypeMap.containsKey(expectedLibArray[i]));
}
}
@Test
public void method_findDependentLibrariesForAType__case__three_level__parent__grandParent() throws Exception{
String[] expectedLibArray = new String[]{"FirstLevelLib","SecondLevelLib"};
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "ParentAndGrandParent");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "ParentAndGrandParent", "ParentAndGrandParentType");
assertEquals(2, dependentLibAndTypeMap.size());
for(int i=0;i<expectedLibArray.length;i++)
{
assertTrue(dependentLibAndTypeMap.containsKey(expectedLibArray[i]));
}
}
@Test
public void method_findDependentLibrariesForAType__case__three_level__current__parent__grandParent() throws Exception{
String[] expectedLibArray = new String[]{"CurrentParentAndGrand","SecondLevelLib","FirstLevelLib"};
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "CurrentParentAndGrand");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "CurrentParentAndGrand", "CurrentParentAndGrandType");
assertEquals(3, dependentLibAndTypeMap.size());
for(int i=0;i<expectedLibArray.length;i++)
{
assertTrue(dependentLibAndTypeMap.containsKey(expectedLibArray[i]));
}
}
@Test
public void method_getLibrariesNameSpace_null_PR__null_classLoader(){
String library_1 = "HardwareTypeLibraryTest";
String library_2 = "Library1";
String library_3 = "Library2";
String library_1_NS = "http://www.ebayopensource.org/soaframework/examples/config";
String library_2_NS = "http://www.ebayopensource.org/soaframework/examples/config";
String library_3_NS = "http://www.ebayopensource.org/turmeric/common/v1/types";
List<String> libraryNames = new ArrayList<String>();
libraryNames.add(library_1);
libraryNames.add(library_2);
libraryNames.add(library_3);
Map<String,String> libraryNamesNSMap = TypeLibraryUtilities.getLibrariesNameSpace(libraryNames, null, null);
Assert.assertEquals(libraryNamesNSMap.get(library_1), library_1_NS);
Assert.assertEquals(libraryNamesNSMap.get(library_2), library_2_NS);
Assert.assertEquals(libraryNamesNSMap.get(library_3), library_3_NS);
}
@Test
public void method_getLibrariesNameSpace_null_PR__valid_classLoader(){
String library_1 = "HardwareTypeLibraryTest";
String library_2 = "Library1";
String library_3 = "Library2";
String library_1_NS = "http://www.ebayopensource.org/soaframework/examples/config";
String library_2_NS = "http://www.ebayopensource.org/soaframework/examples/config";
String library_3_NS = "http://www.ebayopensource.org/turmeric/common/v1/types";
List<String> libraryNames = new ArrayList<String>();
libraryNames.add(library_1);
libraryNames.add(library_2);
libraryNames.add(library_3);
Map<String,String> libraryNamesNSMap = TypeLibraryUtilities.getLibrariesNameSpace(libraryNames,null, this.getClass().getClassLoader());
Assert.assertEquals(libraryNamesNSMap.get(library_1), library_1_NS);
Assert.assertEquals(libraryNamesNSMap.get(library_2), library_2_NS);
Assert.assertEquals(libraryNamesNSMap.get(library_3), library_3_NS);
}
@Test
public void method_findDependentLibrariesAndTypesForAType__case__one_level__no_current__only_parent() throws Exception{
Set<String> expectedLib = new HashSet<String>();
expectedLib.add("SecondLevelLib");
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "FirstLevelLib");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "FirstLevelLib", "FirstLevelType");
assertEquals(1, dependentLibAndTypeMap.size());
Set<String> allTyeps = dependentLibAndTypeMap.get("SecondLevelLib");
assertTrue(allTyeps.contains("SecondLevelType"));
}
@Test
public void method_findDependentLibrariesAndTypesForAType__case__one_level__current__and__parent() throws Exception{
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "CurrentAndParent");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "CurrentAndParent", "CurrentAndParenttype");
assertEquals(2, dependentLibAndTypeMap.size());
assertTrue(dependentLibAndTypeMap.get("CurrentAndParent").contains("existingType"));
assertTrue(dependentLibAndTypeMap.get("SecondLevelLib").contains("SecondLevelType"));
}
@Test
public void method_findDependentLibrariesAndTypesForAType__case__three_level__parent__grandParent() throws Exception{
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "ParentAndGrandParent");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "ParentAndGrandParent", "ParentAndGrandParentType");
assertEquals(2, dependentLibAndTypeMap.size());
dependentLibAndTypeMap.get("FirstLevelLib").contains("FirstLevelType");
dependentLibAndTypeMap.get("SecondLevelLib").contains("SecondLevelType");
}
@Test
public void method_findDependentLibrariesAndTypesForAType__case__three_level__current__parent__grandParent() throws Exception
{
Map<String, Set<String>> dependentLibAndTypeMap = null;
TypeLibraryCodeGenContext ctx = createTypeLibraryCodeGenContext("", "CurrentParentAndGrand");
dependentLibAndTypeMap = TypeLibraryUtilities.findDependentLibrariesAndTypesForAType(ctx, "CurrentParentAndGrand", "CurrentParentAndGrandType");
assertEquals(3, dependentLibAndTypeMap.size());
assertTrue(dependentLibAndTypeMap.get("CurrentParentAndGrand").contains("someExistingType"));
assertTrue(dependentLibAndTypeMap.get("SecondLevelLib").contains("SecondLevelType"));
assertTrue(dependentLibAndTypeMap.get("FirstLevelLib").contains("FirstLevelType"));
}
private TypeLibraryCodeGenContext createTypeLibraryCodeGenContext(
String projectRoot, String libraryName) {
TypeLibraryInputOptions opts = new TypeLibraryInputOptions();
opts.setProjectRoot(projectRoot);
opts.setTypeLibraryName(libraryName);
TypeLibraryCodeGenContext ctx = new TypeLibraryCodeGenContext(opts, new DontPromptResponseHandler());
return ctx;
}
}