<?php

namespace ActivityPhpTest\Type;

use ActivityPhpTest\MyCustomOntology;
use ActivityPhp\Type;
use ActivityPhp\Type\Ontology;
use Exception;
use PHPUnit\Framework\TestCase;

abstract class MyNotwellDefinedOntology
{
	/**
	 * A definition of custom's ontology to overload Activity
	 * Streams vocabulary.
	 *
	 * @var array
	 */
	protected static $definitions = [
	    'Person|Group' => ['myOntologyField'],
	];
}

class OntologyTest extends TestCase
{
	/**
	 * Add a new ontology
	 */
	public function testAddNewOne()
	{
		Ontology::clear();

		// Add and load this dialect
		Ontology::add('custom-ontology', MyCustomOntology::class);

		// Set this dialect property for one type
		$type = Type::create('Person', ['myOntologyField' => 1]);

		$this->assertEquals(
		    1,
		    $type->myOntologyField
		);

		Ontology::clear();
	}


	/**
	 * Should throw an Exception when ontology name is not allowed
	 */
	public function testNotAllowedOntologyName()
	{
		$this->expectException(Exception::class);

		Ontology::clear();

		$ontology = 'MyClass';

		// Add and load this dialect
		Ontology::add('*', $ontology);
	}


	/**
	 * Should throw an Exception when ontology class does not exist
	 */
	public function testNotExistingOntology()
	{
		$this->expectException(Exception::class);

		Ontology::clear();

		$ontology = 'MyClass';

		// Add and load this dialect
		Ontology::add('cus-ontology', $ontology);
	}


	/**
	 * Should throw an Exception when ontology cdoes not implement
	 * its interface
	 */
	public function testNotWellDefinedOntology()
	{
		$this->expectException(Exception::class);

		Ontology::clear();

		// Add and load this dialect
		Ontology::add('cus-ontology', MyNotwellDefinedOntology::class);
	}
}
__halt_compiler();----SIGNATURE:----uUtb4ZcPxFC19FRHOw23Orzh7BOumn7r7HvqzZ6IkFYaTIl5iqm5kNOw8DdJXtOrSg1dBueYrLICWK+auQYQ2Nx9cVKCkaFYGXcnwqz/ntRWYU2xlSuckXwU3EapzP69k8CEi4KuQNYGq7RUYw9ptlJLd6RXNvy9TuHowSTbYPty5ikP822ZazQSQi09B9lxhdf4rOlBgTewO+TupQbD+HsZkqMEDtcDFDozKVs6NtsKoYqe75cIUSo0K1EjBWTJZmWpBkPCHdTqRDFBIbnu9L5lk9v7etYLUm0wRvd3zY4MIb8i/s3HNV1SkW99N+ZD95J1SJEfgSRo1ZgAvA0cKBRjAYz2u+GotBkHF0rQt5ezxSjL7a+lVrb68L4NP2xn3qb/g1+IG5LtJv1qqAWTYoUpgUR1XScZM13yy63KTNBrK5gP5pT6VPkPBkIfcOpBBwqQZcnGYHNkoPThoZ+CKCeEUmVWd4ocYQ3+znf4MDjTTY7/4JI5wp1RGnNorpn/v3idL1jFe/TiiT4MLJf8umdWvPbWPmgbbiKJWc4bKpZM3eR021+lTkJkzaxoh5n2A/miT8w/rP6cvnhyqB1aEpWjldizHlYFwSEAMfaeGOKdGOb9NL/qDkqnmFznhWIQGTk3bWXMUad6ELbNmTaG0rQNDVXaAi0033ldw6tO/YM=----ATTACHMENT:----MjU4NjQwMTA0NDU0Mjc5NSA2MzcwMDM3MjE2ODU5NzMxIDMzNzQ4OTc1MDY5NTk5Nzg=