Skip to content

Commit

Permalink
Merge pull request #166 from wouterj/references
Browse files Browse the repository at this point in the history
Failing test case for references
  • Loading branch information
greg0ire authored Nov 3, 2021
2 parents 0aa99d5 + d51c32b commit 44e4ccb
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 2 deletions.
6 changes: 5 additions & 1 deletion lib/Renderers/SpanNodeRenderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,11 @@ private function renderLink(SpanToken $spanToken, string $span): string
$metaEntry = $this->environment->getMetaEntry();

if ($metaEntry !== null && $metaEntry->hasTitle($link)) {
$url = $metaEntry->getUrl() . '#' . Environment::slugify($link);
// A strangely-complex way to simply get the current relative URL
// For example, if the current page is "reference/page", then
// this would return "page" so the final URL is href="page#some-anchor".
$currentRelativeUrl = $this->environment->relativeUrl('/' . $metaEntry->getUrl());
$url = $currentRelativeUrl . '#' . Environment::slugify($link);
}
}

Expand Down
2 changes: 1 addition & 1 deletion tests/Builder/BuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ public function testReferenceToTitleWith2CharactersLong(): void
$contents = $this->getFileContents($this->targetFile('subdir/test.html'));

self::assertStringContainsString(
'<a href="subdir/test.html#em">em</a>',
'<a href="test.html#em">em</a>',
$contents
);
}
Expand Down
37 changes: 37 additions & 0 deletions tests/BuilderReferences/BuilderReferencesTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

declare(strict_types=1);

namespace Doctrine\Tests\RST\BuilderReferences;

use Doctrine\RST\Builder;
use Doctrine\Tests\RST\BaseBuilderTest;
use Gajus\Dindent\Indenter;
use Symfony\Component\Finder\Finder;

use function rtrim;

class BuilderReferencesTest extends BaseBuilderTest
{
protected function configureBuilder(Builder $builder): void
{
$builder->getConfiguration()->abortOnError(false);
$builder->getConfiguration()->silentOnError();
}

public function test(): void
{
$indenter = new Indenter();

foreach (Finder::create()->files()->in($this->targetFile() . '/../expected') as $file) {
$target = $this->targetFile($file->getRelativePathname());
self::assertFileExists($target);
self::assertEquals(rtrim($file->getContents()), rtrim($indenter->indent($this->getFileContents($target))));
}
}

protected function getFixturesDirectory(): string
{
return 'BuilderReferences';
}
}
21 changes: 21 additions & 0 deletions tests/BuilderReferences/expected/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<div class="section" id="references">
<h1>
References
</h1>
<p>Test <a href="reference.html">referencing a document</a></p>
<p>Test <a href="reference.html#test_anchor">referencing an anchor in another document</a></p>
<p>Test referencing a <a href="index.html#sub-section">Sub section</a> and Some Sub Section (invalid)</p>
<div class="section" id="sub-section">
<h2>
Sub section
</h2>
</div>
</div>
</body>
</html>
31 changes: 31 additions & 0 deletions tests/BuilderReferences/expected/reference/page.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<div class="section" id="reference-page">
<h1>
Reference Page
</h1>
<ul>
<li><a href="page.html#some-sub-section">Some Sub Section</a></li>
<li><a href="page.html#other">Other Sub Section</a></li>
<li><a href="page1.html#another-page">Section on another subpage</a></li>
</ul>
<p>And what about <a href="../reference.html#test_anchor">the test anchor</a>?</p>
<div class="section" id="some-sub-section">
<h2>
Some Sub Section
</h2>
<a id="other"></a>

</div>
<div class="section" id="other-sub-section">
<h2>
Other Sub Section
</h2>
</div>
</div>
</body>
</html>
11 changes: 11 additions & 0 deletions tests/BuilderReferences/input/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
References
==========

Test :ref:`referencing a document <reference>`

Test :ref:`referencing an anchor in another document <test_anchor>`

Test referencing a `Sub section`_ and `Some Sub Section`_ (invalid)

Sub section
-----------
6 changes: 6 additions & 0 deletions tests/BuilderReferences/input/reference.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.. _test_anchor:

Reference
=========

Test
16 changes: 16 additions & 0 deletions tests/BuilderReferences/input/reference/page.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Reference Page
==============

* `Some Sub Section`_
* :ref:`Other Sub Section <other>`
* :ref:`Section on another subpage <another-page>`

And what about :ref:`the test anchor <test_anchor>`?

Some Sub Section
----------------

.. _other:

Other Sub Section
-----------------
7 changes: 7 additions & 0 deletions tests/BuilderReferences/input/reference/page1.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Reference Page 1
================

.. _another-page:

Section on Another Page
-----------------------

0 comments on commit 44e4ccb

Please sign in to comment.