tao-test/app/generis/test/integration/PropertyTest.php

176 lines
6.4 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2008-2010 (original work) Deutsche Institut für Internationale Pädagogische Forschung (under the project TAO-TRANSFER);
* 2009-2012 (update and modification) Public Research Centre Henri Tudor (under the project TAO-SUSTAIN & TAO-DEV);
* 2017 (update and modification) Open Assessment Technologies SA (under the project TAO-PRODUCT);
*/
namespace oat\generis\test\integration;
use oat\generis\model\GenerisRdf;
use oat\generis\model\OntologyRdf;
use oat\generis\model\WidgetRdf;
use oat\generis\test\GenerisPhpUnitTestRunner;
use \core_kernel_classes_ContainerCollection;
use \core_kernel_classes_Class;
use \core_kernel_classes_Resource;
use \core_kernel_classes_Property;
class PropertyTest extends GenerisPhpUnitTestRunner
{
/**
*
* @var core_kernel_classes_Property
*/
protected $object;
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function setUp(): void
{
GenerisPhpUnitTestRunner::initTest();
$this->object = new core_kernel_classes_Property(WidgetRdf::PROPERTY_WIDGET);
}
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function testGetDomain()
{
$domainCollection = $this->object->getDomain();
$this->assertTrue($domainCollection instanceof core_kernel_classes_ContainerCollection);
$domain = $domainCollection->get(0);
$this->assertEquals($domain->getUri(), OntologyRdf::RDF_PROPERTY);
$this->assertEquals($domain->getLabel(), 'Property');
$this->assertEquals($domain->getComment(), 'The class of RDF properties.');
}
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function testSetDomain()
{
$class = new core_kernel_classes_Class(GenerisRdf::GENERIS_BOOLEAN, __METHOD__);
$prop = $class->createProperty('test', 'test');
$domain = $prop->getDomain();
$this->assertEquals(1, $domain->count());
$this->assertEquals($class, $domain->get(0));
$widget = new core_kernel_classes_Class(WidgetRdf::CLASS_URI_WIDGET, __METHOD__);
$this->assertTrue($prop->setDomain($widget));
$this->assertEquals(2, $prop->getDomain()->count());
$this->assertGreaterThanOrEqual(0, $prop->getDomain()->indexOf($widget));
$this->assertGreaterThanOrEqual(0, $prop->getDomain()->indexOf($class));
//if domain already set return true
$this->assertTrue($prop->setDomain($class));
$this->assertEquals(2, $prop->getDomain()->count());
$this->assertGreaterThanOrEqual(0, $prop->getDomain()->indexOf($widget));
$this->assertGreaterThanOrEqual(0, $prop->getDomain()->indexOf($class));
$prop->delete(true);
}
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function testGetRange()
{
$range = $this->object->getRange();
$this->assertTrue($range instanceof core_kernel_classes_Class);
$this->assertEquals($range->getUri(), WidgetRdf::CLASS_URI_WIDGET);
$this->assertEquals($range->getLabel(), 'Widget Class');
$this->assertEquals($range->getComment(), 'The class of all possible widgets');
}
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function testGetWidget()
{
$widget = $this->object->getWidget();
$this->assertInstanceOf(core_kernel_classes_Resource::class, $widget);
$this->assertEquals($widget->getUri(), 'http://www.tao.lu/datatypes/WidgetDefinitions.rdf#ComboBox');
$this->assertEquals($widget->getLabel(), 'Drop down menu');
$this->assertEquals($widget->getComment(), 'In drop down menu, one may select 1 to N options');
}
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function testSetMultiple()
{
$class = new core_kernel_classes_Class(GenerisRdf::GENERIS_BOOLEAN, __METHOD__);
$prop = $class->createProperty('test', 'test');
$multipleProperty = new core_kernel_classes_Property(GenerisRdf::PROPERTY_MULTIPLE);
$this->assertEquals([], $prop->getPropertyValues($multipleProperty));
$prop->setMultiple(true);
$this->assertEquals([GenerisRdf::GENERIS_TRUE], $prop->getPropertyValues($multipleProperty));
$prop->delete(true);
}
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function testIsMultiple()
{
$class = new core_kernel_classes_Class(GenerisRdf::GENERIS_BOOLEAN, __METHOD__);
$prop = $class->createProperty('test', 'test');
$this->assertFalse($prop->isMultiple());
$prop->setMultiple(true);
$this->assertTrue($prop->isMultiple());
$new = new core_kernel_classes_Property($prop->getUri());
$this->assertTrue($new->isMultiple());
$prop->delete(true);
}
/**
*
* @author Lionel Lecaque, lionel@taotesting.com
*/
public function testDelete()
{
$class = new core_kernel_classes_Class(GenerisRdf::GENERIS_BOOLEAN, __METHOD__);
$prop = $class->createProperty('test', 'test');
$instance = $class->createInstance('test', 'test');
$instance->setPropertyValue($prop, GenerisRdf::GENERIS_TRUE);
$instance->setPropertyValue($prop, '3');
$this->assertArrayHasKey($prop->getUri(), $class->getProperties());
$val = $instance->getPropertyValues($prop);
$this->assertTrue(in_array(GenerisRdf::GENERIS_TRUE, $val));
$this->assertTrue(in_array(3, $val));
$this->assertTrue($prop->delete(true));
$this->assertEquals([], $instance->getPropertyValues($prop));
$this->assertArrayNotHasKey($prop->getUri(), $class->getProperties());
$this->assertTrue($instance->delete());
}
}