/**
* 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.codehaus.groovy.runtime;
import junit.framework.TestCase;
/**
* @author Hjalmar Ekengren
*/
public class MethodRankHelperTest extends TestCase{
public void testDELDistance() throws Exception {
assertEquals("Identical Strings", 0, MethodRankHelper.delDistance("asdf","asdf"));
//Simple tests
assertEquals("Case Start", MethodRankHelper.DL_CASE, MethodRankHelper.delDistance("Asdf","asdf"));
assertEquals("Case Mid", MethodRankHelper.DL_CASE, MethodRankHelper.delDistance("aSdf","asdf"));
assertEquals("Case End", MethodRankHelper.DL_CASE, MethodRankHelper.delDistance("asdF","asdf"));
assertEquals("Del Start", MethodRankHelper.DL_DELETE, MethodRankHelper.delDistance("sdf","asdf"));
assertEquals("Del Mid", MethodRankHelper.DL_DELETE, MethodRankHelper.delDistance("adf","asdf"));
assertEquals("Del End", MethodRankHelper.DL_DELETE, MethodRankHelper.delDistance("asd","asdf"));
assertEquals("Ins Start", MethodRankHelper.DL_DELETE, MethodRankHelper.delDistance("aasdf","asdf"));
assertEquals("Ins Mid", MethodRankHelper.DL_DELETE, MethodRankHelper.delDistance("assdf","asdf"));
assertEquals("Ins End", MethodRankHelper.DL_DELETE, MethodRankHelper.delDistance("asdff","asdf"));
assertEquals("Sub Start", MethodRankHelper.DL_SUBSTITUTION, MethodRankHelper.delDistance("Qsdf","asdf"));
assertEquals("Sub Mid", MethodRankHelper.DL_SUBSTITUTION, MethodRankHelper.delDistance("aQdf","asdf"));
assertEquals("Sub End", MethodRankHelper.DL_SUBSTITUTION, MethodRankHelper.delDistance("asdQ","asdf"));
assertEquals("Tra Start", MethodRankHelper.DL_TRANSPOSITION, MethodRankHelper.delDistance("sadf","asdf"));
assertEquals("Tra Mid", MethodRankHelper.DL_TRANSPOSITION, MethodRankHelper.delDistance("adsf","asdf"));
assertEquals("Tra End", MethodRankHelper.DL_TRANSPOSITION, MethodRankHelper.delDistance("asfd","asdf"));
//A transposition and a casemodification
assertEquals("TraCase Start1", MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION,
MethodRankHelper.delDistance("sAdf","asdf"));
assertEquals("TraCase Start2", MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION,
MethodRankHelper.delDistance("Sadf","asdf"));
assertEquals("TraCase Mid1", MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION,
MethodRankHelper.delDistance("aDsf","asdf"));
assertEquals("TraCase Mid2", MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION,
MethodRankHelper.delDistance("adSf","asdf"));
assertEquals("TraCase End1", MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION,
MethodRankHelper.delDistance("asFd","asdf"));
assertEquals("TraCase End2", MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION,
MethodRankHelper.delDistance("asfD","asdf"));
assertEquals("2x TraCase1", (MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION)*2,
MethodRankHelper.delDistance("sAfD","asdf"));
assertEquals("2x TraCase2", (MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION)*2,
MethodRankHelper.delDistance("SaFd","asdf"));
assertEquals("2x TraCase + Case", (MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION)*2 + MethodRankHelper.DL_CASE,
MethodRankHelper.delDistance("SAfD","asdf"));
assertEquals("2x TraCase + Case", (MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION)*2 + MethodRankHelper.DL_CASE,
MethodRankHelper.delDistance("SAFd","asdf"));
assertEquals("2x TraCase + Case", (MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION)*2 + MethodRankHelper.DL_CASE,
MethodRankHelper.delDistance("sAFD","asdf"));
assertEquals("2x TraCase + Case", (MethodRankHelper.DL_CASE + MethodRankHelper.DL_TRANSPOSITION)*2 + MethodRankHelper.DL_CASE,
MethodRankHelper.delDistance("SaFD","asdf"));
}
/**
* turns a int array to a Integer array
*/
private Integer[] box(int[] ia){
Integer[] ret = new Integer[ia.length];
for(int i = 0; i < ia.length; i++){
ret[i] = new Integer(ia[i]);
}
return ret;
}
public void testDamerauLevenshteinDistance(){
//There HAS to be a better way to do this!
assertEquals("Equals", 0, MethodRankHelper.damerauLevenshteinDistance(box(new int[]{0,1,2,3}), box(new int[]{0,1,2,3})));
assertEquals("Del Start", MethodRankHelper.DL_DELETE, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{1,2,3})));
assertEquals("Del Mid", MethodRankHelper.DL_DELETE, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{0,2,3})));
assertEquals("Del End", MethodRankHelper.DL_DELETE, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{0,1,2})));
assertEquals("Sub Start", MethodRankHelper.DL_SUBSTITUTION, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{4,1,2,3})));
assertEquals("Sub Mid", MethodRankHelper.DL_SUBSTITUTION, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{0,4,2,3})));
assertEquals("Sub End", MethodRankHelper.DL_SUBSTITUTION, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{0,1,2,4})));
assertEquals("Ins Start", MethodRankHelper.DL_DELETE, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{4,0,1,2,3})));
assertEquals("Ins Mid", MethodRankHelper.DL_DELETE, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{0,1,4,2,3})));
assertEquals("Ins End", MethodRankHelper.DL_DELETE, MethodRankHelper.damerauLevenshteinDistance(box(new int[] {0,1,2,3}), box(new int[]{0,1,2,3,4})));
}
public void boxVarTest() throws Exception {
assertEquals(Boolean.class, MethodRankHelper.boxVar(Boolean.TYPE));
assertEquals(Character.class, MethodRankHelper.boxVar(Character.TYPE));
assertEquals(Byte.class, MethodRankHelper.boxVar(Byte.TYPE));
assertEquals(Double.class, MethodRankHelper.boxVar(Double.TYPE));
assertEquals(Float.class, MethodRankHelper.boxVar(Float.TYPE));
assertEquals(Integer.class, MethodRankHelper.boxVar(Integer.TYPE));
assertEquals(Long.class, MethodRankHelper.boxVar(Long.TYPE));
assertEquals(Short.class, MethodRankHelper.boxVar(Short.TYPE));
assertEquals(MethodRankHelperTest.class, MethodRankHelper.boxVar(MethodRankHelperTest.class));
}
/*
A better set of more complete tests of everything below is on the way!
*/
final class TempClass{
int x, y, fieldWithLongName;
public TempClass(int x, int y){}
public TempClass(int x){}
public TempClass(){}
public int getX(){
return x;
}
public int gety(){
return y;
}
public void setX(int x){}
public void setXY(int x, int y){}
public int getXYMultiplied(){
return x*y;
}
}
public void testGetMethodSuggestionString(){
assertEquals("No suggestion",0, MethodRankHelper.getMethodSuggestionString("noSuchMethod", TempClass.class, new Object[]{}).length());
assertEquals("getx",true, MethodRankHelper.getMethodSuggestionString("getx", TempClass.class, new Object[]{}).indexOf("getX") > 0);
assertEquals("To great distance",true, MethodRankHelper.getMethodSuggestionString("getx", TempClass.class, new Object[]{}).indexOf("getXYMultiplied") < 0);
}
public void testGetConstructorSuggestionString(){
assertEquals("No suggestion",0, MethodRankHelper.getConstructorSuggestionString(TempClass.class, new Object[]{null,null,null,null,null}).length());
}
}