package tests; import models.database.importers.Action; import models.database.importers.Element; import models.database.importers.ElementParser; import models.database.importers.Syntax; import org.junit.Before; import org.junit.Test; public class ParserTest extends MockedUnitTest { private ElementParser parser; private boolean isUpdated; @Before public void setUp() { isUpdated = false; Syntax syntax = new Syntax("users"); syntax.by("user") .read("name") .read("password") .end(); syntax.by("question") .read("owner") .read("content") .by("answer") .read("content") .read("owner") .end() .call(new Action() { public void call(Element e) { isUpdated = true; } }) .end(); parser = syntax.done(); } @Test public void shouldReadEasyExample() { parser.start("user"); parser.start("name"); parser.text("Anton"); parser.end(); parser.end(); assertFalse(parser.getElement().get("user").isEmpty()); Element anton = parser.getElement().get("user").get(0); String name = anton.get("name").get(0).getText(); assertEquals(name, "Anton"); } @Test public void shouldReadTwoUsers() { parser.start("user"); parser.start("name"); parser.text("Anton"); parser.end(); parser.end(); parser.start("user"); parser.start("name"); parser.text("Bea"); parser.end(); parser.end(); assertFalse(parser.getElement().get("user").isEmpty()); Element bea = parser.getElement().get("user").get(1); String name = bea.get("name").get(0).getText(); assertEquals(name, "Bea"); } @Test public void shouldCallback() { parser.start("question"); assertFalse(isUpdated); parser.end(); assertTrue(isUpdated); } @Test public void shouldHaveDebugFriendly_toString() { parser.start("user"); parser.start("name"); parser.text("Arnold"); parser.end(); parser.end(); Element anton = parser.getElement(); assertEquals( parser.toString(), "PS[users]({question=S[question]({content=S[content]({}), answer=S[answer]({content=S[content]({}), owner=S[owner]({})}), owner=S[owner]({})}), user=S[user]({name=S[name]({}), password=S[password]({})})})"); assertEquals(anton.toString(), "E[root](\"\",{user=[E[user](\"\",{name=[E[name](\"Arnold\",{})]})]})"); } }