public function testRouteTest() { $assessmentSections = new AssessmentSectionCollection(); $assessmentSections[] = new AssessmentSection('S1', 'Section 1', true); $assessmentSections[] = new AssessmentSection('S2', 'Section 2', true); $q1 = new AssessmentItemRef('Q1', 'Q1.xml'); $q1->setCategories(new IdentifierCollection(array('mathematics', 'expert'))); $q2 = new AssessmentItemRef('Q2', 'Q2.xml'); $q2->setCategories(new IdentifierCollection(array('sciences', 'expert'))); $q3 = new AssessmentItemRef('Q3', 'Q3.xml'); $q3->setCategories(new IdentifierCollection(array('mathematics'))); $q4 = new AssessmentItemRef('Q4', 'Q4.xml'); $sectionPartsS1 = new SectionPartCollection(array($q1, $q2, $q3, $q4)); $assessmentSections['S1']->setSectionParts($sectionPartsS1); $q5 = new AssessmentItemRef('Q5', 'Q5.xml'); $q6 = new AssessmentItemRef('Q6', 'Q6.xml'); $q6->setCategories(new IdentifierCollection(array('mathematics'))); $sectionPartsS2 = new SectionPartCollection(array($q5, $q6)); $assessmentSections['S2']->setSectionParts($sectionPartsS2); $testPart = new TestPart('TP1', $assessmentSections); $testPart->setAssessmentSections($assessmentSections); $assessmentTest = new AssessmentTest('test', 'A Test', new TestPartCollection(array($testPart))); $route = new Route(); $route->addRouteItem($sectionPartsS1['Q1'], $assessmentSections['S1'], $testPart, $assessmentTest); $route->addRouteItem($sectionPartsS1['Q2'], $assessmentSections['S1'], $testPart, $assessmentTest); $route->addRouteItem($sectionPartsS1['Q3'], $assessmentSections['S1'], $testPart, $assessmentTest); $route->addRouteItem($sectionPartsS1['Q4'], $assessmentSections['S1'], $testPart, $assessmentTest); $route->addRouteItem($sectionPartsS2['Q5'], $assessmentSections['S2'], $testPart, $assessmentTest); $route->addRouteItem($sectionPartsS2['Q6'], $assessmentSections['S2'], $testPart, $assessmentTest); $this->assertEquals('Q1', $route->getFirstRouteItem()->getAssessmentItemRef()->getIdentifier()); $this->assertEquals('Q6', $route->getLastRouteItem()->getAssessmentItemRef()->getIdentifier()); // Is Q3 in TP1? $this->assertTrue($route->isInTestPart(2, $testPart)); // What are the RouteItem objects involved in each AssessmentItemRef ? $involved = $route->getRouteItemsByAssessmentItemRef($sectionPartsS1['Q1']); $this->assertEquals(1, count($involved)); $this->assertEquals('Q1', $involved[0]->getAssessmentItemRef()->getIdentifier()); $involved = $route->getRouteItemsByAssessmentItemRef($sectionPartsS1['Q2']); $this->assertEquals(1, count($involved)); $this->assertEquals('Q2', $involved[0]->getAssessmentItemRef()->getIdentifier()); $involved = $route->getRouteItemsByAssessmentItemRef($sectionPartsS1['Q3']); $this->assertEquals(1, count($involved)); $this->assertEquals('Q3', $involved[0]->getAssessmentItemRef()->getIdentifier()); $involved = $route->getRouteItemsByAssessmentItemRef($sectionPartsS1['Q4']); $this->assertEquals(1, count($involved)); $this->assertEquals('Q4', $involved[0]->getAssessmentItemRef()->getIdentifier()); $involved = $route->getRouteItemsByAssessmentItemRef($sectionPartsS2['Q5']); $this->assertEquals(1, count($involved)); $this->assertEquals('Q5', $involved[0]->getAssessmentItemRef()->getIdentifier()); $involved = $route->getRouteItemsByAssessmentItemRef($sectionPartsS2['Q6']); $this->assertEquals(1, count($involved)); $this->assertEquals('Q6', $involved[0]->getAssessmentItemRef()->getIdentifier()); // What are the RouteItem objects involded in part 'TP1'? $tp1RouteItems = $route->getRouteItemsByTestPart($testPart); $this->assertEquals(6, count($tp1RouteItems)); $tp1RouteItems = $route->getRouteItemsByTestPart('TP1'); $this->assertEquals(6, count($tp1RouteItems)); try { $tp1RouteItems = $route->getRouteItemsByTestPart('TPX'); $this->assertFalse(true); } catch (OutOfBoundsException $e) { $this->assertTrue(true); } // What are the RouteItems objects involved in section 'S1'? $s1RouteItems = $route->getRouteItemsByAssessmentSection($assessmentSections['S1']); $this->assertEquals(4, count($s1RouteItems)); $this->assertEquals('Q1', $s1RouteItems[0]->getAssessmentItemRef()->getIdentifier()); $this->assertEquals('Q2', $s1RouteItems[1]->getAssessmentItemRef()->getIdentifier()); $this->assertEquals('Q3', $s1RouteItems[2]->getAssessmentItemRef()->getIdentifier()); $this->assertEquals('Q4', $s1RouteItems[3]->getAssessmentItemRef()->getIdentifier()); // What are the RouteItems objects involved in section 'S2'? $s2RouteItems = $route->getRouteItemsByAssessmentSection('S2'); $this->assertEquals(2, count($s2RouteItems)); $this->assertEquals('Q5', $s2RouteItems[0]->getAssessmentItemRef()->getIdentifier()); $this->assertEquals('Q6', $s2RouteItems[1]->getAssessmentItemRef()->getIdentifier()); // What are the RouteItems objects involded in an unknown section :-D ? // An OutOfBoundsException must be thrown. try { $sXRouteItems = $route->getRouteItemsByAssessmentSection(new AssessmentSection('SX', 'Unknown Section', true)); $this->assertTrue(false, 'An exception must be thrown because the AssessmentSection object is not known by the Route.'); } catch (OutOfBoundsException $e) { $this->assertTrue(true); } // Only 1 one occurence of each selected item found? foreach (array_merge($sectionPartsS1->getArrayCopy(), $sectionPartsS2->getArrayCopy()) as $itemRef) { $this->assertEquals(1, $route->getOccurenceCount($itemRef)); } $assessmentItemRefs = $route->getAssessmentItemRefs(); $this->assertEquals(6, count($assessmentItemRefs)); // test to retrieve items by category. $mathRefs = $route->getAssessmentItemRefsByCategory('mathematics'); $this->assertEquals(3, count($mathRefs)); $sciencesRefs = $route->getAssessmentItemRefsByCategory('sciences'); $this->assertEquals(1, count($sciencesRefs)); $mathAndSciences = $route->getAssessmentItemRefsByCategory(new IdentifierCollection(array('mathematics', 'sciences'))); $this->assertEquals(4, count($mathAndSciences)); $expertRefs = $route->getAssessmentItemRefsByCategory('expert'); $this->assertEquals(2, count($expertRefs)); // test to retrieve items by section. $section1Refs = $route->getAssessmentItemRefsBySection('S1'); $this->assertEquals(4, count($section1Refs)); $section2Refs = $route->getAssessmentItemRefsBySection('S2'); $this->assertEquals(2, count($section2Refs)); // test to retrieve items by section/category. $section1Refs = $route->getAssessmentItemRefsSubset('S1'); $this->assertEquals(4, count($section1Refs)); $mathRefs = $route->getAssessmentItemRefsSubset('', new IdentifierCollection(array('mathematics'))); $this->assertEquals(3, count($mathRefs)); $s1MathRefs = $route->getAssessmentItemRefsSubset('S1', new IdentifierCollection(array('mathematics'))); $this->assertEquals(2, count($s1MathRefs)); // go by exclusion. $exclusionRefs = $route->getAssessmentItemRefsSubset('', null, new IdentifierCollection(array('sciences', 'expert'))); $this->assertEquals(4, count($exclusionRefs)); $this->assertTrue(isset($exclusionRefs['Q3'])); $this->assertTrue(isset($exclusionRefs['Q4'])); $this->assertTrue(isset($exclusionRefs['Q5'])); $this->assertTrue(isset($exclusionRefs['Q6'])); }