public void testAssignClauseRoles() { StringSearchFacet.SearchTarget t = StringSearchFacet.SearchTarget.TEXT; Boolean caps = true; Boolean marks = true; try { StringSearchFacet.SubClause testTerm = testInstance.new SubClause("dummy values", t, caps, marks); ArrayList<SearchClause> testClauses = new ArrayList<SearchClause>(); // single term without antecedent receives default role StringSearchFacet.SearchTerm term1 = testInstance.new SearchTerm("kai", t, caps, marks, true); testClauses.add(term1); testClauses = testTerm.assignClauseRoles(testClauses); assertEquals(1, testClauses.get(0).getClauseRoles().size()); assertEquals( StringSearchFacet.ClauseRole.DEFAULT, testClauses.get(0).getClauseRoles().get(0)); testClauses.clear(); // term with AND antecedent receives AND role term1 = testInstance.new SearchTerm("kai", t, caps, marks, false); StringSearchFacet.SearchTerm term2 = testInstance.new SearchTerm("AND", t, caps, marks, false); StringSearchFacet.SearchTerm term3 = testInstance.new SearchTerm("ouk", t, caps, marks, false); testClauses.add(term1); testClauses.add(term2); testClauses.add(term3); testClauses = testTerm.assignClauseRoles(testClauses); assertEquals(StringSearchFacet.ClauseRole.DEFAULT, term1.getClauseRoles().get(0)); assertEquals(StringSearchFacet.ClauseRole.AND, term3.getClauseRoles().get(0)); testClauses.clear(); // term with OR antecedent or postcedent receives OR role term1 = testInstance.new SearchTerm("kai", t, caps, marks, false); term2 = testInstance.new SearchTerm("OR", t, caps, marks, false); term3 = testInstance.new SearchTerm("ouk", t, caps, marks, false); testClauses.add(term1); testClauses.add(term2); testClauses.add(term3); testClauses = testTerm.assignClauseRoles(testClauses); assertEquals(StringSearchFacet.ClauseRole.OR, term1.getClauseRoles().get(0)); assertEquals(StringSearchFacet.ClauseRole.OR, term3.getClauseRoles().get(0)); testClauses.clear(); // term with NOT antecedent receives NOT role term1 = testInstance.new SearchTerm("NOT", t, caps, marks, false); term2 = testInstance.new SearchTerm("ouk", t, caps, marks, false); testClauses.add(term1); testClauses.add(term2); testClauses = testTerm.assignClauseRoles(testClauses); assertEquals(StringSearchFacet.ClauseRole.NOT, term2.getClauseRoles().get(0)); testClauses.clear(); // term with LEX antecedent receives LEX role term1 = testInstance.new SearchTerm("LEX", t, caps, marks, false); term2 = testInstance.new SearchTerm("luw", t, caps, marks, false); testClauses.add(term1); testClauses.add(term2); testClauses = testTerm.assignClauseRoles(testClauses); assertEquals(StringSearchFacet.ClauseRole.LEMMA, term2.getClauseRoles().get(0)); testClauses.clear(); // proximity searches assign pre- and post- roles correctly StringSearchFacet.SubClause term6 = testInstance.new SubClause("(luw THEN strategos)~15words", t, caps, marks); term1 = testInstance.new SearchTerm("luw", t, caps, marks, false); term2 = testInstance.new SearchTerm("15w", t, caps, marks, false); term3 = testInstance.new SearchTerm("strategos", t, caps, marks, false); testClauses.add(term1); testClauses.add(term2); testClauses.add(term3); testClauses = testTerm.assignClauseRoles(testClauses); assertEquals(StringSearchFacet.ClauseRole.START_PROX, term1.getClauseRoles().get(0)); assertEquals(StringSearchFacet.ClauseRole.OPERATOR, term2.getClauseRoles().get(0)); assertEquals(StringSearchFacet.ClauseRole.END_PROX, term3.getClauseRoles().get(0)); // mixed handlers add default roles appropriately // TODO: These actually work, but for code simplification may not be supported in future StringSearchFacet.SubClause term7 = testInstance.new SubClause("luw AND ouk OR kai", t, caps, marks); ArrayList<StringSearchFacet.SearchClause> subclauses7 = term7.getClauseComponents(); StringSearchFacet.SearchClause oukAndOrClause = subclauses7.get(2); assertEquals(2, oukAndOrClause.getClauseRoles().size()); assertTrue(oukAndOrClause.getClauseRoles().contains(StringSearchFacet.ClauseRole.AND)); assertTrue(oukAndOrClause.getClauseRoles().contains(StringSearchFacet.ClauseRole.OR)); StringSearchFacet.SubClause term8 = testInstance.new SubClause("kai THEN LEX luw", t, caps, marks); ArrayList<StringSearchFacet.SearchClause> subclauses8 = term8.getClauseComponents(); StringSearchFacet.SearchClause lemLuwClause = subclauses8.get(3); assertEquals(2, lemLuwClause.getClauseRoles().size()); assertTrue(lemLuwClause.getClauseRoles().contains(StringSearchFacet.ClauseRole.LEMMA)); assertTrue(lemLuwClause.getClauseRoles().contains(StringSearchFacet.ClauseRole.END_PROX)); } catch (StringSearchParsingException sspe) { fail("StringSearchParsingException erroneously thrown in test: " + sspe.getMessage()); } catch (Exception e) { fail("Exception erroneously thrown in assignClauseRoles test:" + e.getMessage()); } }