/** * Basic tests for TaxonomyReader's category <=> ordinal transformations (getSize(), getCategory() * and getOrdinal()). We test that after writing the index, it can be read and all the categories * and ordinals are there just as we expected them to be. */ @Test public void testReaderBasic() throws Exception { Directory indexDir = newDirectory(); TaxonomyWriter tw = new DirectoryTaxonomyWriter(indexDir); fillTaxonomy(tw); tw.close(); TaxonomyReader tr = new DirectoryTaxonomyReader(indexDir); // test TaxonomyReader.getSize(): assertEquals(expectedCategories.length, tr.getSize()); // test round trips of ordinal => category => ordinal for (int i = 0; i < tr.getSize(); i++) { assertEquals(i, tr.getOrdinal(tr.getPath(i))); } // test TaxonomyReader.getCategory(): for (int i = 1; i < tr.getSize(); i++) { FacetLabel expectedCategory = new FacetLabel(expectedCategories[i]); FacetLabel category = tr.getPath(i); if (!expectedCategory.equals(category)) { fail( "For ordinal " + i + " expected category " + showcat(expectedCategory) + ", but got " + showcat(category)); } } // (also test invalid ordinals:) assertNull(tr.getPath(-1)); assertNull(tr.getPath(tr.getSize())); assertNull(tr.getPath(TaxonomyReader.INVALID_ORDINAL)); // test TaxonomyReader.getOrdinal(): for (int i = 1; i < expectedCategories.length; i++) { int expectedOrdinal = i; int ordinal = tr.getOrdinal(new FacetLabel(expectedCategories[i])); if (expectedOrdinal != ordinal) { fail( "For category " + showcat(expectedCategories[i]) + " expected ordinal " + expectedOrdinal + ", but got " + ordinal); } } // (also test invalid categories:) assertEquals(TaxonomyReader.INVALID_ORDINAL, tr.getOrdinal(new FacetLabel("non-existant"))); assertEquals( TaxonomyReader.INVALID_ORDINAL, tr.getOrdinal(new FacetLabel("Author", "Jules Verne"))); tr.close(); indexDir.close(); }
private void checkWriterParent(TaxonomyReader tr, TaxonomyWriter tw) throws Exception { // check that the parent of the root ordinal is the invalid ordinal: assertEquals(TaxonomyReader.INVALID_ORDINAL, tw.getParent(0)); // check parent of non-root ordinals: for (int ordinal = 1; ordinal < tr.getSize(); ordinal++) { FacetLabel me = tr.getPath(ordinal); int parentOrdinal = tw.getParent(ordinal); FacetLabel parent = tr.getPath(parentOrdinal); if (parent == null) { fail( "Parent of " + ordinal + " is " + parentOrdinal + ", but this is not a valid category."); } // verify that the parent is indeed my parent, according to the // strings if (!me.subpath(me.length - 1).equals(parent)) { fail( "Got parent " + parentOrdinal + " for ordinal " + ordinal + " but categories are " + showcat(parent) + " and " + showcat(me) + " respectively."); } } // check parent of of invalid ordinals: try { tw.getParent(-1); fail("getParent for -1 should throw exception"); } catch (ArrayIndexOutOfBoundsException e) { // ok } try { tw.getParent(TaxonomyReader.INVALID_ORDINAL); fail("getParent for INVALID_ORDINAL should throw exception"); } catch (ArrayIndexOutOfBoundsException e) { // ok } try { int parent = tw.getParent(tr.getSize()); fail("getParent for getSize() should throw exception, but returned " + parent); } catch (ArrayIndexOutOfBoundsException e) { // ok } }
/** * Tests for TaxonomyReader's getParent() method. We check it by comparing its results to those we * could have gotten by looking at the category string paths (where the parentage is obvious). * Note that after testReaderBasic(), we already know we can trust the ordinal <=> category * conversions. * * <p>Note: At the moment, the parent methods in the reader are deprecated, but this does not mean * they should not be tested! Until they are removed (*if* they are removed), these tests should * remain to see that they still work correctly. */ @Test public void testReaderParent() throws Exception { Directory indexDir = newDirectory(); TaxonomyWriter tw = new DirectoryTaxonomyWriter(indexDir); fillTaxonomy(tw); tw.close(); TaxonomyReader tr = new DirectoryTaxonomyReader(indexDir); // check that the parent of the root ordinal is the invalid ordinal: int[] parents = tr.getParallelTaxonomyArrays().parents(); assertEquals(TaxonomyReader.INVALID_ORDINAL, parents[0]); // check parent of non-root ordinals: for (int ordinal = 1; ordinal < tr.getSize(); ordinal++) { FacetLabel me = tr.getPath(ordinal); int parentOrdinal = parents[ordinal]; FacetLabel parent = tr.getPath(parentOrdinal); if (parent == null) { fail( "Parent of " + ordinal + " is " + parentOrdinal + ", but this is not a valid category."); } // verify that the parent is indeed my parent, according to the strings if (!me.subpath(me.length - 1).equals(parent)) { fail( "Got parent " + parentOrdinal + " for ordinal " + ordinal + " but categories are " + showcat(parent) + " and " + showcat(me) + " respectively."); } } tr.close(); indexDir.close(); }
/** * The following test is exactly the same as testRootOnly, except we do not close the writer * before opening the reader. We want to see that the root is visible to the reader not only after * the writer is closed, but immediately after it is created. */ @Test public void testRootOnly2() throws Exception { Directory indexDir = newDirectory(); TaxonomyWriter tw = new DirectoryTaxonomyWriter(indexDir); tw.commit(); TaxonomyReader tr = new DirectoryTaxonomyReader(indexDir); assertEquals(1, tr.getSize()); assertEquals(0, tr.getPath(0).length); assertEquals(TaxonomyReader.INVALID_ORDINAL, tr.getParallelTaxonomyArrays().parents()[0]); assertEquals(0, tr.getOrdinal(new FacetLabel())); tw.close(); tr.close(); indexDir.close(); }
/** * Test writing an empty index, and seeing that a reader finds in it the root category, and only * it. We check all the methods on that root category return the expected results. */ @Test public void testRootOnly() throws Exception { Directory indexDir = newDirectory(); TaxonomyWriter tw = new DirectoryTaxonomyWriter(indexDir); // right after opening the index, it should already contain the // root, so have size 1: assertEquals(1, tw.getSize()); tw.close(); TaxonomyReader tr = new DirectoryTaxonomyReader(indexDir); assertEquals(1, tr.getSize()); assertEquals(0, tr.getPath(0).length); assertEquals(TaxonomyReader.INVALID_ORDINAL, tr.getParallelTaxonomyArrays().parents()[0]); assertEquals(0, tr.getOrdinal(new FacetLabel())); tr.close(); indexDir.close(); }