1*5153720fSfkaag71<?php 2*5153720fSfkaag71require_once('stratatest.inc.php'); 3*5153720fSfkaag71require_once(DOKU_INC.'lib/plugins/strata/helper/util.php'); 4*5153720fSfkaag71 5*5153720fSfkaag71/** 6*5153720fSfkaag71 * Tests query. 7*5153720fSfkaag71 * 8*5153720fSfkaag71 * @group plugin_strata 9*5153720fSfkaag71 * @group plugins 10*5153720fSfkaag71 */ 11*5153720fSfkaag71class Strata_Query_UnitTestCase extends Strata_UnitTestCase { 12*5153720fSfkaag71 13*5153720fSfkaag71 function setup() { 14*5153720fSfkaag71 parent::setup(); 15*5153720fSfkaag71 // Load types 16*5153720fSfkaag71 $types = new helper_plugin_strata_util(); 17*5153720fSfkaag71 $string = $types->loadType('string'); 18*5153720fSfkaag71 $ref = $types->loadType('ref'); 19*5153720fSfkaag71 $image = $types->loadType('image'); 20*5153720fSfkaag71 21*5153720fSfkaag71 // Create objects 22*5153720fSfkaag71 $bob = $ref->normalize('Bob', 'person'); 23*5153720fSfkaag71 $alice = $ref->normalize('Alice', 'person'); 24*5153720fSfkaag71 $carol = $ref->normalize('Carol', 'person'); 25*5153720fSfkaag71 26*5153720fSfkaag71 $img_bob = $ref->normalize('Bob.png', 50); 27*5153720fSfkaag71 $img_alice = $ref->normalize('Alice.svg', 50); 28*5153720fSfkaag71 $img_carol = $ref->normalize('Carol.jpg', 50); 29*5153720fSfkaag71 30*5153720fSfkaag71 // Fill database 31*5153720fSfkaag71 $this->_triples->addTriple($bob, 'class', 'person', 'wiki'); 32*5153720fSfkaag71 $this->_triples->addTriple($alice, 'class', 'person', 'wiki'); 33*5153720fSfkaag71 $this->_triples->addTriple($carol, 'class', 'person', 'wiki'); 34*5153720fSfkaag71 35*5153720fSfkaag71 $this->_triples->addTriple($bob, 'name', 'Bob', 'wiki'); 36*5153720fSfkaag71 $this->_triples->addTriple($alice, 'name', 'Alice', 'wiki'); 37*5153720fSfkaag71 $this->_triples->addTriple($carol, 'name', 'Carol', 'wiki'); 38*5153720fSfkaag71 39*5153720fSfkaag71 $this->_triples->addTriple($bob, 'identifier', 'Β', 'wiki'); 40*5153720fSfkaag71 $this->_triples->addTriple($alice, 'identifier', 'α', 'wiki'); 41*5153720fSfkaag71 $this->_triples->addTriple($carol, 'identifier', 'γ', 'wiki'); 42*5153720fSfkaag71 43*5153720fSfkaag71 $this->_triples->addTriple($bob, 'knows', $alice, 'wiki'); 44*5153720fSfkaag71 $this->_triples->addTriple($alice, 'knows', $carol, 'wiki'); 45*5153720fSfkaag71 $this->_triples->addTriple($carol, 'knows', $bob, 'wiki'); 46*5153720fSfkaag71 $this->_triples->addTriple($carol, 'knows', $alice, 'wiki'); 47*5153720fSfkaag71 48*5153720fSfkaag71 $this->_triples->addTriple($bob, 'likes', $alice, 'wiki'); 49*5153720fSfkaag71 50*5153720fSfkaag71 $this->_triples->addTriple($bob, 'looks like', $img_bob, 'wiki'); 51*5153720fSfkaag71 $this->_triples->addTriple($alice, 'looks like', $img_alice, 'wiki'); 52*5153720fSfkaag71 $this->_triples->addTriple($carol, 'looks like', $img_carol, 'wiki'); 53*5153720fSfkaag71 54*5153720fSfkaag71 $this->_triples->addTriple($bob, 'is rated', 8, 'wiki'); 55*5153720fSfkaag71 $this->_triples->addTriple($alice, 'is rated', 10, 'wiki'); 56*5153720fSfkaag71 $this->_triples->addTriple($carol, 'is rated', 1, 'wiki'); 57*5153720fSfkaag71 58*5153720fSfkaag71 $this->_triples->addTriple($bob, 'has length', '5 ft 10 in', 'wiki'); 59*5153720fSfkaag71 $this->_triples->addTriple($alice, 'has length', '5 ft 5 in', 'wiki'); 60*5153720fSfkaag71 $this->_triples->addTriple($carol, 'has length', '4 ft 11 in', 'wiki'); 61*5153720fSfkaag71 62*5153720fSfkaag71 $this->_triples->addTriple($bob, 'tax rate', '25%', 'wiki'); 63*5153720fSfkaag71 $this->_triples->addTriple($alice, 'tax rate', '10%', 'wiki'); 64*5153720fSfkaag71 $this->_triples->addTriple($carol, 'tax rate', '2%', 'wiki'); 65*5153720fSfkaag71 } 66*5153720fSfkaag71 67*5153720fSfkaag71 function assertQueryResult($query, $expectedResult, $message='') { 68*5153720fSfkaag71 $relations = $this->_triples->queryRelations($query); 69*5153720fSfkaag71 if ($relations === false) { 70*5153720fSfkaag71 $this->fail($message.' Query failed.'); 71*5153720fSfkaag71 } else { 72*5153720fSfkaag71 $this->assertIteratorsEqual($relations, new ArrayIterator($expectedResult), $message); 73*5153720fSfkaag71 $relations->closeCursor(); 74*5153720fSfkaag71 } 75*5153720fSfkaag71 } 76*5153720fSfkaag71 77*5153720fSfkaag71 function assertIteratorsEqual($x, $y, $message='') { 78*5153720fSfkaag71 $message = $message?$message.': ':''; 79*5153720fSfkaag71 do { 80*5153720fSfkaag71 $this->assertEquals($x->valid(), $y->valid(), $message.'Number of result and expected rows differ: %s'); 81*5153720fSfkaag71 $this->assertEquals($x->current(), $y->current(), $message.'Result row differs from expected one: %s'); 82*5153720fSfkaag71 $x->next(); 83*5153720fSfkaag71 $y->next(); 84*5153720fSfkaag71 } while ($x->valid() || $y->valid()); 85*5153720fSfkaag71 } 86*5153720fSfkaag71} 87