diff --git a/CloudObjects/SDK/COIDParser.php b/CloudObjects/SDK/COIDParser.php index 0fb4aae..45de308 100644 --- a/CloudObjects/SDK/COIDParser.php +++ b/CloudObjects/SDK/COIDParser.php @@ -20,7 +20,7 @@ class COIDParser { const COID_VERSIONED = 3; const COID_VERSION_WILDCARD = 4; - const REGEX_HOSTNAME = "/^([a-z0-9-]+\.)?[a-z0-9-]+\.[a-z]+$/"; + const REGEX_HOSTNAME = "/^([a-z0-9-]+\.)*[a-z0-9-]+\.[a-z]+$/"; const REGEX_SEGMENT = "/^[A-Za-z-_0-9\.]+$/"; const REGEX_VERSION_WILDCARD = "/^((\^|~)(\d+\.)?\d|(\d+\.){1,2}\*)$/"; diff --git a/tests/OfflineTests/COIDParserTest.php b/tests/OfflineTests/COIDParserTest.php index b1ff203..e539121 100644 --- a/tests/OfflineTests/COIDParserTest.php +++ b/tests/OfflineTests/COIDParserTest.php @@ -10,121 +10,139 @@ use ML\IRI\IRI; class COIDParserTest extends \PHPUnit\Framework\TestCase { - public function testRootCOID() { - $coid = new IRI('coid://example.com'); - $this->assertEquals(COIDParser::COID_ROOT, COIDParser::getType($coid)); - } + public function testRootCOID() { + $coid = new IRI('coid://example.com'); + $this->assertEquals(COIDParser::COID_ROOT, COIDParser::getType($coid)); - public function testInvalidRootCOID() { - $coid = new IRI('coid://example'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('coid://exämple.com'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('coid://ex&mple.com'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - } + $coid = new IRI('coid://subdomain.example.com'); + $this->assertEquals(COIDParser::COID_ROOT, COIDParser::getType($coid)); - public function testInvalidCOID() { - $coid = new IRI('http://example.com'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('example.com'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('COID://example.com'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('Coid://example.com'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('coid://EXAMPLE.COM'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('coid://exAMPle.CoM'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - } + $coid = new IRI('coid://anotherlevel.subdomain.example.com'); + $this->assertEquals(COIDParser::COID_ROOT, COIDParser::getType($coid)); + } - public function testUnversionedCOID() { - $coid = new IRI('coid://example.com/Example'); - $this->assertEquals(COIDParser::COID_UNVERSIONED, COIDParser::getType($coid)); - } + public function testInvalidRootCOID() { + $coid = new IRI('coid://example'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - public function testInvalidUnversionedCOID() { - $coid = new IRI('coid://example.com/Exümple'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('coid://example.com/Examp%e'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - } + $coid = new IRI('coid://exämple.com'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - public function testVersionedCOID() { - $coid = new IRI('coid://example.com/Example/1.0'); - $this->assertEquals(COIDParser::COID_VERSIONED, COIDParser::getType($coid)); - $coid = new IRI('coid://example.com/Example/alpha'); - $this->assertEquals(COIDParser::COID_VERSIONED, COIDParser::getType($coid)); - } + $coid = new IRI('coid://ex&mple.com'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); + } - public function testInvalidVersionedCOID() { - $coid = new IRI('coid://example.com/Example/1.$'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - } + public function testInvalidCOID() { + $coid = new IRI('http://example.com'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - public function testVersionWildcardCOID() { - $coid = new IRI('coid://example.com/Example/^1.0'); - $this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid)); - $coid = new IRI('coid://example.com/Example/~1.0'); - $this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid)); - $coid = new IRI('coid://example.com/Example/1.*'); - $this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid)); - } + $coid = new IRI('example.com'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - public function testInvalidVersionWildcardCOID() { - $coid = new IRI('coid://example.com/Example/^1.*'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - $coid = new IRI('coid://example.com/Example/1.a.*'); - $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - } + $coid = new IRI('COID://example.com'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - public function testIRICaseSensitivity() { - $coid1 = new IRI('coid://example.com/example/1.0'); - $coid2 = new IRI('coid://example.com/Example/1.0'); - $this->assertFalse($coid1->equals($coid2)); - } + $coid = new IRI('Coid://example.com'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - public function testRootFromString() { - $coid1 = new IRI('coid://example.com'); - $coid2 = COIDParser::fromString('coid://example.com'); - $coid3 = COIDParser::fromString('example.com'); - $this->assertTrue($coid1->equals($coid2)); - $this->assertTrue($coid1->equals($coid3)); - } + $coid = new IRI('coid://EXAMPLE.COM'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); + + $coid = new IRI('coid://exAMPle.CoM'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); + } - public function testUnversionedFromString() { - $coid1 = new IRI('coid://example.com/Example'); - $coid2 = COIDParser::fromString('coid://example.com/Example'); - $coid3 = COIDParser::fromString('example.com/Example'); - $this->assertTrue($coid1->equals($coid2)); - $this->assertTrue($coid1->equals($coid3)); - } + public function testUnversionedCOID() { + $coid = new IRI('coid://subdomain.example.com/Example'); + $this->assertEquals(COIDParser::COID_UNVERSIONED, COIDParser::getType($coid)); + } - public function testVersionedFromString() { - $coid1 = new IRI('coid://example.com/Example/1.0'); - $coid2 = COIDParser::fromString('coid://example.com/Example/1.0'); - $coid3 = COIDParser::fromString('example.com/Example/1.0'); - $this->assertTrue($coid1->equals($coid2)); - $this->assertTrue($coid1->equals($coid3)); - } + public function testInvalidUnversionedCOID() { + $coid = new IRI('coid://example.com/Exümple'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); - public function testNormalizeRootFromString() { - $coid1 = new IRI('coid://example.com'); - $coid2 = COIDParser::fromString('COID://example.com'); - $coid3 = COIDParser::fromString('ExAmple.COM'); - $this->assertTrue($coid1->equals($coid2)); - $this->assertTrue($coid1->equals($coid3)); - } + $coid = new IRI('coid://example.com/Examp%e'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); + } - public function testNormalizeNonRootFromString() { - $coid1 = new IRI('coid://example.com/Example'); - $coid2 = COIDParser::fromString('COID://example.com/Example'); - $coid3 = COIDParser::fromString('ExAmple.COM/Example'); - $coid4 = COIDParser::fromString('ExAmple.COM/EXample'); - $this->assertTrue($coid1->equals($coid2)); - $this->assertTrue($coid1->equals($coid3)); - $this->assertFalse($coid1->equals($coid4)); - } + public function testVersionedCOID() { + $coid = new IRI('coid://anotherlevel.subdomain.example.com/Example/1.0'); + $this->assertEquals(COIDParser::COID_VERSIONED, COIDParser::getType($coid)); + + $coid = new IRI('coid://subdomain.example.com/Example/alpha'); + $this->assertEquals(COIDParser::COID_VERSIONED, COIDParser::getType($coid)); + } + + public function testInvalidVersionedCOID() { + $coid = new IRI('coid://example.com/Example/1.$'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); + } + + public function testVersionWildcardCOID() { + $coid = new IRI('coid://example.com/Example/^1.0'); + $this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid)); + + $coid = new IRI('coid://example.com/Example/~1.0'); + $this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid)); + + $coid = new IRI('coid://example.com/Example/1.*'); + $this->assertEquals(COIDParser::COID_VERSION_WILDCARD, COIDParser::getType($coid)); + } + + public function testInvalidVersionWildcardCOID() { + $coid = new IRI('coid://example.com/Example/^1.*'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); + + $coid = new IRI('coid://example.com/Example/1.a.*'); + $this->assertEquals(COIDParser::COID_INVALID, COIDParser::getType($coid)); + } + + public function testIRICaseSensitivity() { + $coid1 = new IRI('coid://example.com/example/1.0'); + $coid2 = new IRI('coid://example.com/Example/1.0'); + $this->assertFalse($coid1->equals($coid2)); + } + + public function testRootFromString() { + $coid1 = new IRI('coid://example.com'); + $coid2 = COIDParser::fromString('coid://example.com'); + $coid3 = COIDParser::fromString('example.com'); + $this->assertTrue($coid1->equals($coid2)); + $this->assertTrue($coid1->equals($coid3)); + } + + public function testUnversionedFromString() { + $coid1 = new IRI('coid://example.com/Example'); + $coid2 = COIDParser::fromString('coid://example.com/Example'); + $coid3 = COIDParser::fromString('example.com/Example'); + $this->assertTrue($coid1->equals($coid2)); + $this->assertTrue($coid1->equals($coid3)); + } + + public function testVersionedFromString() { + $coid1 = new IRI('coid://example.com/Example/1.0'); + $coid2 = COIDParser::fromString('coid://example.com/Example/1.0'); + $coid3 = COIDParser::fromString('example.com/Example/1.0'); + $this->assertTrue($coid1->equals($coid2)); + $this->assertTrue($coid1->equals($coid3)); + } + + public function testNormalizeRootFromString() { + $coid1 = new IRI('coid://example.com'); + $coid2 = COIDParser::fromString('COID://example.com'); + $coid3 = COIDParser::fromString('ExAmple.COM'); + $this->assertTrue($coid1->equals($coid2)); + $this->assertTrue($coid1->equals($coid3)); + } + + public function testNormalizeNonRootFromString() { + $coid1 = new IRI('coid://example.com/Example'); + $coid2 = COIDParser::fromString('COID://example.com/Example'); + $coid3 = COIDParser::fromString('ExAmple.COM/Example'); + $coid4 = COIDParser::fromString('ExAmple.COM/EXample'); + $this->assertTrue($coid1->equals($coid2)); + $this->assertTrue($coid1->equals($coid3)); + $this->assertFalse($coid1->equals($coid4)); + } }