private void doTestReadRecreatedTaxonomy(Random random, boolean closeReader) throws Exception { Directory dir = null; TaxonomyWriter tw = null; TaxonomyReader tr = null; // prepare a few categories int n = 10; FacetLabel[] cp = new FacetLabel[n]; for (int i = 0; i < n; i++) { cp[i] = new FacetLabel("a", Integer.toString(i)); } try { dir = newDirectory(); tw = new DirectoryTaxonomyWriter(dir); tw.addCategory(new FacetLabel("a")); tw.close(); tr = new DirectoryTaxonomyReader(dir); int baseNumCategories = tr.getSize(); for (int i = 0; i < n; i++) { int k = random.nextInt(n); tw = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE); for (int j = 0; j <= k; j++) { tw.addCategory(cp[j]); } tw.close(); if (closeReader) { tr.close(); tr = new DirectoryTaxonomyReader(dir); } else { TaxonomyReader newtr = TaxonomyReader.openIfChanged(tr); assertNotNull(newtr); tr.close(); tr = newtr; } assertEquals( "Wrong #categories in taxonomy (i=" + i + ", k=" + k + ")", baseNumCategories + 1 + k, tr.getSize()); } } finally { IOUtils.close(tr, tw, dir); } }