// This product is provided under the terms of EPL (Eclipse Public License)
// version 1.0.
//
// The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.genericengine.dependenciesstreamparser;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.dtangler.core.exception.DtException;
import org.dtangler.core.testutil.ClassPathEntryFinder;
import org.dtangler.genericengine.dependenciesstreamparser.ItemDependenciesStreamParser;
import org.dtangler.genericengine.types.Item;
import org.dtangler.genericengine.types.ValidScopes;
import org.junit.Test;
public class ItemDependenciesStreamParserTest {
@Test
public void testScope0Parser() {
String corePath = ClassPathEntryFinder.getPathContaining("core");
String dtPath = corePath
+ "/org/dtangler/genericengine/dependencyengine/testdata/testParsing1.dt";
ItemDependenciesStreamParser parser = new ItemDependenciesStreamParser();
ValidScopes validScopes = new ValidScopes();
Set<Item> items = parser.parse(validScopes,
new File(dtPath), "UTF-8");
assertEquals(10, items.size());
List<String> listNames = getItemNames(items);
assertTrue(listNames.containsAll(new HashSet<String>(Arrays.asList(
"Homer", "Pizza", "Pepperoni", "Cheese", "Beer", "Bart", "Lisa", "Marge", "Coca Cola", "Onion"))));
for (Item item : items) {
if (item.getDisplayname().equals("Homer")) {
assertEquals(item.getDependencies().size(), 2);
assertTrue(item.getDependencies().keySet().containsAll(
new HashSet<Item>(Arrays.asList(new Item("Pizza"),
new Item("Beer")))));
} else if (item.getDisplayname().equals("Pizza")) {
assertEquals(item.getDependencies().size(), 2);
assertTrue(item.getDependencies().keySet().containsAll(
new HashSet<Item>(Arrays.asList(new Item("Pepperoni"),
new Item("Cheese")))));
} else if (item.getDisplayname().equals("Bart")) {
assertEquals(item.getDependencies().size(), 2);
assertTrue(item.getDependencies().keySet().containsAll(
new HashSet<Item>(Arrays.asList(new Item("Pizza"),
new Item("Coca Cola")))));
} else if (item.getDisplayname().equals("Lisa")) {
assertEquals(item.getDependencies().size(), 3);
assertTrue(item.getDependencies().keySet().containsAll(
new HashSet<Item>(Arrays.asList(new Item("Pizza"),
new Item("Onion"),
new Item("Coca Cola")))));
} else if (item.getDisplayname().equals("Marge")) {
assertEquals(item.getDependencies().size(), 1);
assertTrue(item.getDependencies().keySet().containsAll(
new HashSet<Item>(Arrays.asList(new Item("Onion")))));
} else if (item.getDisplayname().equals("Coca Cola") ||
item.getDisplayname().equals("Onion") ||
item.getDisplayname().equals("Beer") ||
item.getDisplayname().equals("Pepperoni") ||
item.getDisplayname().equals("Cheese")) {
assertEquals(item.getDependencies().size(), 0);
} else {
assertTrue(false);
}
}
}
@Test
public void testLineParserWhiteSpaces() {
Set<String> setAbcdef = new HashSet<String>(Arrays.asList(
"a", "b", "c", "d", "e", "f"));
ValidScopes validScopes = new ValidScopes();
ItemDependenciesStreamParser parser = new ItemDependenciesStreamParser();
List<String> listNames = null;
listNames = getItemNames(parser.parseItem(validScopes, "a b c d e f", "UTF-8"));
assertTrue(listNames.containsAll(setAbcdef));
assertTrue(listNames.size() == setAbcdef.size());
listNames = getItemNames(parser.parseItem(validScopes, " { a\t }\t {\tb} {c\t}\t{ d }{e} {f} ", "UTF-8"));
assertTrue(listNames.containsAll(setAbcdef));
assertTrue(listNames.size() == setAbcdef.size());
listNames = getItemNames(parser.parseItem(validScopes, "\t\t\ta b c d e f\t", "UTF-8"));
assertTrue(listNames.containsAll(setAbcdef));
assertTrue(listNames.size() == setAbcdef.size());
String line = " scope {a} scope{b } scope{ c} scope{ d } scope{e}scope {f}";
try {
listNames = getItemNames(parser.parseItem(validScopes, line, "UTF-8"));
assertTrue(false);
} catch (DtException e) {
validScopes.clearScopeNames();
listNames = getItemNames(parser.parseItem(validScopes, line, "UTF-8"));
}
assertTrue(listNames.containsAll(setAbcdef));
assertTrue(listNames.size() == setAbcdef.size());
listNames = getItemNames(parser.parseItem(validScopes, "scope {a}\t scope{b }scope{c} scope{ d} scope{\te\t\t}\tscope\t {f}", "UTF-8"));
assertTrue(listNames.containsAll(setAbcdef));
assertTrue(listNames.size() == setAbcdef.size());
listNames = getItemNames(parser.parseItem(validScopes, "scope2 {z a}\t scope2{ z b }scope2{ x\tc} scope2{\tx\t\td\t} scope2\t{\ty\te\t\t}\tscope2\t {y f }", "UTF-8"));
assertTrue(listNames.containsAll(setAbcdef));
assertTrue(listNames.size() == setAbcdef.size());
listNames = getItemNames(parser.parseItem(validScopes, " scope3{w z a}\t scope3{ w z b }scope3{w x\tc} scope3{w \tx\t\td\t} scope3\t{w \ty\te\t\t}\tscope3\t { w y f }", "UTF-8"));
assertTrue(listNames.containsAll(setAbcdef));
assertTrue(listNames.size() == setAbcdef.size());
}
@Test
public void testScopes() {
ValidScopes validScopes = new ValidScopes();
ItemDependenciesStreamParser parser = new ItemDependenciesStreamParser();
List<Item> items = parser.parseItem(validScopes, "itemScope {a b c d e f g h i j k l m n}", "UTF-8");
assertEquals(1, items.size());
List<String> listNames = getItemNames(items);
assertTrue(listNames.containsAll(new HashSet<String>(Arrays.asList("n"))));
validScopes.generateScopeNamesForUndefinedScopeNames("scope #", "#");
assertEquals(14, validScopes.getNumberOfScopes());
assertEquals(14, validScopes.getScopeNames().length);
int scopeIndex = 0;
for (String scopeName : validScopes.getScopeNames()) {
if (scopeIndex == validScopes.getNumberOfScopes()-1) {
assertTrue(scopeName.equals("itemScope"));
} else {
assertTrue(scopeName.equals("scope "+(scopeIndex+1)));
}
scopeIndex++;
}
}
private List<String> getItemNames(Set<Item> items) {
List<String> names = new ArrayList<String>();
for (Item item : items) {
names.add(item.getDisplayname());
}
return names;
}
private List<String> getItemNames(List<Item> items) {
List<String> names = new ArrayList<String>();
for (Item item : items) {
names.add(item.getDisplayname());
}
return names;
}
}