package au.com.langdale.cimtoole.test.headless; import java.io.IOException; import java.io.StringReader; import java.util.Collections; import java.util.List; import java.util.Map; import com.hp.hpl.jena.graph.Graph; import com.hp.hpl.jena.mem.GraphMem; import com.hp.hpl.jena.shared.PrefixMapping; import au.com.langdale.cimtoole.test.SplitModelTest; import au.com.langdale.inference.AsyncModel; import au.com.langdale.inference.Extractor; import au.com.langdale.inference.ProxyRegistry; import au.com.langdale.inference.RuleParser; import au.com.langdale.inference.StandardFunctorActions; import au.com.langdale.inference.RuleParser.ParserException; import au.com.langdale.splitmodel.SplitReader; public class ExtractorTest extends SplitModelTest { public static final String TEST = "http://langdale.com.au/2007/test#"; protected AsyncModel reader; @Override protected void setUp() throws Exception { super.setUp(); reader = new SplitReader(SAMPLE_FILES + SPLIT_MODEL); } protected List parse(String rules) throws IOException, ParserException { RuleParser parser = new RuleParser(new StringReader(rules), PrefixMapping.Factory.create(), new ProxyRegistry()); parser.registerPrefix("cim", CIM); parser.registerPrefix("net", NET); parser.registerPrefix("tt", TEST); return parser.parse(); } protected Graph runExtractor(List rules, Map functors) throws IOException { Extractor extractor = new Extractor(reader, new GraphMem(), rules, functors); extractor.run(); Graph result = extractor.getResult(); return result; } public final void testEmpty() throws Exception { Graph result = runExtractor(Collections.EMPTY_LIST, Collections.EMPTY_MAP); assertEquals(0, result.size()); } public final void testQuery01() throws Exception { List rules = parse( "(net:_1744201 cim:IdentifiedObject.name ?v) -> (tt:Result tt:value ?v)." ); Graph result = runExtractor(rules , Collections.EMPTY_MAP); assertEquals(0, result.size()); } public final void testQuery02() throws Exception { List rules = parse( "(net:_1744201 cim:IdentifiedObject.localName ?v) -> (tt:Result tt:value ?v)." ); Graph result = runExtractor(rules , Collections.EMPTY_MAP); assertEquals(1, result.size()); assertTrue(result.contains(pattern(TEST + "Result", TEST + "value", "VOLTAGE").asTriple())); } public final void testQuery03() throws Exception { List rules = parse( "(net:_2217201 ?p ?v) -> (tt:Result tt:value ?v)." ); Graph result = runExtractor(rules , Collections.EMPTY_MAP); assertEquals(9, result.size()); } public final void testQuery04() throws Exception { List rules = parse( "(net:_2217201 ?p ?v) (?v ?q ?w) -> (tt:Result tt:value ?v)." ); Graph result = runExtractor(rules , Collections.EMPTY_MAP); assertEquals(4, result.size()); } public final void testQuery05() throws Exception { List rules = parse( "(net:_2217201 ?p ?v) (?v ?q ?w) -> (tt:Result tt:value ?w)." ); Graph result = runExtractor(rules , Collections.EMPTY_MAP); assertEquals(14, result.size()); } public final void testAxiom01() throws Exception { List rules = parse( "axiom(tt:Result tt:value 'example') -> (tt:Result tt:value 'example')." ); Graph result = runExtractor(rules, StandardFunctorActions.create()); assertEquals(0, result.size()); } public final void testAxiom02() throws Exception { List rules = parse( "-> (tt:Result tt:value 'example').\n" + "axiom(tt:Result tt:value 'example') -> (tt:Result tt:value 'example')." ); Graph result = runExtractor(rules , StandardFunctorActions.create()); assertEquals(1, result.size()); assertTrue(result.contains(pattern(TEST + "Result", TEST + "value", "example").asTriple())); } public final void testSame01() throws Exception { List rules = parse( "same(tt:a tt:y) -> (tt:Result tt:value 'example')." ); Graph result = runExtractor(rules, StandardFunctorActions.create()); assertEquals(0, result.size()); } public final void testSame02() throws Exception { List rules = parse( "same(tt:a tt:a) -> (tt:Result tt:value 'example')." ); Graph result = runExtractor(rules, StandardFunctorActions.create()); assertEquals(1, result.size()); } public final void testAny01() throws Exception { List rules = parse( "notAny(net:_2217201 ?p ?v) -> (tt:Result tt:value 'example')." ); Graph result = runExtractor(rules, StandardFunctorActions.create()); assertEquals(0, result.size()); } public final void testAny02() throws Exception { List rules = parse( "any(net:_2217201 ?p ?v) -> (tt:Result tt:value 'example')." ); Graph result = runExtractor(rules, StandardFunctorActions.create()); assertEquals(1, result.size()); } }