package com.w11k.lsql.tests.tree; import com.w11k.lsql.Row; import com.w11k.lsql.query.RowQuery; import com.w11k.lsql.tests.AbstractLSqlTest; import com.w11k.lsql.utils.DebugUtils; import org.testng.annotations.Test; import java.util.List; import static java.lang.Integer.valueOf; import static org.testng.Assert.assertEquals; public class RowQueryToTreeConverterTest extends AbstractLSqlTest { private TreeTestData treeTestData; @Override public void beforeMethodHook() { this.treeTestData = new TreeTestData(this.lSql); this.treeTestData.insert(); } @Test public void continents() { RowQuery query = this.treeTestData.getlSqlFile().statement("continents").query(); List<Row> tree = query.toTree(); assertContinents(tree); } @Test public void continentsWithFacts() { RowQuery query = this.treeTestData.getlSqlFile().statement("continentsWithFacts").query(); List<Row> tree = query.toTree(); assertContinents(tree); assertFacts(tree); } @Test public void continentsWithFactsAndCountries() { RowQuery query = this.treeTestData.getlSqlFile().statement("continentsWithFactsAndCountries").query(); List<Row> tree = query.toTree(); assertContinents(tree); assertFacts(tree); assertCountries(tree); } @Test public void continentsWithFactsAndCountriesAndCities_1() { RowQuery query = this.treeTestData.getlSqlFile().statement("continentsWithFactsAndCountriesAndCities_1").query(); List<Row> tree = query.toTree(); assertContinents(tree); assertFacts(tree); assertCountries(tree); assertCities(tree); } @Test public void continentsWithFactsAndCountriesAndCities_2() { RowQuery query = this.treeTestData.getlSqlFile().statement("continentsWithFactsAndCountriesAndCities_2").query(); List<Row> tree = query.toTree(); DebugUtils.prettyPrintJson(tree); assertContinents(tree); assertFacts(tree); assertCountries(tree); assertCities(tree); } private void assertContinents(List<Row> tree) { assertEquals(tree.size(), 2); assertEquals(tree.get(0).getInt("id"), valueOf(1)); assertEquals(tree.get(0).getString("name"), "Europe"); assertEquals(tree.get(1).getInt("id"), valueOf(2)); assertEquals(tree.get(1).getString("name"), "North America"); } private void assertFacts(List<Row> tree) { assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(0).size(), 4); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(0).getInt("id"), valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(0).getInt("continentId"), valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(0).getString("factName"), "Area"); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(0).getString("factValue"), "10,180,000 km2"); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(1).size(), 4); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(1).getInt("id"), valueOf(2)); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(1).getInt("continentId"), valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(1).getString("factName"), "Population"); assertEquals(tree.get(0).getAsListOf(Row.class, "facts").get(1).getString("factValue"), "742,452,000"); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(0).size(), 4); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(0).getInt("id"), valueOf(3)); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(0).getInt("continentId"), valueOf(2)); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(0).getString("factName"), "Area"); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(0).getString("factValue"), "24,709,000 km2"); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(1).size(), 4); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(1).getInt("id"), valueOf(4)); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(1).getInt("continentId"), valueOf(2)); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(1).getString("factName"), "Largest city"); assertEquals(tree.get(1).getAsListOf(Row.class, "facts").get(1).getString("factValue"), "Mexico City"); } private void assertCountries(List<Row> tree) { // use delta of 1.0, since the country row might contain the cities array assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).size(), 3.0, 1.0); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getInt("id"), valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getInt("continentId"), valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getString("name"), "Germany"); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(1).size(), 3.0, 1.0); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(1).getInt("id"), valueOf(2)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(1).getInt("continentId"), valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(1).getString("name"), "Netherlands"); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).size(), 3.0, 1.0); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getInt("id"), valueOf(3)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getInt("continentId"), valueOf(2)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getString("name"), "USA"); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(1).size(), 3.0, 1.0); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(1).getInt("id"), valueOf(4)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(1).getInt("continentId"), valueOf(2)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(1).getString("name"), "Canada"); } private void assertCities(List<Row> tree) { assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").size(), 2); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(0).getInt("id"), Integer.valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(0).getInt("countryId"), Integer.valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(0).getString("name"), "Esslingen"); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(1).getInt("id"), Integer.valueOf(2)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(1).getInt("countryId"), Integer.valueOf(1)); assertEquals(tree.get(0).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(1).getString("name"), "Bonn"); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").size(), 2); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(0).getInt("id"), Integer.valueOf(3)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(0).getInt("countryId"), Integer.valueOf(3)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(0).getString("name"), "Boston"); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(1).getInt("id"), Integer.valueOf(4)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(1).getInt("countryId"), Integer.valueOf(3)); assertEquals(tree.get(1).getAsListOf(Row.class, "countries").get(0).getAsListOf(Row.class, "cities").get(1).getString("name"), "New York"); } }