/*
* Copyright 2015
* Ubiquitous Knowledge Processing (UKP) Lab and FG Language Technology
* Technische Universität Darmstadt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.tudarmstadt.ukp.clarin.webanno.constraints.eval;
import static org.apache.uima.fit.util.JCasUtil.select;
import static org.junit.Assert.assertEquals;
import java.io.FileInputStream;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.uima.fit.factory.JCasFactory;
import org.apache.uima.jcas.JCas;
import org.junit.Ignore;
import org.junit.Test;
import de.tudarmstadt.ukp.clarin.webanno.constraints.evaluator.ConstraintsVerifier;
import de.tudarmstadt.ukp.clarin.webanno.constraints.evaluator.Verifiable;
import de.tudarmstadt.ukp.clarin.webanno.constraints.grammar.ConstraintsGrammar;
import de.tudarmstadt.ukp.clarin.webanno.constraints.grammar.syntaxtree.Parse;
import de.tudarmstadt.ukp.clarin.webanno.constraints.model.ParsedConstraints;
import de.tudarmstadt.ukp.clarin.webanno.constraints.visitor.ParserVisitor;
import de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Lemma;
@Ignore("Not fully implemented yet")
public class ConstraintsVerifierTest
{
@Test
public void test()
throws Exception
{
ConstraintsGrammar parser = new ConstraintsGrammar(new FileInputStream(
"src/test/resources/rules/6.rules"));
Parse p = parser.Parse();
ParsedConstraints constraints = p.accept(new ParserVisitor());
// Get imports
Map<String, String> imports = new LinkedHashMap<>();
imports = constraints.getImports();
// Get rules
// List<Rule> rules = new ArrayList<>();
JCas jcas = JCasFactory.createJCas();
jcas.setDocumentText("Just some text.");
Lemma lemma1 = new Lemma(jcas, 0, 1);
lemma1.setValue("good");
lemma1.addToIndexes();
Lemma lemma2 = new Lemma(jcas, 1, 2);
lemma2.setValue("bad");
lemma2.addToIndexes();
Verifiable cVerifier = new ConstraintsVerifier();
for (Lemma lemma : select(jcas, Lemma.class)) {
if (lemma == lemma1) {
assertEquals(true, cVerifier.verify(lemma, constraints));
}
if (lemma == lemma2) {
assertEquals(false, cVerifier.verify(lemma, constraints));
}
}
}
// private boolean verify(FeatureStructure aFS, Map<String, String>
// aImports, List<Rule> aRules)
// {
// boolean isOk = false;
// Type type = aFS.getType();
// for (Feature feature : type.getFeatures()) {
// if (feature.getRange().isPrimitive()) {
// String value = aFS.getFeatureValueAsString(feature);
// // Check if all the feature values are ok according to the rules;
// }
// else {
// // Here some recursion would be in order
// }
// }
// return isOk;
// }
}