package org.jboss.windup.scan.ast; import org.jboss.windup.rules.apps.java.scan.ast.trie.TriePrefixStructure; import org.jboss.windup.rules.apps.java.scan.ast.trie.TrieStructureTypeRelation; import org.junit.Assert; import org.junit.Test; /** * Created by mbriskar on 9/28/15. */ public class TriePrefixStructureTest { private static int firstTestMatches = 0; private static int secondTestMatches = 0; @Test public void trieWithStringsTest() { TrieStructureTypeRelation<String,String> relation = new TrieStructureTypeRelation<String,String>() { @Override public String getStringToSearchFromSearchType(String search) { return search; } @Override public String getStringPrefixToSaveSaveType(String save) { return save; } @Override public boolean checkIfMatchFound(String saved, String searched) { firstTestMatches++; return saved.equals(searched); } }; TriePrefixStructure<String,String> trie = new TriePrefixStructure<>(relation); trie.addInterest("abc.def.ghi"); trie.addInterest("abc"); trie.addInterest("xyz"); Assert.assertTrue(trie.matches("abc")); Assert.assertEquals(1, firstTestMatches); firstTestMatches=0; Assert.assertTrue(trie.matches("xyz")); Assert.assertEquals(1, firstTestMatches); firstTestMatches=0; Assert.assertFalse(trie.matches("abc.def.ghi.ijkl")); Assert.assertEquals(2, firstTestMatches); } @Test public void trieWithObjectsTest() { TrieStructureTypeRelation<FirstThreePrefix,FirstThreePrefix> relation = new TrieStructureTypeRelation<FirstThreePrefix,FirstThreePrefix>() { @Override public String getStringToSearchFromSearchType(FirstThreePrefix search) { return search.text.substring(0,2); } @Override public String getStringPrefixToSaveSaveType(FirstThreePrefix save) { return save.text.substring(0,2); } @Override public boolean checkIfMatchFound(FirstThreePrefix saved, FirstThreePrefix searched) { secondTestMatches++; return saved.equals(searched); } }; TriePrefixStructure<FirstThreePrefix,FirstThreePrefix> trie = new TriePrefixStructure<>(relation); trie.addInterest(new FirstThreePrefix("abc.def.ghi")); trie.addInterest(new FirstThreePrefix("abc")); trie.addInterest(new FirstThreePrefix("xyz")); Assert.assertFalse(trie.matches(new FirstThreePrefix("abc.def"))); Assert.assertEquals(2, secondTestMatches); secondTestMatches=0; Assert.assertTrue(trie.matches(new FirstThreePrefix("xyz"))); Assert.assertEquals(1, secondTestMatches); secondTestMatches=0; Assert.assertFalse(trie.matches(new FirstThreePrefix("abc.def.ghi.ijkl"))); Assert.assertEquals(2, secondTestMatches); } private class FirstThreePrefix { public String text; public FirstThreePrefix(String text) { this.text=text; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; FirstThreePrefix that = (FirstThreePrefix) o; return text.equals(that.text); } @Override public int hashCode() { return text.hashCode(); } } }