From de031f043f9918424b26534d233df90b7d5c42f9 Mon Sep 17 00:00:00 2001 From: cweiske Date: Sat, 3 Oct 2009 23:18:49 +0000 Subject: make tests run again (though they do not pass) git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@389 b3834d28-1941-0410-a4f8-b48e95affb8f --- tests/TagsCacheTest.php | 176 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 tests/TagsCacheTest.php (limited to 'tests/TagsCacheTest.php') diff --git a/tests/TagsCacheTest.php b/tests/TagsCacheTest.php new file mode 100644 index 0000000..f401ab6 --- /dev/null +++ b/tests/TagsCacheTest.php @@ -0,0 +1,176 @@ +us =SemanticScuttle_Service_Factory::getServiceInstance('User'); + $this->bs =SemanticScuttle_Service_Factory::getServiceInstance('Bookmark'); + $this->bs->deleteAll(); + $this->b2ts =SemanticScuttle_Service_Factory::getServiceInstance('Bookmark2Tag'); + $this->b2ts->deleteAll(); + $this->tts =SemanticScuttle_Service_Factory::getServiceInstance('Tag2Tag'); + $this->tts->deleteAll(); + $this->tsts =SemanticScuttle_Service_Factory::getServiceInstance('TagStat'); + $this->tsts->deleteAll(); + $this->tcs =SemanticScuttle_Service_Factory::getServiceInstance('TagCache'); + $this->tcs->deleteAll(); + } + + public function testInclusionAllowsToAddAndDeleteChildrenTags() { + //message_die(GENERAL_ERROR, $GLOBALS['dbname'].'1'); + + $tts = $this->tts; + $tcs = $this->tcs; + + // test adding children + $tcs->addChild('a', 'b', 1); + $tcs->addChild('a', 'c', 1); + $this->assertEquals(array('b','c'), $tcs->getChildren('a', 1)); + + // test adding a same child + $tcs->addChild('a', 'b', 1); + $this->assertEquals(array('b','c'), $tcs->getChildren('a', 1)); + + // test removing a child + $tcs->removeChild('a', 'b', 1); + $this->assertEquals(array('c'), $tcs->getChildren('a', 1)); + + // test removing a same child + $tcs->removeChild('a', 'b', 1); + $this->assertEquals(array('c'), $tcs->getChildren('a', 1)); + + // test existing child + $this->assertTrue($tcs->existsChild('a', 'c', 1)); + $this->assertTrue(!$tcs->existsChild('a', 'c', 2)); // wrong user + $this->assertTrue(!$tcs->existsChild('a', 'b', 1)); // wrong child + + // test removing several children + $tcs->addChild('e', 'f', 1); + $tcs->addChild('e', 'g', 1); + $tcs->addChild('e', 'h', 1); + $tcs->removeChild('e', NULL, 1); + + $this->assertTrue(!$tcs->existsChild('e', 'f', 1)); + $this->assertTrue(!$tcs->existsChild('e', 'g', 1)); + $this->assertTrue(!$tcs->existsChild('e', 'h', 1)); + + } + + public function testInclusionCacheIsUpdatedWhenATag2TagLinkIsCreatedOrRemoved() { + $tts = $this->tts; + $tcs = $this->tcs; + + // test inclusion without possible errors + $tts->addLinkedTags('a', 'b', '>', 1); + $tts->addLinkedTags('b', 'c', '>', 1); + $tts->addLinkedTags('c', 'd', '>', 1); + $tts->addLinkedTags('e', 'f', '>', 1); + $tts->addLinkedTags('b', 'e', '>', 1); + + $this->assertSame(array('b','c','d','e','f'), $tts->getAllLinkedTags('a', '>', 1)); + $this->assertSame(array('c','d','e','f'), $tts->getAllLinkedTags('b', '>', 1)); + + // test inclusion with deletion + $tts->removeLinkedTags('b', 'c', '>', 1); + $this->assertSame(array('b','e','f'), $tts->getAllLinkedTags('a', '>', 1)); + $this->assertSame(array('e','f'), $tts->getAllLinkedTags('b', '>', 1)); + $this->assertSame(array('d'), $tts->getAllLinkedTags('c', '>', 1)); + $this->assertSame(array('f'), $tts->getAllLinkedTags('e', '>', 1)); + + } + + public function testInclusionResistsToTagCycles() { + $tts = $this->tts; + $tcs = $this->tcs; + + $tts->addLinkedTags('a', 'b', '>', 1); + $tts->addLinkedTags('b', 'c', '>', 1); + $tts->addLinkedTags('c', 'a', '>', 1); // creates cycle a>c>a + + $this->assertSame(array('b','c'), $tts->getAllLinkedTags('a', '>', 1)); + $this->assertSame(array('c', 'a'), $tts->getAllLinkedTags('b', '>', 1)); + $this->assertSame(array('a', 'b'), $tts->getAllLinkedTags('c', '>', 1)); + } + + public function testSynonymyAllowsToAddAndDeleteSynonyms() { + $tts = $this->tts; + $tcs = $this->tcs; + + // simple synonymy + $tcs->addSynonym('a', 'b', 1); + $tcs->addSynonym('a', 'c', 1); + + $this->assertEquals(array('b', 'c'), $tcs->getSynonyms('a', 1)); + $this->assertEquals(array('c', 'a'), $tcs->getSynonyms('b', 1)); + $this->assertEquals(array('b', 'a'), $tcs->getSynonyms('c', 1)); + + //more advanced one 1 + $tcs->deleteByUser(1); + $tcs->addSynonym('a', 'b', 1); + $tcs->addSynonym('a', 'c', 1); + $tcs->addSynonym('d', 'e', 1); + $tcs->addSynonym('a', 'e', 1); + $this->assertEquals(array('b', 'c', 'e', 'd'), $tcs->getSynonyms('a', 1)); + + //more advanced one 2 + $tcs->deleteByUser(1); + $tcs->addSynonym('a', 'b', 1); + $tcs->addSynonym('a', 'c', 1); + $tcs->addSynonym('d', 'e', 1); + $tcs->addSynonym('a', 'd', 1); + $this->assertEquals(array('b', 'c', 'd', 'e'), $tcs->getSynonyms('a', 1)); + + //with Linked tags + $tcs->deleteByUser(1); + $tts->addLinkedTags('a', 'b', '=', 1); + $tts->addLinkedTags('c', 'd', '=', 1); + $tts->addLinkedTags('c', 'e', '=', 1); + $tts->addLinkedTags('e', 'a', '=', 1); + $this->assertEquals(array('b', 'e', 'c', 'd'), $tts->getAllLinkedTags('a', '=', 1)); + + } + + public function testInclusionTakesSynonymsIntoAccount() { + $tts = $this->tts; + $tcs = $this->tcs; + + $tts->addLinkedTags('a', 'b', '>', 1); + $tts->addLinkedTags('b', 'c', '>', 1); + $tts->addLinkedTags('d', 'e', '>', 1); + $tts->addLinkedTags('c', 'd', '=', 1); + + // results are put into cache + $this->assertEquals(array('b', 'c', 'd', 'e'), $tts->getAllLinkedTags('a', '>', 1)); + $this->assertEquals(array('d', 'e'), $tts->getAllLinkedTags('c', '>', 1)); + + // same results must be taken out from cache + $this->assertEquals(array('b', 'c', 'd', 'e'), $tts->getAllLinkedTags('a', '>', 1)); + $this->assertEquals(array('d', 'e'), $tts->getAllLinkedTags('c', '>', 1)); + + // check that result comes from cache (artificial changes in cache must appear in result) + $tcs->removeChild('a', 'e', 1); + $this->assertEquals(array('b', 'c', 'd'), $tts->getAllLinkedTags('a', '>', 1)); + + //cache must be deleted for user when links are modified + $tts->addLinkedTags('a', 'f', '=', 1); + $this->assertEquals(array(), $tcs->getChildren('a', 1)); + $this->assertEquals(array(), $tcs->getSynonyms('d', 1)); + } +} +?> -- cgit v1.2.3-54-g00ecf