*/ namespace oat\taoTests\test\integration; use oat\generis\test\GenerisPhpUnitTestRunner; use oat\taoTests\models\runner\time\TimePoint; class TimePointTest extends GenerisPhpUnitTestRunner { /** * tests initialization */ public function setUp(): void { parent::setUp(); parent::initTest(); } /** * @dataProvider taoTestSerializeProvider * @param $tags * @param $timestamp * @param $type * @param $target */ public function testJsonSerialize($tags, $timestamp, $type, $target) { $timePoint = new TimePoint($tags, $timestamp, $type, $target); $data = $timePoint->jsonSerialize(); $this->assertEquals($timePoint->getTimestamp(), $data['ts']); $this->assertEquals($timePoint->getTarget(), $data['target']); $this->assertEquals($timePoint->getTags(), $data['tags']); $this->assertEquals($timePoint->getType(), $data['type']); $this->assertEquals(json_encode($data), json_encode($timePoint)); } /** * @dataProvider taoTestSerializeProvider * @param $tags * @param $timestamp * @param $type * @param $target */ public function testToArray($tags, $timestamp, $type, $target) { $timePoint = new TimePoint($tags, $timestamp, $type, $target); $data = $timePoint->toArray(); $this->assertEquals($timePoint->getTimestamp(), $data['ts']); $this->assertEquals($timePoint->getTarget(), $data['target']); $this->assertEquals($timePoint->getTags(), $data['tags']); $this->assertEquals($timePoint->getType(), $data['type']); } /** * @dataProvider taoTestSerializeProvider * @param $tags * @param $timestamp * @param $type * @param $target */ public function testFromArray($tags, $timestamp, $type, $target) { $timePoint = new TimePoint(); $timePoint->fromArray([ 'ts' => $timestamp, 'type' => $type, 'target' => $target, 'tags' => $tags, ]); $expected = [ 'ts' => $timestamp, 'type' => $type, 'target' => $target, 'tags' => (array)$tags, ]; $this->assertEquals($expected['ts'], $timePoint->getTimestamp()); $this->assertEquals($expected['target'], $timePoint->getTarget()); $this->assertEquals($expected['tags'], $timePoint->getTags()); $this->assertEquals($expected['type'], $timePoint->getType()); } /** * @dataProvider taoTestSerializeProvider * @param $tags * @param $timestamp * @param $type * @param $target */ public function testSerialize($tags, $timestamp, $type, $target) { $timePoint = new TimePoint($tags, $timestamp, $type, $target); $timePointUnserialized = new TimePoint(); $data = $timePoint->serialize(); $timePointUnserialized->unserialize($data); $this->assertEquals($timePoint->getTimestamp(), $timePointUnserialized->getTimestamp()); $this->assertEquals($timePoint->getTarget(), $timePointUnserialized->getTarget()); $this->assertEquals($timePoint->getTags(), $timePointUnserialized->getTags()); $this->assertEquals($timePoint->getType(), $timePointUnserialized->getType()); } /** * @dataProvider taoTestSerializeProvider * @param $tags * @param $timestamp * @param $type * @param $target */ public function testUnserialize($tags, $timestamp, $type, $target) { $timePoint = new TimePoint($tags, $timestamp, $type, $target); $timePointUnserialized = new TimePoint(); $data = $timePoint->serialize(); $timePointUnserialized->unserialize($data); $this->assertEquals($timePointUnserialized->getTimestamp(), $timePoint->getTimestamp()); $this->assertEquals($timePointUnserialized->getTarget(), $timePoint->getTarget()); $this->assertEquals($timePointUnserialized->getTags(), $timePoint->getTags()); $this->assertEquals($timePointUnserialized->getType(), $timePoint->getType()); } /** * Test TimePoint::addTag() method */ public function testAddTag() { $timePoint = new TimePoint(); $timePoint->addTag('tag1'); $this->assertEquals($timePoint->getTags(), ['tag1']); $timePoint->addTag('tag2'); $this->assertEquals($timePoint->getTags(), ['tag1', 'tag2']); } /** * Test TimePoint::removeTag() method */ public function testRemoveTag() { $timePoint = new TimePoint(); $timePoint->setTags(['tag1', 'tag2', 'tag3']); $this->assertEquals($timePoint->getTags(), ['tag1', 'tag2', 'tag3']); $timePoint->removeTag('tag2'); $this->assertEquals($timePoint->getTags(), ['tag1', 'tag3']); $timePoint->removeTag('tag1'); $this->assertEquals($timePoint->getTags(), ['tag3']); $timePoint->removeTag('tag3'); $this->assertEquals($timePoint->getTags(), []); } /** * Test TimePoint::setTags() method */ public function testSetTags() { $timePoint = new TimePoint(); $this->assertEquals($timePoint->getTags(), []); $timePoint->setTags(['tag1', 'tag2', 'tag3']); $this->assertEquals($timePoint->getTags(), ['tag1', 'tag2', 'tag3']); $timePoint->setTags(['tag4', 'tag5', 'tag6']); $this->assertEquals($timePoint->getTags(), ['tag4', 'tag5', 'tag6']); $timePoint->setTags('stringTag'); $this->assertEquals($timePoint->getTags(), ['stringTag']); } /** * Test TimePoint::getRef() method */ public function testGetRef() { $timePoint = new TimePoint(['a', 'b', 'c']); $timePoint2 = new TimePoint(['c', 'b', 'a']); $timePoint3 = new TimePoint(['a', 'b', 'x']); $this->assertEquals($timePoint->getRef(), $timePoint2->getRef()); $this->assertNotEquals($timePoint->getRef(), $timePoint3->getRef()); } /** * Test TimePoint::testGetTag() method */ public function testGetTag() { $timePoint = new TimePoint(['a', 'b', 'c']); $this->assertEquals('a', $timePoint->getTag(0)); $this->assertEquals('b', $timePoint->getTag(1)); $this->assertEquals('c', $timePoint->getTag(2)); } /** * Test TimePoint::match() method */ public function testMatch() { $timePoint = new TimePoint(['a', 'b', 'c'], null, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT); $this->assertTrue($timePoint->match(['a', 'b', 'c'], TimePoint::TYPE_ALL, TimePoint::TARGET_ALL)); $this->assertTrue($timePoint->match(['b', 'c'], TimePoint::TYPE_ALL, TimePoint::TARGET_ALL)); $this->assertTrue($timePoint->match(null, TimePoint::TYPE_ALL, TimePoint::TARGET_ALL)); $this->assertTrue($timePoint->match(['a', 'b', 'c'], TimePoint::TYPE_START, TimePoint::TARGET_CLIENT)); $this->assertTrue($timePoint->match(['a', 'b', 'c'], TimePoint::TYPE_START)); $this->assertTrue($timePoint->match(['a', 'b', 'c'])); $this->assertFalse($timePoint->match(['b', 'c', 'd'], TimePoint::TYPE_ALL, TimePoint::TARGET_ALL)); $this->assertFalse($timePoint->match(['a', 'b', 'c'], TimePoint::TYPE_END, TimePoint::TARGET_ALL)); $this->assertFalse($timePoint->match(['a', 'b', 'c'], TimePoint::TYPE_START, TimePoint::TARGET_SERVER)); $this->assertFalse($timePoint->match(['a', 'b', 'c'], TimePoint::TYPE_END, TimePoint::TARGET_SERVER)); } /** * Test TimePoint::compare() method * @dataProvider taoTestCompareProvider */ public function testCompare(TimePoint $firstPoint, TimePoint $secondPoint, $expectedResult) { $this->assertEquals($expectedResult, $firstPoint->compare($secondPoint)); } /** * Test TimePoint::sort() method * @dataProvider taoTestSortProvider */ public function testSort(array $range, array $expectedResult) { $this->assertEquals($expectedResult, TimePoint::sort($range)); } /** * @return array */ public function taoTestSerializeProvider() { return [ [ 'abc', 1459335349, TimePoint::TYPE_START, TimePoint::TARGET_SERVER, ], [ ['a', 'b', 'c'], 1459335572, TimePoint::TYPE_START, TimePoint::TARGET_SERVER, ], [ null, null, null, null, ], ]; } /** * @return array */ public function taoTestCompareProvider() { return [ [ new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), new TimePoint(null, 1459335311, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), -11 * TimePoint::PRECISION, ], [ new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), new TimePoint(null, 1459335289, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), 11 * TimePoint::PRECISION, ], [ new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), new TimePoint(null, 1459335300, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT), -1, ], [ new TimePoint(null, 1459335300, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT), new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), 1, ], [ new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), 1, ], [ new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), new TimePoint(null, 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), -1, ], ]; } /** * @return array */ public function taoTestSortProvider() { $points1 = [ 0 => new TimePoint(['item-1', 'item-1#0'], 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 1 => new TimePoint(['item-2', 'item-2#0'], 1459335320, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 2 => new TimePoint(['item-1', 'item-1#1'], 1459335340, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 3 => new TimePoint(['item-1', 'item-1#0'], 1459335310, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), 4 => new TimePoint(['item-2', 'item-2#0'], 1459335330, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), 5 => new TimePoint(['item-1', 'item-1#1'], 1459335350, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), ]; $points2 = [ 0 => new TimePoint(['item-1', 'item-1#0'], 1459335300, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 1 => new TimePoint(['item-2', 'item-2#0'], 1459335320, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 2 => new TimePoint(['item-1', 'item-1#1'], 1459335340, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 3 => new TimePoint(['item-1', 'item-1#0'], 1459335305, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), 4 => new TimePoint(['item-2', 'item-2#0'], 1459335325, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), 5 => new TimePoint(['item-1', 'item-1#1'], 1459335345, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT), 6 => new TimePoint(['item-1', 'item-1#0'], 1459335315, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), 7 => new TimePoint(['item-2', 'item-2#0'], 1459335335, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), 8 => new TimePoint(['item-1', 'item-1#1'], 1459335355, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), 9 => new TimePoint(['item-1', 'item-1#0'], 1459335310, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT), 10 => new TimePoint(['item-2', 'item-2#0'], 1459335330, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT), 11 => new TimePoint(['item-1', 'item-1#1'], 1459335350, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT), ]; $points3 = [ 0 => new TimePoint(['item-1', 'item-1#0'], 1460116638.5226, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 1 => new TimePoint(['item-1', 'item-1#0'], 1460116645.4868, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), 2 => new TimePoint(['item-1', 'item-1#0'], 1460116646.2684, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 3 => new TimePoint(['item-1', 'item-1#0'], 1460116653.7042, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), 4 => new TimePoint(['item-1', 'item-1#0'], 1460116733.6273, TimePoint::TYPE_START, TimePoint::TARGET_SERVER), 5 => new TimePoint(['item-1', 'item-1#0'], 1460116784.4006, TimePoint::TYPE_END, TimePoint::TARGET_SERVER), ]; return [ [ $points1, [ $points1[1], $points1[4], // item-2#0 $points1[2], $points1[5], // item-1#1 $points1[0], $points1[3], // item-1#0 ], ], [ $points2, [ $points2[4], $points2[10], // item-2#0 client $points2[1], $points2[7], // item-2#0 server $points2[5], $points2[11], // item-1#1 client $points2[2], $points2[8], // item-1#1 server $points2[3], $points2[9], // item-1#0 client $points2[0], $points2[6], // item-1#0 server ], ], [ $points3, $points3, ] ]; } }