mediawiki-extensions-Cite/tests/parser/bookReferencing.txt
Thiemo Kreuz b10dd4ec27 Block de-facto empty <ref> as if it's empty
The use case we care about is this:
<ref extends="some_book"> </ref>

It doesn't make sense that works, but the following doesn't:
<ref extends="some_book"></ref>

We decided that both need to behave the same.

For consistency this patch is applying the same change to all references,
no matter if they use the extends attribute or not. This is an actual
change and might make existing wikitext render differently. However, I
would like to argue that all wikitext that was using this was broken. The
effect of a <ref> </ref> with some whitespace is that the <references>
section at the end of the article will contain – well – an empty footnote.

Bug: T237241
Change-Id: Iaee35583eabcb416b0a06849b89ebbfb0fb7fef9
2019-11-20 15:07:54 +00:00

451 lines
18 KiB
Plaintext

!! test
Book Referencing attribute rejected by default
!! config
wgCiteBookReferencing=false
!! wikitext
<ref name="parent">[foo]</ref>
<ref extends="parent">[bar]</ref>
!! html/php
<p><sup id="cite_ref-parent_1-0" class="reference"><a href="#cite_note-parent-1">&#91;1&#93;</a></sup>
<span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag;
</p>
invalid names, e.g. too many</span><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-parent-1"><span class="mw-cite-backlink"><a href="#cite_ref-parent_1-0">↑</a></span> <span class="reference-text">[foo]</span>
</li>
</ol></div>
!! end
# TODO:
# * Subnumbering and indent.
!! test
Book Referencing attribute allowed with feature flag set
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="parent">[foo]</ref>
<ref extends="parent">[bar]</ref>
!! html/php
<p><sup id="cite_ref-parent_1-0" class="reference"><a href="#cite_note-parent-1">&#91;1&#93;</a></sup>
</p>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;2&#93;</a></sup><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-parent-1"><span class="mw-cite-backlink"><a href="#cite_ref-parent_1-0">↑</a></span> <span class="reference-text">[foo]</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">[bar]</span>
</li>
</ol></div>
!! end
# TODO:
# * Subnumbering and indent.
!! test
T236256 - Extending the same base multiple times is fine
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book</ref>
<ref extends="a">page 2</ref>
<ref extends="a">page 3</ref>
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;2&#93;</a></sup>
<sup id="cite_ref-3" class="reference"><a href="#cite_note-3">&#91;3&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">page 2</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">page 3</span>
</li>
</ol></div>
!! end
# TODO:
# * Subnumbering and indent.
!! test
T236256 - Naming book references is fine
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book</ref>
<ref extends="a" name="b">page 2</ref>
<ref extends="a" name="c">page 3</ref>
<ref name="b" />
<ref name="c" />
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-b_2-0" class="reference"><a href="#cite_note-b-2">&#91;2&#93;</a></sup>
<sup id="cite_ref-c_3-0" class="reference"><a href="#cite_note-c-3">&#91;3&#93;</a></sup>
<sup id="cite_ref-b_2-1" class="reference"><a href="#cite_note-b-2">&#91;2&#93;</a></sup>
<sup id="cite_ref-c_3-1" class="reference"><a href="#cite_note-c-3">&#91;3&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
<li id="cite_note-b-2"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-b_2-0">2.0</a></sup> <sup><a href="#cite_ref-b_2-1">2.1</a></sup></span> <span class="reference-text">page 2</span>
</li>
<li id="cite_note-c-3"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-c_3-0">3.0</a></sup> <sup><a href="#cite_ref-c_3-1">3.1</a></sup></span> <span class="reference-text">page 3</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error.
!! test
T236256 - Extending a reference that doesn't exist #1
!! config
wgCiteBookReferencing=true
!! wikitext
<ref extends="a">page 1</ref>
!! html/php
<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">&#91;1&#93;</a></sup><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">page 1</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error at the second reference.
!! test
T236256 - Extending a reference that doesn't exist #2
!! config
wgCiteBookReferencing=true
!! wikitext
<ref>book</ref>
<ref extends="a">page 1</ref>
!! html/php
<p><sup id="cite_ref-1" class="reference"><a href="#cite_note-1">&#91;1&#93;</a></sup>
</p>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;2&#93;</a></sup><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">book</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">page 1</span>
</li>
</ol></div>
!! end
!! test
T236256 - Reference with the same name defined twice
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book</ref>
<ref name="a">magazine</ref>
<ref extends="a">page 1</ref>
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-a_1-1" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
</p>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;2&#93;</a></sup><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-a_1-0">1.0</a></sup> <sup><a href="#cite_ref-a_1-1">1.1</a></sup></span> <span class="reference-text">book <span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag; name "a" defined multiple times with different content</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">page 1</span>
</li>
</ol></div>
!! end
!! test
T236256 - Can't reuse a name for two book references
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book</ref>
<ref extends="a" name="b">page 2</ref>
<ref extends="a" name="b">page 3</ref>
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-b_2-0" class="reference"><a href="#cite_note-b-2">&#91;2&#93;</a></sup>
<sup id="cite_ref-b_2-1" class="reference"><a href="#cite_note-b-2">&#91;2&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
<li id="cite_note-b-2"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-b_2-0">2.0</a></sup> <sup><a href="#cite_ref-b_2-1">2.1</a></sup></span> <span class="reference-text">page 2 <span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag; name "b" defined multiple times with different content</span></span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error on ref-3.
!! test
T236256 - Cant extend a book reference (no nesting).
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book</ref>
<ref extends="a" name="b">page 2</ref>
<ref extends="b">section 3</ref>
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-b_2-0" class="reference"><a href="#cite_note-b-2">&#91;2&#93;</a></sup>
<sup id="cite_ref-3" class="reference"><a href="#cite_note-3">&#91;3&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
<li id="cite_note-b-2"><span class="mw-cite-backlink"><a href="#cite_ref-b_2-0">↑</a></span> <span class="reference-text">page 2</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">section 3</span>
</li>
</ol></div>
!! end
!! test
T236256 - Named reference without text
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a" />
<ref extends="a">page 1</ref>
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
</p>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;2&#93;</a></sup><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag;
no text was provided for refs named <code>a</code></span></li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">page 1</span>
</li>
</ol></div>
!! end
!! test
T236256 - No text for a book reference
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="foo">book</ref>
<ref extends="foo" />
!! html/php
<p><sup id="cite_ref-foo_1-0" class="reference"><a href="#cite_note-foo-1">&#91;1&#93;</a></sup>
</p>
<span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: The opening <code>&lt;ref&gt;</code> tag is malformed or has a bad name</span><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-foo-1"><span class="mw-cite-backlink"><a href="#cite_ref-foo_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
</ol></div>
!! end
!! test
T236256 - Empty text for a book reference
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="foo">book</ref>
<ref extends="foo"></ref>
!! html/php
<p><sup id="cite_ref-foo_1-0" class="reference"><a href="#cite_note-foo-1">&#91;1&#93;</a></sup>
<span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag;
</p>
refs with no name must have content</span><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-foo-1"><span class="mw-cite-backlink"><a href="#cite_ref-foo_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
</ol></div>
!! end
!! test
T236256 - De-facto empty text for a book reference
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="foo">book</ref>
<ref extends="foo"> </ref>
!! html/php
<p><sup id="cite_ref-foo_1-0" class="reference"><a href="#cite_note-foo-1">&#91;1&#93;</a></sup>
<span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag;
</p>
refs with no name must have content</span><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-foo-1"><span class="mw-cite-backlink"><a href="#cite_ref-foo_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
</ol></div>
!! end
# TODO:
# * Subnumbering and indent.
!! test
T236256 - Everything in the same group
!! config
wgCiteBookReferencing=true
!! wikitext
<ref group="g1" name="a">book</ref>
<ref group="g1" extends="a" name="b">page</ref>
<ref group="g1" name="b" />
<references group="g1"/>
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;g1 1&#93;</a></sup>
<sup id="cite_ref-b_2-0" class="reference"><a href="#cite_note-b-2">&#91;g1 2&#93;</a></sup>
<sup id="cite_ref-b_2-1" class="reference"><a href="#cite_note-b-2">&#91;g1 2&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
<li id="cite_note-b-2"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-b_2-0">2.0</a></sup> <sup><a href="#cite_ref-b_2-1">2.1</a></sup></span> <span class="reference-text">page</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error at the second reference.
!! test
T236256 - Base and book reference in different groups
!! config
wgCiteBookReferencing=true
!! wikitext
<ref group="g1" name="a">book</ref>
<ref group="g2" extends="a">page</ref>
<references group="g1"/>
<references group="g2"/>
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;g1 1&#93;</a></sup>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;g2 1&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
</ol></div>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">page</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error at the second reference.
!! test
T236256 - Extending in the unnamed default group
!! config
wgCiteBookReferencing=true
!! wikitext
<ref group="g1" name="a">book</ref>
<ref extends="a">page</ref>
<references group="g1"/>
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;g1 1&#93;</a></sup>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;1&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
</ol></div><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">page</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error at the second reference.
!! test
T236256 - Base in the unnamed default group
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book</ref>
<ref group="g1" extends="a">page</ref>
<references group="g1"/>
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;g1 1&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">page</span>
</li>
</ol></div><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
</ol></div>
!! end
# TODO:
# * Subnumbering and indent.
!! test
T236256 - Extending a multi-part ref should be fine
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">part 1</ref>
<ref follow="a">part 2</ref>
<ref extends="a">ok</ref>
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
</p><p><sup id="cite_ref-2" class="reference"><a href="#cite_note-2">&#91;2&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">part 1 part 2</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">ok</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error at the third reference.
!! test
T236256 - Dont allow splitting a book reference for now
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book</ref>
<ref extends="a" name="b">page 2</ref>
<ref follow="b">and page 3 the same time?</ref>
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-b_2-0" class="reference"><a href="#cite_note-b-2">&#91;2&#93;</a></sup>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book</span>
</li>
<li id="cite_note-b-2"><span class="mw-cite-backlink"><a href="#cite_ref-b_2-0">↑</a></span> <span class="reference-text">page 2 and page 3 the same time?</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error at the second reference.
!! test
T236256 - Cant be a follow up and a book reference the same time
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book 1</ref>
<ref follow="a" extends="a">huh?</ref>
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag;
invalid names, e.g. too many</span>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book 1</span>
</li>
</ol></div>
!! end
# TODO:
# * Should render an error at the third reference.
!! test
T236256 - Can't be a follow up and a book reference the same time, even when referencing 2 different bases
!! config
wgCiteBookReferencing=true
!! wikitext
<ref name="a">book 1</ref>
<ref name="b">book 2</ref>
<ref follow="a" extends="b">huh?</ref>
<references />
!! html/php
<p><sup id="cite_ref-a_1-0" class="reference"><a href="#cite_note-a-1">&#91;1&#93;</a></sup>
<sup id="cite_ref-b_2-0" class="reference"><a href="#cite_note-b-2">&#91;2&#93;</a></sup>
<span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: Invalid <code>&lt;ref&gt;</code> tag;
invalid names, e.g. too many</span>
</p>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-a-1"><span class="mw-cite-backlink"><a href="#cite_ref-a_1-0">↑</a></span> <span class="reference-text">book 1</span>
</li>
<li id="cite_note-b-2"><span class="mw-cite-backlink"><a href="#cite_ref-b_2-0">↑</a></span> <span class="reference-text">book 2</span>
</li>
</ol></div>
!! end