grav = $grav(); $this->pages = $this->grav['pages']; $this->config = $this->grav['config']; $this->uri = $this->grav['uri']; $this->language = $this->grav['language']; $this->old_home = $this->config->get('system.home.alias'); $this->config->set('system.home.alias', '/item1'); $this->config->set('system.absolute_urls', false); $this->config->set('system.languages.supported', []); unset($this->grav['language']); $this->grav['language'] = new Language($this->grav); /** @var UniformResourceLocator $locator */ $locator = $this->grav['locator']; $locator->addPath('page', '', 'tests/fake/nested-site/user/pages', false); $this->pages->init(); $defaults = [ 'markdown' => [ 'extra' => false, 'auto_line_breaks' => false, 'auto_url_links' => false, 'escape_markup' => false, 'special_chars' => ['>' => 'gt', '<' => 'lt'], ], 'images' => $this->config->get('system.images', []) ]; $page = $this->pages->dispatch('/item2/item2-2'); $excerpts = new Excerpts($page, $defaults); $this->parsedown = new Parsedown($excerpts); } protected function _after() { $this->config->set('system.home.alias', $this->old_home); } public function testImages() { $this->config->set('system.languages.supported', ['fr','en']); unset($this->grav['language']); $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](cache-image.jpg?cropResize=200,200&foo)')); $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](cache-image.jpg?cropResize=200,200&foo)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](/home-cache-image.jpg?cache)')); $this->assertSame('

', $this->parsedown->text('![](missing-image.jpg)')); $this->assertSame('

', $this->parsedown->text('![](/home-missing-image.jpg)')); $this->assertSame('

', $this->parsedown->text('![](/home-missing-image.jpg)')); $this->assertSame('

', $this->parsedown->text('![](https://getgrav-grav.netdna-ssl.com/user/pages/media/grav-logo.svg)')); } public function testImagesSubDir() { $this->config->set('system.images.cache_all', false); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](/home-cache-image.jpg?cache)')); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](cache-image.jpg?cache)')); $this->assertSame('

', $this->parsedown->text('![](missing-image.jpg)')); $this->assertSame('

', $this->parsedown->text('![](/home-missing-image.jpg)')); } public function testImagesAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](cache-image.jpg?cache)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](/home-cache-image.jpg?cache)')); $this->assertSame('

', $this->parsedown->text('![](missing-image.jpg)')); $this->assertSame('

', $this->parsedown->text('![](/home-missing-image.jpg)')); } public function testImagesSubDirAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](cache-image.jpg?cache)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](/home-cache-image.jpg?cropResize=200,200)')); $this->assertSame('

', $this->parsedown->text('![](missing-image.jpg)')); $this->assertSame('

', $this->parsedown->text('![](/home-missing-image.jpg)')); } public function testImagesAttributes() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg "My Title")')); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg?classes=foo)')); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg?classes=foo,bar)')); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg?id=foo)')); $this->assertSame('

Alt Text

', $this->parsedown->text('![Alt Text](sample-image.jpg?id=foo)')); $this->assertSame('

Alt Text

', $this->parsedown->text('![Alt Text](sample-image.jpg?class=bar&id=foo)')); $this->assertSame('

Alt Text

', $this->parsedown->text('![Alt Text](sample-image.jpg?class=bar&id=foo "My Title")')); } public function testRootImages() { $this->uri->initializeWithURL('http://testing.dev/')->init(); $defaults = [ 'markdown' => [ 'extra' => false, 'auto_line_breaks' => false, 'auto_url_links' => false, 'escape_markup' => false, 'special_chars' => ['>' => 'gt', '<' => 'lt'], ], 'images' => $this->config->get('system.images', []) ]; $page = $this->pages->dispatch('/'); $excerpts = new Excerpts($page, $defaults); $this->parsedown = new Parsedown($excerpts); $this->assertSame('

', $this->parsedown->text('![](home-sample-image.jpg)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](home-cache-image.jpg?cache)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](home-cache-image.jpg?cropResize=200,200&foo)')); $this->assertSame('

', $this->parsedown->text('![](/home-missing-image.jpg)')); $this->config->set('system.languages.supported', ['fr','en']); unset($this->grav['language']); $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); $this->assertSame('

', $this->parsedown->text('![](home-sample-image.jpg)')); } public function testRootImagesSubDirAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

', $this->parsedown->text('![](sample-image.jpg)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](cache-image.jpg?cache)')); $this->assertRegexp('|

<\/p>|', $this->parsedown->text('![](/home-cache-image.jpg?cropResize=200,200)')); $this->assertSame('

', $this->parsedown->text('![](missing-image.jpg)')); $this->assertSame('

