Update file formatting to PSR-2 (with tabs)

- Use short array syntax
- Bump required PHP version to PHP 5.4
- Update version to 1.0.0
This commit is contained in:
Hypolite Petovan 2018-09-27 19:59:13 -04:00
parent 56b01d779d
commit 23cd99e8fb
3 changed files with 6385 additions and 6301 deletions

View file

@ -24,7 +24,7 @@
} }
], ],
"require": { "require": {
"php": ">=5.3.0", "php": ">=5.4.0",
"ext-json": "*" "ext-json": "*"
}, },
"autoload": { "autoload": {

1198
jsonld.php

File diff suppressed because it is too large Load diff

348
test.php
View file

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP unit tests for JSON-LD. * PHP unit tests for JSON-LD.
* *
@ -8,14 +9,16 @@
*/ */
require_once('jsonld.php'); require_once('jsonld.php');
class JsonLdTestCase extends PHPUnit_Framework_TestCase { class JsonLdTestCase extends PHPUnit_Framework_TestCase
{
/** /**
* Runs this test case. Overridden to attach to EARL report w/o need for * Runs this test case. Overridden to attach to EARL report w/o need for
* an external XML configuration file. * an external XML configuration file.
* *
* @param PHPUnit_Framework_TestResult $result the test result. * @param PHPUnit_Framework_TestResult $result the test result.
*/ */
public function run(PHPUnit_Framework_TestResult $result = NULL) { public function run(PHPUnit_Framework_TestResult $result = NULL)
{
global $EARL; global $EARL;
$EARL->attach($result); $EARL->attach($result);
$this->result = $result; $this->result = $result;
@ -31,11 +34,12 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group json-ld.org * @group json-ld.org
* @dataProvider expandProvider * @dataProvider expandProvider
*/ */
public function testExpand($test) { public function testExpand($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readUrl('input'); $input = $test->readUrl('input');
$options = $test->createOptions(); $options = $test->createOptions();
$test->run('jsonld_expand', array($input, $options)); $test->run('jsonld_expand', [$input, $options]);
} }
/** /**
@ -47,12 +51,13 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group json-ld.org * @group json-ld.org
* @dataProvider compactProvider * @dataProvider compactProvider
*/ */
public function testCompact($test) { public function testCompact($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readUrl('input'); $input = $test->readUrl('input');
$context = $test->readProperty('context'); $context = $test->readProperty('context');
$options = $test->createOptions(); $options = $test->createOptions();
$test->run('jsonld_compact', array($input, $context, $options)); $test->run('jsonld_compact', [$input, $context, $options]);
} }
/** /**
@ -64,12 +69,13 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group json-ld.org * @group json-ld.org
* @dataProvider flattenProvider * @dataProvider flattenProvider
*/ */
public function testFlatten($test) { public function testFlatten($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readUrl('input'); $input = $test->readUrl('input');
$context = $test->readProperty('context'); $context = $test->readProperty('context');
$options = $test->createOptions(); $options = $test->createOptions();
$test->run('jsonld_flatten', array($input, $context, $options)); $test->run('jsonld_flatten', [$input, $context, $options]);
} }
/** /**
@ -81,11 +87,12 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group json-ld.org * @group json-ld.org
* @dataProvider toRdfProvider * @dataProvider toRdfProvider
*/ */
public function testToRdf($test) { public function testToRdf($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readUrl('input'); $input = $test->readUrl('input');
$options = $test->createOptions(array('format' => 'application/nquads')); $options = $test->createOptions(['format' => 'application/nquads']);
$test->run('jsonld_to_rdf', array($input, $options)); $test->run('jsonld_to_rdf', [$input, $options]);
} }
/** /**
@ -97,11 +104,12 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group json-ld.org * @group json-ld.org
* @dataProvider fromRdfProvider * @dataProvider fromRdfProvider
*/ */
public function testFromRdf($test) { public function testFromRdf($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readProperty('input'); $input = $test->readProperty('input');
$options = $test->createOptions(array('format' => 'application/nquads')); $options = $test->createOptions(['format' => 'application/nquads']);
$test->run('jsonld_from_rdf', array($input, $options)); $test->run('jsonld_from_rdf', [$input, $options]);
} }
/** /**
@ -113,12 +121,13 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group json-ld.org * @group json-ld.org
* @dataProvider frameProvider * @dataProvider frameProvider
*/ */
public function testFrame($test) { public function testFrame($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readUrl('input'); $input = $test->readUrl('input');
$frame = $test->readProperty('frame'); $frame = $test->readProperty('frame');
$options = $test->createOptions(); $options = $test->createOptions();
$test->run('jsonld_frame', array($input, $frame, $options)); $test->run('jsonld_frame', [$input, $frame, $options]);
} }
/** /**
@ -130,11 +139,12 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group json-ld.org * @group json-ld.org
* @dataProvider normalizeProvider * @dataProvider normalizeProvider
*/ */
public function testNormalize($test) { public function testNormalize($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readUrl('input'); $input = $test->readUrl('input');
$options = $test->createOptions(array('format' => 'application/nquads')); $options = $test->createOptions(['format' => 'application/nquads']);
$test->run('jsonld_normalize', array($input, $options)); $test->run('jsonld_normalize', [$input, $options]);
} }
/** /**
@ -146,14 +156,15 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group normalization * @group normalization
* @dataProvider urgna2012Provider * @dataProvider urgna2012Provider
*/ */
public function testUrgna2012($test) { public function testUrgna2012($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readProperty('action'); $input = $test->readProperty('action');
$options = $test->createOptions(array( $options = $test->createOptions([
'algorithm' => 'URGNA2012', 'algorithm' => 'URGNA2012',
'inputFormat' => 'application/nquads', 'inputFormat' => 'application/nquads',
'format' => 'application/nquads')); 'format' => 'application/nquads']);
$test->run('jsonld_normalize', array($input, $options)); $test->run('jsonld_normalize', [$input, $options]);
} }
/** /**
@ -165,64 +176,76 @@ class JsonLdTestCase extends PHPUnit_Framework_TestCase {
* @group normalization * @group normalization
* @dataProvider urdna2015Provider * @dataProvider urdna2015Provider
*/ */
public function testUrdna2015($test) { public function testUrdna2015($test)
{
$this->test = $test; $this->test = $test;
$input = $test->readProperty('action'); $input = $test->readProperty('action');
$options = $test->createOptions(array( $options = $test->createOptions([
'algorithm' => 'URDNA2015', 'algorithm' => 'URDNA2015',
'inputFormat' => 'application/nquads', 'inputFormat' => 'application/nquads',
'format' => 'application/nquads')); 'format' => 'application/nquads']);
$test->run('jsonld_normalize', array($input, $options)); $test->run('jsonld_normalize', [$input, $options]);
} }
public function expandProvider() { public function expandProvider()
{
return new JsonLdTestIterator('jld:ExpandTest'); return new JsonLdTestIterator('jld:ExpandTest');
} }
public function compactProvider() { public function compactProvider()
{
return new JsonLdTestIterator('jld:CompactTest'); return new JsonLdTestIterator('jld:CompactTest');
} }
public function flattenProvider() { public function flattenProvider()
{
return new JsonLdTestIterator('jld:FlattenTest'); return new JsonLdTestIterator('jld:FlattenTest');
} }
public function toRdfProvider() { public function toRdfProvider()
{
return new JsonLdTestIterator('jld:ToRDFTest'); return new JsonLdTestIterator('jld:ToRDFTest');
} }
public function fromRdfProvider() { public function fromRdfProvider()
{
return new JsonLdTestIterator('jld:FromRDFTest'); return new JsonLdTestIterator('jld:FromRDFTest');
} }
public function normalizeProvider() { public function normalizeProvider()
{
return new JsonLdTestIterator('jld:NormalizeTest'); return new JsonLdTestIterator('jld:NormalizeTest');
} }
public function frameProvider() { public function frameProvider()
{
return new JsonLdTestIterator('jld:FrameTest'); return new JsonLdTestIterator('jld:FrameTest');
} }
public function urgna2012Provider() { public function urgna2012Provider()
{
return new JsonLdTestIterator('rdfn:Urgna2012EvalTest'); return new JsonLdTestIterator('rdfn:Urgna2012EvalTest');
} }
public function urdna2015Provider() { public function urdna2015Provider()
{
return new JsonLdTestIterator('rdfn:Urdna2015EvalTest'); return new JsonLdTestIterator('rdfn:Urdna2015EvalTest');
} }
} }
class JsonLdManifest { class JsonLdManifest
public function __construct($data, $filename) { {
public function __construct($data, $filename)
{
$this->data = $data; $this->data = $data;
$this->filename = $filename; $this->filename = $filename;
$this->dirname = dirname($filename); $this->dirname = dirname($filename);
} }
public function load(&$tests) { public function load(&$tests)
{
$entries = array_merge( $entries = array_merge(
JsonLdProcessor::getValues($this->data, 'sequence'), JsonLdProcessor::getValues($this->data, 'sequence'), JsonLdProcessor::getValues($this->data, 'entries'));
JsonLdProcessor::getValues($this->data, 'entries'));
$includes = JsonLdProcessor::getValues($this->data, 'include'); $includes = JsonLdProcessor::getValues($this->data, 'include');
foreach ($includes as $include) { foreach ($includes as $include) {
array_push($entries, $include . '.jsonld'); array_push($entries, $include . '.jsonld');
@ -230,7 +253,7 @@ class JsonLdManifest {
foreach ($entries as $entry) { foreach ($entries as $entry) {
if (is_string($entry)) { if (is_string($entry)) {
$filename = join( $filename = join(
DIRECTORY_SEPARATOR, array($this->dirname, $entry)); DIRECTORY_SEPARATOR, [$this->dirname, $entry]);
$entry = Util::readJson($filename); $entry = Util::readJson($filename);
} else { } else {
$filename = $this->filename; $filename = $this->filename;
@ -245,11 +268,10 @@ class JsonLdManifest {
// assume entry is a test // assume entry is a test
$test = new JsonLdTest($this, $entry, $filename); $test = new JsonLdTest($this, $entry, $filename);
$types = array_merge( $types = array_merge(
JsonLdProcessor::getValues($test->data, '@type'), JsonLdProcessor::getValues($test->data, '@type'), JsonLdProcessor::getValues($test->data, 'type'));
JsonLdProcessor::getValues($test->data, 'type'));
foreach ($types as $type) { foreach ($types as $type) {
if (!isset($tests[$type])) { if (!isset($tests[$type])) {
$tests[$type] = array(); $tests[$type] = [];
} }
$tests[$type][] = $test; $tests[$type][] = $test;
} }
@ -258,19 +280,19 @@ class JsonLdManifest {
} }
} }
class JsonLdTest { class JsonLdTest
public function __construct($manifest, $data, $filename) { {
public function __construct($manifest, $data, $filename)
{
$this->manifest = $manifest; $this->manifest = $manifest;
$this->data = $data; $this->data = $data;
$this->filename = $filename; $this->filename = $filename;
$this->dirname = dirname($filename); $this->dirname = dirname($filename);
$this->isPositive = $this->isPositive = JsonLdProcessor::hasValue(
JsonLdProcessor::hasValue(
$data, '@type', 'jld:PositiveEvaluationTest') || $data, '@type', 'jld:PositiveEvaluationTest') ||
JsonLdProcessor::hasValue( JsonLdProcessor::hasValue(
$data, 'type', 'jld:PositiveEvaluationTest'); $data, 'type', 'jld:PositiveEvaluationTest');
$this->isNegative = $this->isNegative = JsonLdProcessor::hasValue(
JsonLdProcessor::hasValue(
$data, '@type', 'jld:NegativeEvaluationTest') || $data, '@type', 'jld:NegativeEvaluationTest') ||
JsonLdProcessor::hasValue( JsonLdProcessor::hasValue(
$data, 'type', 'jld:NegativeEvaluationTest'); $data, 'type', 'jld:NegativeEvaluationTest');
@ -306,7 +328,8 @@ class JsonLdTest {
} }
} }
private function _getResultProperty() { private function _getResultProperty()
{
if (isset($this->data->expect)) { if (isset($this->data->expect)) {
return 'expect'; return 'expect';
} else if (isset($this->data->result)) { } else if (isset($this->data->result)) {
@ -316,7 +339,8 @@ class JsonLdTest {
} }
} }
public function run($fn, $params) { public function run($fn, $params)
{
// read expected data // read expected data
if ($this->isNegative) { if ($this->isNegative) {
$this->expected = $this->data->expect; $this->expected = $this->data->expect;
@ -342,61 +366,69 @@ class JsonLdTest {
} }
} }
public function readUrl($property) { public function readUrl($property)
{
if (!property_exists($this->data, $property)) { if (!property_exists($this->data, $property)) {
return null; return null;
} }
return $this->manifest->data->baseIri . $this->data->{$property}; return $this->manifest->data->baseIri . $this->data->{$property};
} }
public function readProperty($property) { public function readProperty($property)
{
$data = $this->data; $data = $this->data;
if (!property_exists($data, $property)) { if (!property_exists($data, $property)) {
return null; return null;
} }
$filename = join( $filename = join(
DIRECTORY_SEPARATOR, array($this->dirname, $data->{$property})); DIRECTORY_SEPARATOR, [$this->dirname, $data->{$property}]);
$extension = pathinfo($filename, PATHINFO_EXTENSION); $extension = pathinfo($filename, PATHINFO_EXTENSION);
if ($extension === 'jsonld') { if ($extension === 'jsonld') {
return Util::readJson($filename); return Util::readJson($filename);
} }
return Util::readFile($filename); return Util::readFile($filename);
} }
public function createOptions($opts=array()) { public function createOptions($opts = [])
$http_options = array( {
'contentType', 'httpLink', 'httpStatus', 'redirectTo'); $http_options = [
'contentType', 'httpLink', 'httpStatus', 'redirectTo'];
$test_options = (property_exists($this->data, 'option') ? $test_options = (property_exists($this->data, 'option') ?
$this->data->option : array()); $this->data->option : []);
$options = array(); $options = [];
foreach ($test_options as $k => $v) { foreach ($test_options as $k => $v) {
if (!in_array($k, $http_options)) { if (!in_array($k, $http_options)) {
$options[$k] = $v; $options[$k] = $v;
} }
} }
$options['documentLoader'] = $this->createDocumentLoader(); $options['documentLoader'] = $this->createDocumentLoader();
$options = array_merge($options, $opts); $options = array_merge($options, $opts);
if (isset($options['expandContext'])) { if (isset($options['expandContext'])) {
$filename = join( $filename = join(
DIRECTORY_SEPARATOR, array($this->dirname, $options['expandContext'])); DIRECTORY_SEPARATOR, [$this->dirname, $options['expandContext']]);
$options['expandContext'] = Util::readJson($filename); $options['expandContext'] = Util::readJson($filename);
} }
return $options; return $options;
} }
public function createDocumentLoader() { public function createDocumentLoader()
{
$base = 'http://json-ld.org/test-suite'; $base = 'http://json-ld.org/test-suite';
$test = $this; $test = $this;
$load_locally = function($url) use ($test, $base) { $load_locally = function($url) use ($test, $base) {
$doc = (object)array( $doc = (object) [
'contextUrl' => null, 'documentUrl' => $url, 'document' => null); 'contextUrl' => null, 'documentUrl' => $url, 'document' => null];
$options = (property_exists($test->data, 'option') ? $options = (property_exists($test->data, 'option') ?
$test->data->option : null); $test->data->option : null);
if ($options and $url === $test->base) { if ($options and $url === $test->base) {
if (property_exists($options, 'redirectTo') && if (property_exists($options, 'redirectTo') &&
property_exists($options, 'httpStatus') && property_exists($options, 'httpStatus') &&
$options->httpStatus >= '300') { $options->httpStatus >= '300'
) {
$doc->documentUrl = ($test->manifest->data->baseIri . $doc->documentUrl = ($test->manifest->data->baseIri .
$options->redirectTo); $options->redirectTo);
} else if (property_exists($options, 'httpLink')) { } else if (property_exists($options, 'httpLink')) {
@ -406,16 +438,19 @@ class JsonLdTest {
if (!$content_type && $extension === 'jsonld') { if (!$content_type && $extension === 'jsonld') {
$content_type = 'application/ld+json'; $content_type = 'application/ld+json';
} }
$link_header = $options->httpLink; $link_header = $options->httpLink;
if (is_array($link_header)) { if (is_array($link_header)) {
$link_header = join(',', $link_header); $link_header = join(',', $link_header);
} }
$link_header = jsonld_parse_link_header($link_header); $link_header = jsonld_parse_link_header($link_header);
if (isset($link_header['http://www.w3.org/ns/json-ld#context'])) { if (isset($link_header['http://www.w3.org/ns/json-ld#context'])) {
$link_header = $link_header['http://www.w3.org/ns/json-ld#context']; $link_header = $link_header['http://www.w3.org/ns/json-ld#context'];
} else { } else {
$link_header = null; $link_header = null;
} }
if ($link_header && $content_type !== 'application/ld+json') { if ($link_header && $content_type !== 'application/ld+json') {
if (is_array($link_header)) { if (is_array($link_header)) {
throw new Exception('multiple context link headers'); throw new Exception('multiple context link headers');
@ -427,19 +462,21 @@ class JsonLdTest {
global $ROOT_MANIFEST_DIR; global $ROOT_MANIFEST_DIR;
if (strpos($doc->documentUrl, ':') === false) { if (strpos($doc->documentUrl, ':') === false) {
$filename = join( $filename = join(
DIRECTORY_SEPARATOR, array( DIRECTORY_SEPARATOR, [
$ROOT_MANIFEST_DIR, $doc->documentUrl)); $ROOT_MANIFEST_DIR, $doc->documentUrl]);
$doc->documentUrl = 'file://' . $filename; $doc->documentUrl = 'file://' . $filename;
} else { } else {
$filename = join( $filename = join(
DIRECTORY_SEPARATOR, array( DIRECTORY_SEPARATOR, [
$ROOT_MANIFEST_DIR, substr($doc->documentUrl, strlen($base)))); $ROOT_MANIFEST_DIR, substr($doc->documentUrl, strlen($base))]);
} }
try { try {
$doc->document = Util::readJson($filename); $doc->document = Util::readJson($filename);
} catch (Exception $e) { } catch (Exception $e) {
throw new Exception('loading document failed'); throw new Exception('loading document failed');
} }
return $doc; return $doc;
}; };
@ -457,20 +494,25 @@ class JsonLdTest {
return $local_loader; return $local_loader;
} }
public function getJsonLdErrorCode($err) { public function getJsonLdErrorCode($err)
{
if ($err instanceof JsonLdException) { if ($err instanceof JsonLdException) {
if ($err->getCode()) { if ($err->getCode()) {
return $err->getCode(); return $err->getCode();
} }
if ($err->cause) { if ($err->cause) {
return $this->getJsonLdErrorCode($err->cause); return $this->getJsonLdErrorCode($err->cause);
} }
} }
return $err->getMessage(); return $err->getMessage();
} }
} }
class JsonLdTestIterator implements Iterator { class JsonLdTestIterator implements Iterator
{
/** /**
* The current test index. * The current test index.
*/ */
@ -486,13 +528,15 @@ class JsonLdTestIterator implements Iterator {
* *
* @param string $type the type of tests to iterate over. * @param string $type the type of tests to iterate over.
*/ */
public function __construct($type) { public function __construct($type)
{
global $TESTS; global $TESTS;
if (isset($TESTS[$type])) { if (isset($TESTS[$type])) {
$this->tests = $TESTS[$type]; $this->tests = $TESTS[$type];
} else { } else {
$this->tests = array(); $this->tests = [];
} }
$this->count = count($this->tests); $this->count = count($this->tests);
} }
@ -501,8 +545,9 @@ class JsonLdTestIterator implements Iterator {
* *
* @return assoc the parameters for the next test. * @return assoc the parameters for the next test.
*/ */
public function current() { public function current()
return array('test' => $this->tests[$this->index]); {
return ['test' => $this->tests[$this->index]];
} }
/** /**
@ -510,21 +555,24 @@ class JsonLdTestIterator implements Iterator {
* *
* @return int the current test number. * @return int the current test number.
*/ */
public function key() { public function key()
{
return $this->index; return $this->index;
} }
/** /**
* Proceeds to the next test. * Proceeds to the next test.
*/ */
public function next() { public function next()
{
$this->index += 1; $this->index += 1;
} }
/** /**
* Rewinds to the first test. * Rewinds to the first test.
*/ */
public function rewind() { public function rewind()
{
$this->index = 0; $this->index = 0;
} }
@ -533,36 +581,38 @@ class JsonLdTestIterator implements Iterator {
* *
* @return bool true if there are more tests to be run. * @return bool true if there are more tests to be run.
*/ */
public function valid() { public function valid()
{
return $this->index < $this->count; return $this->index < $this->count;
} }
} }
class EarlReport extends PHPUnit_Util_Printer class EarlReport extends PHPUnit_Util_Printer implements PHPUnit_Framework_TestListener
implements PHPUnit_Framework_TestListener { {
public function __construct() { public function __construct()
{
$this->filename = null; $this->filename = null;
$this->attached = false; $this->attached = false;
$this->report = (object)array( $this->report = (object) [
'@context' => (object)array( '@context' => (object) [
'doap' => 'http://usefulinc.com/ns/doap#', 'doap' => 'http://usefulinc.com/ns/doap#',
'foaf' => 'http://xmlns.com/foaf/0.1/', 'foaf' => 'http://xmlns.com/foaf/0.1/',
'dc' => 'http://purl.org/dc/terms/', 'dc' => 'http://purl.org/dc/terms/',
'earl' => 'http://www.w3.org/ns/earl#', 'earl' => 'http://www.w3.org/ns/earl#',
'xsd' => 'http://www.w3.org/2001/XMLSchema#', 'xsd' => 'http://www.w3.org/2001/XMLSchema#',
'doap:homepage' => (object)array('@type' => '@id'), 'doap:homepage' => (object) ['@type' => '@id'],
'doap:license' => (object)array('@type' => '@id'), 'doap:license' => (object) ['@type' => '@id'],
'dc:creator' => (object)array('@type' => '@id'), 'dc:creator' => (object) ['@type' => '@id'],
'foaf:homepage' => (object)array('@type' => '@id'), 'foaf:homepage' => (object) ['@type' => '@id'],
'subjectOf' => (object)array('@reverse' => 'earl:subject'), 'subjectOf' => (object) ['@reverse' => 'earl:subject'],
'earl:assertedBy' => (object)array('@type' => '@id'), 'earl:assertedBy' => (object) ['@type' => '@id'],
'earl:mode' => (object)array('@type' => '@id'), 'earl:mode' => (object) ['@type' => '@id'],
'earl:test' => (object)array('@type' => '@id'), 'earl:test' => (object) ['@type' => '@id'],
'earl:outcome' => (object)array('@type' => '@id'), 'earl:outcome' => (object) ['@type' => '@id'],
'dc:date' => (object)array('@type' => 'xsd:date') 'dc:date' => (object) ['@type' => 'xsd:date']
), ],
'@id' => 'https://github.com/digitalbazaar/php-json-ld', '@id' => 'https://github.com/digitalbazaar/php-json-ld',
'@type' => array('doap:Project', 'earl:TestSubject', 'earl:Software'), '@type' => ['doap:Project', 'earl:TestSubject', 'earl:Software'],
'doap:name' => 'php-json-ld', 'doap:name' => 'php-json-ld',
'dc:title' => 'php-json-ld', 'dc:title' => 'php-json-ld',
'doap:homepage' => 'https://github.com/digitalbazaar/php-json-ld', 'doap:homepage' => 'https://github.com/digitalbazaar/php-json-ld',
@ -570,18 +620,18 @@ class EarlReport extends PHPUnit_Util_Printer
'doap:description' => 'A JSON-LD processor for PHP', 'doap:description' => 'A JSON-LD processor for PHP',
'doap:programming-language' => 'PHP', 'doap:programming-language' => 'PHP',
'dc:creator' => 'https://github.com/dlongley', 'dc:creator' => 'https://github.com/dlongley',
'doap:developer' => (object)array( 'doap:developer' => (object) [
'@id' => 'https://github.com/dlongley', '@id' => 'https://github.com/dlongley',
'@type' => array('foaf:Person', 'earl:Assertor'), '@type' => ['foaf:Person', 'earl:Assertor'],
'foaf:name' => 'Dave Longley', 'foaf:name' => 'Dave Longley',
'foaf:homepage' => 'https://github.com/dlongley' 'foaf:homepage' => 'https://github.com/dlongley'
), ],
'dc:date' => array( 'dc:date' => [
'@value' => gmdate('Y-m-d'), '@value' => gmdate('Y-m-d'),
'@type' => 'xsd:date' '@type' => 'xsd:date'
), ],
'subjectOf' => array() 'subjectOf' => []
); ];
} }
/** /**
@ -589,7 +639,8 @@ class EarlReport extends PHPUnit_Util_Printer
* *
* @param PHPUnit_Framework_Test $result the result to attach to. * @param PHPUnit_Framework_Test $result the result to attach to.
*/ */
public function attach(PHPUnit_Framework_TestResult $result) { public function attach(PHPUnit_Framework_TestResult $result)
{
if (!$this->attached && $this->filename) { if (!$this->attached && $this->filename) {
$this->attached = true; $this->attached = true;
$result->addListener($this); $result->addListener($this);
@ -602,25 +653,28 @@ class EarlReport extends PHPUnit_Util_Printer
* @param JsonLdTest $test the JsonLdTest for the assertion is for. * @param JsonLdTest $test the JsonLdTest for the assertion is for.
* @param bool $passed whether or not the test passed. * @param bool $passed whether or not the test passed.
*/ */
public function addAssertion($test, $passed) { public function addAssertion($test, $passed)
$this->report->{'subjectOf'}[] = (object)array( {
$this->report->{'subjectOf'}[] = (object) [
'@type' => 'earl:Assertion', '@type' => 'earl:Assertion',
'earl:assertedBy' => $this->report->{'doap:developer'}->{'@id'}, 'earl:assertedBy' => $this->report->{'doap:developer'}->{'@id'},
'earl:mode' => 'earl:automatic', 'earl:mode' => 'earl:automatic',
'earl:test' => $test->data->{'@id'}, 'earl:test' => $test->data->{'@id'},
'earl:result' => (object)array( 'earl:result' => (object) [
'@type' => 'earl:TestResult', '@type' => 'earl:TestResult',
'dc:date' => gmdate(DateTime::ISO8601), 'dc:date' => gmdate(DateTime::ISO8601),
'earl:outcome' => $passed ? 'earl:passed' : 'earl:failed' 'earl:outcome' => $passed ? 'earl:passed' : 'earl:failed'
) ]
); ];
return $this; return $this;
} }
/** /**
* Writes this EARL report to a file. * Writes this EARL report to a file.
*/ */
public function flush() { public function flush()
{
if ($this->filename) { if ($this->filename) {
printf("\nWriting EARL report to: %s\n", $this->filename); printf("\nWriting EARL report to: %s\n", $this->filename);
$fd = fopen($this->filename, 'w'); $fd = fopen($this->filename, 'w');
@ -629,18 +683,20 @@ class EarlReport extends PHPUnit_Util_Printer
} }
} }
public function endTest(PHPUnit_Framework_Test $test, $time) { public function endTest(PHPUnit_Framework_Test $test, $time)
{
$this->addAssertion($test->test, true); $this->addAssertion($test->test, true);
} }
public function addError( public function addError(
PHPUnit_Framework_Test $test, Exception $e, $time) { PHPUnit_Framework_Test $test, Exception $e, $time)
{
$this->addAssertion($test->test, false); $this->addAssertion($test->test, false);
} }
public function addFailure( public function addFailure(
PHPUnit_Framework_Test $test, PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
PHPUnit_Framework_AssertionFailedError $e, $time) { {
$this->addAssertion($test->test, false); $this->addAssertion($test->test, false);
if ($test->result->shouldStop()) { if ($test->result->shouldStop()) {
if (isset($test->test->name)) { if (isset($test->test->name)) {
@ -659,41 +715,68 @@ class EarlReport extends PHPUnit_Util_Printer
} }
public function addIncompleteTest( public function addIncompleteTest(
PHPUnit_Framework_Test $test, Exception $e, $time) { PHPUnit_Framework_Test $test, Exception $e, $time)
{
$this->addAssertion($test->test, false); $this->addAssertion($test->test, false);
} }
public function addRiskyTest( public function addRiskyTest(
PHPUnit_Framework_Test $test, Exception $e, $time) {} PHPUnit_Framework_Test $test, Exception $e, $time)
public function addSkippedTest( {
PHPUnit_Framework_Test $test, Exception $e, $time) {}
public function startTest(PHPUnit_Framework_Test $test) {}
public function startTestSuite(PHPUnit_Framework_TestSuite $suite) {}
public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {}
} }
class Util { public function addSkippedTest(
public static function readFile($filename) { PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function startTest(PHPUnit_Framework_Test $test)
{
}
public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
}
class Util
{
public static function readFile($filename)
{
$rval = @file_get_contents($filename); $rval = @file_get_contents($filename);
if ($rval === false) { if ($rval === false) {
throw new Exception('File read error: ' . $filename); throw new Exception('File read error: ' . $filename);
} }
return $rval; return $rval;
} }
public static function readJson($filename) { public static function readJson($filename)
{
$rval = json_decode(self::readFile($filename)); $rval = json_decode(self::readFile($filename));
if ($rval === null) { if ($rval === null) {
throw new Exception('JSON parse error'); throw new Exception('JSON parse error');
} }
return $rval; return $rval;
} }
public static function readNQuads($filename) { public static function readNQuads($filename)
{
return self::readFile($filename); return self::readFile($filename);
} }
public static function jsonldEncode($input) { public static function jsonldEncode($input)
{
// newer PHP has a flag to avoid escaped '/' // newer PHP has a flag to avoid escaped '/'
if (defined('JSON_UNESCAPED_SLASHES')) { if (defined('JSON_UNESCAPED_SLASHES')) {
$options = JSON_UNESCAPED_SLASHES; $options = JSON_UNESCAPED_SLASHES;
@ -705,21 +788,22 @@ class Util {
// use a simple string replacement of '\/' to '/'. // use a simple string replacement of '\/' to '/'.
$json = str_replace('\\/', '/', json_encode($input)); $json = str_replace('\\/', '/', json_encode($input));
} }
return $json; return $json;
} }
} }
// tests to skip // tests to skip
$SKIP_TESTS = array(); $SKIP_TESTS = [];
// root manifest directory // root manifest directory
$ROOT_MANIFEST_DIR; $ROOT_MANIFEST_DIR;
// parsed tests; keyed by type // parsed tests; keyed by type
$TESTS = array(); $TESTS = [];
// parsed command line options // parsed command line options
$OPTIONS = array(); $OPTIONS = [];
// parse command line options // parse command line options
global $argv; global $argv;
@ -740,11 +824,13 @@ for($i = 0; $i < $total; ++$i) {
$i += 1; $i += 1;
$OPTIONS[$arg] = $args[$i]; $OPTIONS[$arg] = $args[$i];
} }
if (!isset($OPTIONS['-d'])) { if (!isset($OPTIONS['-d'])) {
$dvar = 'path to json-ld.org/test-suite'; $dvar = 'path to json-ld.org/test-suite';
$evar = 'file to write EARL report to'; $evar = 'file to write EARL report to';
echo "php-json-ld Tests\n"; echo "php-json-ld Tests\n";
echo "Usage: phpunit test.php -d <$dvar> [-e <$evar>]\n\n"; echo "Usage: phpunit test.php -d <$dvar> [-e <$evar>]\n\n";
exit(0); exit(0);
} }
@ -757,7 +843,7 @@ if(isset($OPTIONS['-e'])) {
// load root manifest // load root manifest
$ROOT_MANIFEST_DIR = realpath($OPTIONS['-d']); $ROOT_MANIFEST_DIR = realpath($OPTIONS['-d']);
$filename = join( $filename = join(
DIRECTORY_SEPARATOR, array($ROOT_MANIFEST_DIR, 'manifest.jsonld')); DIRECTORY_SEPARATOR, [$ROOT_MANIFEST_DIR, 'manifest.jsonld']);
$root_manifest = Util::readJson($filename); $root_manifest = Util::readJson($filename);
$manifest = new JsonLdManifest($root_manifest, $filename); $manifest = new JsonLdManifest($root_manifest, $filename);
$manifest->load($TESTS); $manifest->load($TESTS);