', $this->parsedown->text('![](/home-missing-image.jpg)')); } public function testRootAbsoluteLinks() { $this->uri->initializeWithURL('http://testing.dev/')->init(); $defaults = [ 'markdown' => [ 'extra' => false, 'auto_line_breaks' => false, 'auto_url_links' => false, 'escape_markup' => false, 'special_chars' => ['>' => 'gt', '<' => 'lt'], ], 'images' => $this->config->get('system.images', []) ]; $page = $this->pages->dispatch('/'); $excerpts = new Excerpts($page, $defaults); $this->parsedown = new Parsedown($excerpts); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](item1-3)')); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](../item2)')); $this->assertSame('

With Query

', $this->parsedown->text('[With Query](?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/foo:bar)')); $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](#foo)')); $this->config->set('system.languages.supported', ['fr','en']); unset($this->grav['language']); $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](../item2)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](item1-3)')); $this->assertSame('

With Query

', $this->parsedown->text('[With Query](?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/foo:bar)')); $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](#foo)')); } public function testAnchorLinksLangRelativeUrls() { $this->config->set('system.languages.supported', ['fr','en']); unset($this->grav['language']); $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); } public function testAnchorLinksLangAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->config->set('system.languages.supported', ['fr','en']); unset($this->grav['language']); $this->grav['language'] = new Language($this->grav); $this->uri->initializeWithURL('http://testing.dev/fr/item2/item2-2')->init(); $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); } public function testExternalLinks() { $this->assertSame('

cnn.com

', $this->parsedown->text('[cnn.com](http://www.cnn.com)')); $this->assertSame('

google.com

', $this->parsedown->text('[google.com](https://www.google.com)')); $this->assertSame('

complex url

', $this->parsedown->text('[complex url](https://github.com/getgrav/grav/issues/new?title=[add-resource]%20New%20Plugin/Theme&body=Hello%20**There**)')); } public function testExternalLinksSubDir() { $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

cnn.com

', $this->parsedown->text('[cnn.com](http://www.cnn.com)')); $this->assertSame('

google.com

', $this->parsedown->text('[google.com](https://www.google.com)')); } public function testExternalLinksSubDirAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

cnn.com

', $this->parsedown->text('[cnn.com](http://www.cnn.com)')); $this->assertSame('

google.com

', $this->parsedown->text('[google.com](https://www.google.com)')); } public function testAnchorLinksRelativeUrls() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); } public function testAnchorLinksAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); } public function testAnchorLinksWithPortAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithURL('http://testing.dev:8080/item2/item2-2')->init(); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); } public function testAnchorLinksSubDirRelativeUrls() { $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); } public function testAnchorLinksSubDirAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Peer Anchor

', $this->parsedown->text('[Peer Anchor](../item2-1#foo)')); $this->assertSame('

Peer Anchor 2

', $this->parsedown->text('[Peer Anchor 2](../item2-1/#foo)')); $this->assertSame('

Current Anchor

', $this->parsedown->text('[Current Anchor](#foo)')); $this->assertSame('

Root Anchor

', $this->parsedown->text('[Root Anchor](/#foo)')); } public function testSlugRelativeLinks() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Up to Root Level

', $this->parsedown->text('[Up to Root Level](../..)')); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](../item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](item2-2-1)')); $this->assertSame('

Up a Level

', $this->parsedown->text('[Up a Level](..)')); $this->assertSame('

Up and Down

', $this->parsedown->text('[Up and Down](../../item3/item3-3)')); $this->assertSame('

Down a Level with Query

', $this->parsedown->text('[Down a Level with Query](item2-2-1?foo=bar)')); $this->assertSame('

Up a Level with Query

', $this->parsedown->text('[Up a Level with Query](../?foo=bar)')); $this->assertSame('

Up and Down with Query

', $this->parsedown->text('[Up and Down with Query](../../item3/item3-3?foo=bar)')); $this->assertSame('

Up and Down with Param

', $this->parsedown->text('[Up and Down with Param](../../item3/item3-3/foo:bar)')); $this->assertSame('

Up and Down with Anchor

', $this->parsedown->text('[Up and Down with Anchor](../../item3/item3-3#foo)')); } public function testSlugRelativeLinksAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](../item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](item2-2-1)')); $this->assertSame('

Up a Level

', $this->parsedown->text('[Up a Level](..)')); $this->assertSame('

Up to Root Level

', $this->parsedown->text('[Up to Root Level](../..)')); $this->assertSame('

Up and Down

', $this->parsedown->text('[Up and Down](../../item3/item3-3)')); $this->assertSame('

Down a Level with Query

', $this->parsedown->text('[Down a Level with Query](item2-2-1?foo=bar)')); $this->assertSame('

Up a Level with Query

', $this->parsedown->text('[Up a Level with Query](../?foo=bar)')); $this->assertSame('

Up and Down with Query

', $this->parsedown->text('[Up and Down with Query](../../item3/item3-3?foo=bar)')); $this->assertSame('

Up and Down with Param

', $this->parsedown->text('[Up and Down with Param](../../item3/item3-3/foo:bar)')); $this->assertSame('

Up and Down with Anchor

', $this->parsedown->text('[Up and Down with Anchor](../../item3/item3-3#foo)')); } public function testSlugRelativeLinksSubDir() { $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](../item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](item2-2-1)')); $this->assertSame('

Up a Level

', $this->parsedown->text('[Up a Level](..)')); $this->assertSame('

Up to Root Level

', $this->parsedown->text('[Up to Root Level](../..)')); $this->assertSame('

Up and Down

', $this->parsedown->text('[Up and Down](../../item3/item3-3)')); $this->assertSame('

Down a Level with Query

', $this->parsedown->text('[Down a Level with Query](item2-2-1?foo=bar)')); $this->assertSame('

Up a Level with Query

', $this->parsedown->text('[Up a Level with Query](../?foo=bar)')); $this->assertSame('

Up and Down with Query

', $this->parsedown->text('[Up and Down with Query](../../item3/item3-3?foo=bar)')); $this->assertSame('

Up and Down with Param

', $this->parsedown->text('[Up and Down with Param](../../item3/item3-3/foo:bar)')); $this->assertSame('

Up and Down with Anchor

', $this->parsedown->text('[Up and Down with Anchor](../../item3/item3-3#foo)')); } public function testSlugRelativeLinksSubDirAbsoluteUrls() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](../item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](item2-2-1)')); $this->assertSame('

Up a Level

', $this->parsedown->text('[Up a Level](..)')); $this->assertSame('

Up to Root Level

', $this->parsedown->text('[Up to Root Level](../..)')); $this->assertSame('

Up and Down

', $this->parsedown->text('[Up and Down](../../item3/item3-3)')); $this->assertSame('

Down a Level with Query

', $this->parsedown->text('[Down a Level with Query](item2-2-1?foo=bar)')); $this->assertSame('

Up a Level with Query

', $this->parsedown->text('[Up a Level with Query](../?foo=bar)')); $this->assertSame('

Up and Down with Query

', $this->parsedown->text('[Up and Down with Query](../../item3/item3-3?foo=bar)')); $this->assertSame('

Up and Down with Param

', $this->parsedown->text('[Up and Down with Param](../../item3/item3-3/foo:bar)')); $this->assertSame('

Up and Down with Anchor

', $this->parsedown->text('[Up and Down with Anchor](../../item3/item3-3#foo)')); } public function testDirectoryRelativeLinks() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Up and Down with Param

', $this->parsedown->text('[Up and Down with Param](../../03.item3/03.item3-3/foo:bar)')); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](../01.item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](01.item2-2-1)')); $this->assertSame('

Up and Down

', $this->parsedown->text('[Up and Down](../../03.item3/03.item3-3)')); $this->assertSame('

Down a Level with Query

', $this->parsedown->text('[Down a Level with Query](01.item2-2-1?foo=bar)')); $this->assertSame('

Up and Down with Query

', $this->parsedown->text('[Up and Down with Query](../../03.item3/03.item3-3?foo=bar)')); $this->assertSame('

Up and Down with Anchor

', $this->parsedown->text('[Up and Down with Anchor](../../03.item3/03.item3-3#foo)')); } public function testAbsoluteLinks() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Root

', $this->parsedown->text('[Root](/)')); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](/item2/item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](/item2/item2-2/item2-2-1)')); $this->assertSame('

Up a Level

', $this->parsedown->text('[Up a Level](/item2)')); $this->assertSame('

With Query

', $this->parsedown->text('[With Query](/item2?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/item2/foo:bar)')); $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](/item2#foo)')); } public function testDirectoryAbsoluteLinksSubDir() { $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Root

', $this->parsedown->text('[Root](/)')); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](/item2/item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](/item2/item2-2/item2-2-1)')); $this->assertSame('

Up a Level

', $this->parsedown->text('[Up a Level](/item2)')); $this->assertSame('

With Query

', $this->parsedown->text('[With Query](/item2?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/item2/foo:bar)')); $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](/item2#foo)')); } public function testDirectoryAbsoluteLinksSubDirAbsoluteUrl() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Root

', $this->parsedown->text('[Root](/)')); $this->assertSame('

Peer Page

', $this->parsedown->text('[Peer Page](/item2/item2-1)')); $this->assertSame('

Down a Level

', $this->parsedown->text('[Down a Level](/item2/item2-2/item2-2-1)')); $this->assertSame('

Up a Level

', $this->parsedown->text('[Up a Level](/item2)')); $this->assertSame('

With Query

', $this->parsedown->text('[With Query](/item2?foo=bar)')); $this->assertSame('

With Param

', $this->parsedown->text('[With Param](/item2/foo:bar)')); $this->assertSame('

With Anchor

', $this->parsedown->text('[With Anchor](/item2#foo)')); } public function testSpecialProtocols() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

mailto

', $this->parsedown->text('[mailto](mailto:user@domain.com)')); $this->assertSame('

xmpp

', $this->parsedown->text('[xmpp](xmpp:xyx@domain.com)')); $this->assertSame('

tel

', $this->parsedown->text('[tel](tel:123-555-12345)')); $this->assertSame('

sms

', $this->parsedown->text('[sms](sms:123-555-12345)')); $this->assertSame('

ts.example.com

', $this->parsedown->text('[ts.example.com](rdp://ts.example.com)')); } public function testSpecialProtocolsSubDir() { $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

mailto

', $this->parsedown->text('[mailto](mailto:user@domain.com)')); $this->assertSame('

xmpp

', $this->parsedown->text('[xmpp](xmpp:xyx@domain.com)')); $this->assertSame('

tel

', $this->parsedown->text('[tel](tel:123-555-12345)')); $this->assertSame('

sms

', $this->parsedown->text('[sms](sms:123-555-12345)')); $this->assertSame('

ts.example.com

', $this->parsedown->text('[ts.example.com](rdp://ts.example.com)')); } public function testSpecialProtocolsSubDirAbsoluteUrl() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

mailto

', $this->parsedown->text('[mailto](mailto:user@domain.com)')); $this->assertSame('

xmpp

', $this->parsedown->text('[xmpp](xmpp:xyx@domain.com)')); $this->assertSame('

tel

', $this->parsedown->text('[tel](tel:123-555-12345)')); $this->assertSame('

sms

', $this->parsedown->text('[sms](sms:123-555-12345)')); $this->assertSame('

ts.example.com

', $this->parsedown->text('[ts.example.com](rdp://ts.example.com)')); } public function testReferenceLinks() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $sample = '[relative link][r_relative] [r_relative]: ../item2-3#blah'; $this->assertSame('

relative link

', $this->parsedown->text($sample)); $sample = '[absolute link][r_absolute] [r_absolute]: /item3#blah'; $this->assertSame('

absolute link

', $this->parsedown->text($sample)); $sample = '[external link][r_external] [r_external]: http://www.cnn.com'; $this->assertSame('

external link

', $this->parsedown->text($sample)); } public function testAttributeLinks() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Anchor Class

', $this->parsedown->text('[Anchor Class](?classes=button#something)')); $this->assertSame('

Relative Class

', $this->parsedown->text('[Relative Class](../item2-3?classes=button)')); $this->assertSame('

Relative ID

', $this->parsedown->text('[Relative ID](../item2-3?id=unique)')); $this->assertSame('

External

', $this->parsedown->text('[External](https://github.com/getgrav/grav?classes=button,big)')); $this->assertSame('

Relative Noprocess

', $this->parsedown->text('[Relative Noprocess](../item2-3?id=unique&noprocess)')); $this->assertSame('

Relative Target

', $this->parsedown->text('[Relative Target](../item2-3?target=_blank)')); $this->assertSame('

Relative Rel

', $this->parsedown->text('[Relative Rel](../item2-3?rel=nofollow)')); $this->assertSame('

Relative Mixed

', $this->parsedown->text('[Relative Mixed](../item2-3?foo=bar&baz=qux&rel=nofollow&class=button)')); } public function testInvalidLinks() { $this->uri->initializeWithURL('http://testing.dev/item2/item2-2')->init(); $this->assertSame('

Non Existent Page

', $this->parsedown->text('[Non Existent Page](no-page)')); $this->assertSame('

Existent File

', $this->parsedown->text('[Existent File](existing-file.zip)')); $this->assertSame('

Non Existent File

', $this->parsedown->text('[Non Existent File](missing-file.zip)')); } public function testInvalidLinksSubDir() { $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Non Existent Page

', $this->parsedown->text('[Non Existent Page](no-page)')); $this->assertSame('

Existent File

', $this->parsedown->text('[Existent File](existing-file.zip)')); $this->assertSame('

Non Existent File

', $this->parsedown->text('[Non Existent File](missing-file.zip)')); } public function testInvalidLinksSubDirAbsoluteUrl() { $this->config->set('system.absolute_urls', true); $this->uri->initializeWithUrlAndRootPath('http://testing.dev/subdir/item2/item2-2', '/subdir')->init(); $this->assertSame('

Non Existent Page

', $this->parsedown->text('[Non Existent Page](no-page)')); $this->assertSame('

Existent File

', $this->parsedown->text('[Existent File](existing-file.zip)')); $this->assertSame('

Non Existent File

', $this->parsedown->text('[Non Existent File](missing-file.zip)')); } /** * @param $string * * @return mixed */ private function stripLeadingWhitespace($string) { return preg_replace('/^\s*(.*)/', '', $string); } }