# Force the test runner to ensure the extension is loaded !! hooks ref references !! endhooks !! article Template:echo !! text {{{1}}} !! endarticle !! article Template:refinref !! text ho !! endarticle !! test Simple , no !! wikitext Wikipedia rocks!Proceeds of Rockology, vol. XXI !! html Wikipedia rocks![1]
  1. Proceeds of Rockology, vol. XXI
!! end !! test Simple , with !! wikitext Wikipedia rocks!Proceeds of Rockology, vol. XXI !! html

Wikipedia rocks![1]

  1. Proceeds of Rockology, vol. XXI
!! end !! article Template:Simple template !! text A ''simple'' template. !! endarticle !! test with a simple template !! wikitext Templating{{simple template}} !! html

Templating[1]

  1. A simple template.
!! end !! test with a !! wikitext Templating{{simple template}} !! html

Templating[1]

  1. {{simple template}}
!! end !! test in a !! wikitext Templating{{simple template}} !! html

Templating<ref>{{simple template}}</ref>


!! end !! test in a !! wikitext Templating !! html

Templating


!! end !! test in a (T7384) !! wikitext TemplatingText !! html/php+tidy

Templating[1]

  1. Text
!! html/parsoid

Templating[1]

  1. Text
!! end !! test in an ignored caption (T235656) !! wikitext [[File:Foobar.jpg|frameless|ignored caption with a refboo]] !! html/php+tidy

ignored caption with a ref[1]

  1. boo
!! html/parsoid

  1. boo
!! end !! test in expanded attributes of tags (legitimate or otherwise) !! options parsoid=wt2html,wt2wt !! wikitext {| |- boo |x |} !! html/php+tidy
x
  1. boo
!! html/parsoid
x
  1. boo
!! end !! test s in language variant markup !! options language=sr variant=sr-ec !! wikitext -{lj a}-аб-{nj b}-вг-{dž}- c !! html/php+tidy

lj [1]абnj [2]вгdž ц [2]

  1. а
  2. 2,0 2,1 б
!! html/parsoid

абвг c [2]

  1. a
  2. 1 2 b
!! end !! test after (bug 6164) !! options parsoid=wt2html,html2html !! wikitext one Image:Foobar.jpg !! html/php

[1]

  1. one
!! html/parsoid

[1]

  1. one
!! end !! test {{REVISIONID}} on page with (bug 6299) !! wikitext {{REVISIONID}}elite !! html 1337[1]
  1. elite
!! end !! test {{REVISIONID}} on page without (bug 6299 sanity check) !! wikitext {{REVISIONID}} !! html

1337

!! end !! test Ref with content followed by blank ref !! wikitext content !! html

[1]

[1]

  1. 1.0 1.1 content
!! end !! test Blank ref followed by ref with content !! wikitext content !! html

[1]

[1]

  1. 1.0 1.1 content
!! end !! test Regression: non-blank ref "0" followed by ref with content !! wikitext 0 content !! html

[1]

[1]

  1. 1.0 1.1 0 Cite error: Invalid <ref> tag; name "blank" defined multiple times with different content
!! end !! test Regression sanity check: non-blank ref "1" followed by ref with content !! wikitext 1 content !! html

[1]

[1]

  1. 1.0 1.1 1 Cite error: Invalid <ref> tag; name "blank" defined multiple times with different content
!! end !! test Ref names containing a number !! wikitext One Two Three !! html

[1] [2] [3]

  1. One
  2. Two
  3. Three
!! end !! test T184912: Consistent normalization of consecutive underscores !! wikitext example !! html

[1]

  1. example
!! end !! test Erroneous refs !! wikitext Zero Also zero, but differently! (Normal ref) !! html

Cite error: Invalid <ref> tag; name cannot be a simple integer. Use a descriptive title

[1]

Cite error: The opening <ref> tag is malformed or has a bad name

[2]

[3]

Cite error: Invalid parameter in <references> tag

  1. Also zero, but differently! (Normal ref)
  2. Cite error: Invalid <ref> tag; no text was provided for refs named bar
  3. Cite error: Invalid <ref> tag; no text was provided for refs named blankwithnoreference
!! end !! test Can't have name="…" and follow="…" the same time !! wikitext theValue !! html

Cite error: Invalid <ref> tag; invalid names, e.g. too many

!! end !! test Conflicting name="…" and follow="…" still invalid when a third parameter is present !! wikitext theValue !! html

Cite error: Invalid <ref> tag; invalid names, e.g. too many

!! end !! test It's not possible to follow="…" a defined in the section !! wikitext theFollows theValue !! html

    theFollows

Cite error: <ref> tag with name "theName" defined in <references> is not used in prior text.

!! end !! test A follow="…" before its parent is not merged !! wikitext theFollows theValue !! html [1]

    theFollows

  1. theValue
!! end # This is a nasty edge case which was dropping the ref entirely. !! test "follow" after a named ref but before its parent !! wikitext First Second Third
!! html/php

[1]

[2]


    Second

  1. First
  2. Third
!! end !! test "follow" after an anonymous ref but before its parent !! wikitext First Second Third
!! html/php

[1]

[2]


    Second

  1. First
  2. Third
!! end !! test Valid follow="…" after it's parent !! wikitext theValue theFollows !! html

[1]

  1. theValue theFollows
!! end !! test Valid parameters become invalid when a third is present !! wikitext theValue !! html

Cite error: Invalid <ref> tag; invalid names, e.g. too many

!! end !! test Simple , with in group !! wikitext Wikipedia rocks!Proceeds of Rockology, vol. XXI Wikipedia rocks!Proceeds of Rockology, vol. XXI !! html

Wikipedia rocks![1] Wikipedia rocks![note 1]

  1. Proceeds of Rockology, vol. XXI
  1. Proceeds of Rockology, vol. XXI
!! end !! test Simple , with in group, with groupname in Chinese !! wikitext AAAref aBBBnote bCCCref c ;refs ;notes !! html

AAA[参 1]BBB[注 1]CCC[参 2]

refs
  1. ref a
  2. ref c
notes
  1. note b
!! end !! test Attributes are trimmed by the parser, see Sanitizer::decodeTagAttributes() !! wikitext in group g in group " g " !! html

[g 1] [g 2]

  1. in group g
  2. in group " g "
!! end !! test defined in !! wikitext BAR !! html

[1]

  1. BAR
!! end !! test defined in called with #tag !! wikitext {{#tag:references| BAR }} !! html

[1]

  1. BAR
!! end !! test defined in error conditions !! wikitext BAR bad group BAR BAR !! html

[2 1]

  1. Cite error: Invalid <ref> tag; no text was provided for refs named foo

Cite error: <ref> tag defined in <references> with name "foo" has no content.
Cite error: <ref> tag with name "unused" defined in <references> is not used in prior text.
Cite error: <ref> tag in <references> has conflicting group attribute "1".
Cite error: <ref> tag defined in <references> has no name attribute.

!! end !! test Error conditions on non-visible content !! wikitext x !! html

[1] [2] [3]

  1. x
  2. Cite error: Invalid <ref> tag; no text was provided for refs named b
  3. Cite error: Invalid <ref> tag; no text was provided for refs named c

Cite error: <ref> tag defined in <references> with name "a" has no content.
Cite error: <ref> tag defined in <references> with name "b" has no content.
Cite error: <ref> tag defined in <references> with name "c" has no content.

!! end !! article MediaWiki:cite_link_label_group-klingon !! text wa' cha' wej loS vagh jav Soch chorgh Hut wa'maH !! endarticle !! test with custom group link with number names in Klingon !! wikitext Wikipedia rocks!Proceeds of Rockology, vol. XXI !! html

Wikipedia rocks![wa']

  1. Proceeds of Rockology, vol. XXI
!! end !! test Consecutive whitespace in custom link label message should not create empty [] !! wikitext 1st 2nd !! html

[wa'] [cha']

  1. 1st
  2. 2nd
!! end !! test Bug 31374 regression check: nested strip items !! wikitext {{#tag:ref|notereference|group=Note}} !! html

[Note 1]

  1. note[1]
  1. reference
!! end !! test Bug 13073 regression check: wrapped !! options parsoid={"suppressErrors": true} !! wikitext foo
!! html/*

[1]

  1. foo
!! end !! test with no name and no content. !! wikitext Bla. !! html

Bla.Cite error: Invalid <ref> tag; refs with no name must have content

!! end !! test with an empty-string name parameter and no content. !! wikitext Bla. !! html

Bla.Cite error: Invalid <ref> tag; refs with no name must have content

!! end !! test with a non-empty name parameter and no content. !! wikitext Bla. !! html Bla.[1]
  1. Cite error: Invalid <ref> tag; no text was provided for refs named void
!! end !! test Multiple definition (outside ) !! wikitext abc def !! html

[1] [1]

  1. 1.0 1.1 abc Cite error: Invalid <ref> tag; name "a" defined multiple times with different content
!! end !! test Multiple definition (inside ) !! wikitext abc def !! html

[1]

  1. abc Cite error: Invalid <ref> tag; name "a" defined multiple times with different content
!! end !! test Multiple definition (mixed outside/inside) !! wikitext abc def !! html

[1]

  1. abc Cite error: Invalid <ref> tag; name "a" defined multiple times with different content
!! end !! test Multiple definition (inside {{#tag:references}}) !! wikitext {{#tag:references| abc def }} !! html

[1]

  1. abc Cite error: Invalid <ref> tag; name "a" defined multiple times with different content
!! end # Parsoid doesn't rt cleanly because name attribute is actually broken # here ( tag closes at first >); see next test for a tidied version. !! test T29694 - [] in reference names in HTML5 fragment mode !! config wgFragmentMode=[ 'html5' ] !! options parsoid=wt2html !! wikitext [bar] !! html/php [1]
  1. ">[bar]
!! html/parsoid

[1]

  1. ">[bar]
!! end !! test T29694 - [] in reference names in HTML5 fragment mode (tidied) !! config wgFragmentMode=[ 'html5' ] !! wikitext [bar] !! html/php

[1]

  1. [bar]
!! html/parsoid

[1]

  1. [bar]
!! end #### ---------------------------------------------------------------- #### Parsoid-only testing of Parsoid's impl of and #### tags. Parsoid's output for these tags differs from that of the #### PHP parser. #### ---------------------------------------------------------------- !! test Ref: 1. ref-location should be replaced with an index span !! wikitext A foo B foo C !! html/parsoid

A [1] B [2] C [3]

  1. foo
  2. foo
!! end !! test Ref: 2. ref-tags with identical names should all get the same index !! wikitext A foo B !! html/parsoid

A [1] B [1]

  1. 1 2 foo
!! end !! test Ref: 3. spaces in ref-names should be ignored !! wikitext A foo B C !! html/parsoid

A [1] B [1] C [1]

  1. 1 2 3 foo
!! end # NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly) !! test Ref: 4. 'constructor' should be accepted as a valid ref-name !! wikitext A foo !! html/parsoid

A [1]

  1. foo
!! end !! test Ref: 5. body should accept generic wikitext !! wikitext A This is a '''[[bolded link]]''' and this is a {{echo|transclusion}} !! html/parsoid

A [1]

  1. This is a bolded link and this is a transclusion
!! end !! test Ref: 6. indent-pres should not be output in ref-body !! wikitext A foo bar baz !! html/parsoid

A [1]

  1. foo bar baz
!! end !! test Ref: 7. No p-wrapping in ref-body !! wikitext A foo bar baz booz !! html/parsoid

A [1]

  1. foo bar baz booz
!! end !! test Ref: 8. transclusion wikitext has lower precedence !! wikitext A foo {{echo| B C}} !! html/parsoid

A [1] B C}}

  1. foo {{echo|
!! end !! test Ref: 9. unclosed comments should not leak out of ref-body !! wikitext A foo !! end !! test Ref: 10. Unclosed HTML tags should not leak out of ref-body !! wikitext A foo B C !! html/parsoid

A [1] B C

  1. foo
!! end !! test Ref: 11. ref-tags acts like an inline element wrt P-wrapping !! wikitext A foo B C bar D !! html/parsoid

A [1] B C [2] D

  1. foo
  2. bar
!! end !! test Ref: 12. ref-tags act as trailing newline migration barrier !! wikitext a b c !! html/parsoid

a

b [1] [2]

c

!! end !! test Ref: 13. ref-tags are not SOL-transparent and block indent-pres !! wikitext foo A bar B !! html/parsoid

[1] A [2] B

  1. foo
  2. bar
!! end ## Roundtripping fails because of nowiki'ing !! test Ref: 14. A nested ref-tag should be emitted as plain text !! options parsoid=wt2html !! wikitext foo bar baz !! html/parsoid

[1] baz</ref>

  1. foo <ref>bar
!! end !! test Ref: 15. ref-tags with identical names should get identical indexes !! wikitext A1 foo A2 B1 B2 bar !! html/parsoid

A1 [1] A2 [1] B1 [2] B2 [2]

  1. 1 2 foo
  2. 1 2 bar
!! end ## We don't bother wt2wt-ing non-standard whitespace !! test Ref: 16. Tokenizer should accept non-standard whitespace in and tags !!options parsoid=wt2html !! wikitext A foo !! html/parsoid

A [1]

  1. foo
!! end !! test Ref: 17. Generate valid HTML5 id/about attributes !! wikitext foo ve-created name !! html/parsoid

[1] [2]

  1. foo
  2. ve-created name
!! end !! test Ref: 18. T58916: Extension attributes should be parsed as plain text !! config wgFragmentMode=[ 'html5', 'legacy' ] !! wikitext foo !! html/php

[1]

  1. foo
!! html/parsoid

[1]

  1. foo
!! end # Parsoid doesn't wt2wt this cleanly because we serialize both # versions of the name the same way ("a & b") !! test Ref: 19. ref-tags with identical name encodings should get identical indexes !! config wgFragmentMode=[ 'html5', 'legacy' ] !! options parsoid=wt2html,html2html !! wikitext 1 foo 2 !! html/php

1 [1] 2 [1]

  1. 1.0 1.1 foo
!! html/parsoid

1 [1] 2 [1]

  1. 1 2 foo
!! end !! test Ref: 20. ref-tags with identical names but different content should keep it !! wikitext A Foo one B Foo two C !! html/parsoid

A [1] B [1] C [1]

  1. 1 2 3 Foo one
!! end !! test References: 1a. references tag without any refs should be handled properly !! wikitext !! html/parsoid
    !! end !! test References: 1b. references tag without any refs should be handled properly !! wikitext !! html/parsoid
      !! end !! test References: 2. references tag with group only outputs references from that group !! wikitext A foo B bar C baz !! html/parsoid

      A [a 1] B [b 1] C [1]

      1. foo
      1. baz
      1. bar
      !! end !! test References: 3. ref list should be cleared after processing references !! wikitext A foo B bar !! html

      A [1]

      1. foo

      B [1]

      1. bar
      !! html/parsoid

      A [1]

      1. foo

      B [1]

      1. bar
      !! end !! test Counters should be cleared after processing named !! wikitext A foo B bar !! html

      A [g 1]

      1. foo

      B [g 1]

      1. bar
      !! end !! test References: 4. only referenced group should be cleared after processing references !! wikitext A afoo B bfoo C cfoo !! html/parsoid

      A [a 1] B [1]

      1. afoo

      C [2]

      1. bfoo
      2. cfoo
      !! end ## Don't expect this to rt since we're dropping content !! test References: 5. ref tags in references should be processed while ignoring all other content !! options parsoid=wt2html,html2html !! wikitext A B bar foo This should just get lost. !! html/parsoid

      A [1] B [2]

      1. foo
      2. bar
      !! end !! test References: 6. from a transclusion !! wikitext Foo {{echo|}} !! html/php [1]
      1. Foo
      !! html/php+tidy

      [1]

      1. Foo
      !! html/parsoid

      [1]

      1. Foo
      !! end !! test References: 7. Multiple references tags (one without and one with nested refs) should be correctly handled !! wikitext A foo bar for a B foo !! html/parsoid

      A [1] B [X 1]

      1. foo bar for a
      1. foo
      !! end !! test References: 8. T88019: Remove s from templates inside that's itself inside a template !! wikitext X{{echo|foo {{echo|bar}} and {{echo|baz}} boo}} !! html/parsoid

      X[1]

      1. foo bar and baz boo
      !! end !! test References: 9. Generate missing references list at the end !! wikitext A foo B bar !! html/parsoid

      A [1] B [inexistent 1]

      1. foo
      1. bar
      !! end !! test References: 10.1. New shouldn't be added for unrelated edits. !! options parsoid={ "modes": ["selser"], "changes": [["#x", "remove"]], "selser": "noauto" } !! wikitext Unrelated text that's going to disappear. A foo !! wikitext/edited Unrelated text. A foo !! end !! test References: 10.2. New shouldn't be added for unrelated edits. !! options parsoid={ "modes": ["selser"], "changes": [["#x", "remove"]], "selser": "noauto", "responsiveReferences": { "enabled": true, "threshold": 2 } } !! wikitext Unrelated text that's going to disappear. A foo !! wikitext/edited Unrelated text. A foo !! end # Doesn't wt2wt cleanly because we don't encode the & in html2wt direction !! test Entities in ref name !! config wgFragmentMode=[ 'html5', 'legacy' ] !! options parsoid=wt2html,html2html !! wikitext hi !! html/php

      [1]

      1. hi
      !! html/parsoid

      [1]

      1. hi
      !! end ## The output here may look funny, but it's what the php parser will do. The ## unclosed references tag becomes escaped text, and then a new references ## tag is auto-generated. The test is wt2html only because it roundtrips with ## nowiki tags, and the auto-generated references tag is only dropped in ## rtTestMode. !! test Generate references for unclosed references tag !! options parsoid=wt2html !! wikitext afoo !! html/parsoid

      a[1]

      <references>

      1. foo
      !! end !! test New reference serializes on its own line !! options parsoid=wt2wt,html2wt !! wikitext foo !! html/parsoid foo
        !! end !! test Ref in ref !! wikitext test hi {{refinref}} !! html/php

        test [1]

        1. hi

        Cite error: <ref> tag defined in <references> has no name attribute.

        !! html/parsoid

        test [1]

        1. hi
        !! end ## Parsoid responsive references tests !! test Responsive references: disabled, autogenerated !! options parsoid={ "modes": ["wt2html"], "responsiveReferences": { "enabled": false, "threshold": 2 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        1. 1
        2. 2
        !! end !! test Responsive references: enabled, autogenerated !! options parsoid={ "modes": ["wt2html"], "responsiveReferences": { "enabled": true, "threshold": 2 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        !! end !! test Responsive references: enabled, autogenerated, exceed !! options parsoid={ "modes": ["wt2html"], "responsiveReferences": { "enabled": true, "threshold": 1 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        !! end !! test Responsive references: disabled !! options parsoid={ "responsiveReferences": { "enabled": false, "threshold": 2 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        1. 1
        2. 2
        !! end !! test Responsive references: enabled !! options parsoid={ "responsiveReferences": { "enabled": true, "threshold": 2 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        !! end !! test Responsive references: enabled, exceed !! options parsoid={ "responsiveReferences": { "enabled": true, "threshold": 1 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        !! end !! test Responsive references: disabled, explicit !! options parsoid={ "responsiveReferences": { "enabled": false, "threshold": 2 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        !! end !! test Responsive references: disabled, explicit, exceed !! options parsoid={ "responsiveReferences": { "enabled": false, "threshold": 1 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        !! end !! test Responsive references: enabled, explicit off !! options parsoid={ "responsiveReferences": { "enabled": true, "threshold": 2 } } !! wikitext Test 12 !! html/parsoid

        Test [1][2]

        1. 1
        2. 2
        !! end !! test Responsive references: roundtrip templates !! options parsoid={ "responsiveReferences": { "enabled": true, "threshold": 2 } } !! wikitext test 123 {{echo|haha}} !! html/parsoid

        test [1]

        haha

        1. 123
        !! end ## End Parsoid responsive references tests !! article Template:CircularRef !! text Hi {{CircularRef}} !! endarticle !! test CircularRef !! wikitext Hi {{CircularRef}} !! html/php

        [1]

        1. Hi

        Cite error: <ref> tag defined in <references> has no name attribute.

        !! html/parsoid

        [1]

        1. Hi
        !! end !! test T15673: with direction "rtl" !! wikitext TEST !! html/php

        [1]

        1. TEST
        !! html/parsoid

        [1]

        1. TEST
        !! end !! test T15673: with direction "ltr" !! wikitext TEST !! html/php

        [1]

        1. TEST
        !! html/parsoid

        [1]

        1. TEST
        !! end !! test T15673: with direction "LTR", keeps upper case !! wikitext TEST !! html/php

        [1]

        1. TEST
        !! html/parsoid

        [1]

        1. TEST
        !! end !! test T15673: with direction "nonsense", strip invalid dir attribute and shows error !! wikitext TEST !! html/php

        Cite error: Invalid dir="nonsense", must be ltr or rtl


        !! html/parsoid

        [1]

        1. TEST
        !! end !! test T15673: Direction is supported when specifying name and group !! wikitext TEST !! html/php

        [note 1]

        1. TEST
        !! html/parsoid

        [note 1]

        1. TEST
        !! end ## Just to catch regressions in Parsoid's tree-building / p-wrapping !! test Ref with block content in formatting tag !! wikitext ''hi
        ho
        '' !! html/parsoid

        hi[1]

        1. ho
        !! end !! test T196827: Use the dir parameter only from the full definition of a named ref tag !! wikitext abcdef ghijklmno !! html/php

        abc[1]def

        ghi[1]mno

        1. 1.0 1.1 jkl
        !! html/parsoid

        abc[1]def

        ghi[1]mno

        1. 1 2 jkl
        !! end !! test T196827: Ignore the dir parameter from the first use, which is not a full definition, and use the dir value from the full definition of a named ref tag !! wikitext abcdef ghijklmno !! html/php

        abc[1]def

        ghi[1]mno

        1. 1.0 1.1 jkl
        !! html/parsoid

        abc[1]def

        ghi[1]mno

        1. 1 2 jkl
        !! end !! test Similarly named refs with identical bodies !! wikitext 1 1 2 1 !! html/parsoid

        1 [1] 2 [1]

        1. 1 2 1
        !! end !! test T220196 - Reference names with high-bit characters, html5 mode !! config wgFragmentMode=['html5'] !! wikitext [bar] !! html/php

        [1]

        1. [bar]
        !! html/parsoid

        [1]

        1. [bar]
        !! end !! test T220196 - Reference names with high-bit characters, legacy mode !! config wgFragmentMode=['legacy'] !! wikitext [bar] !! html/php

        [1]

        1. [bar]
        !! html/parsoid

        [1]

        1. [bar]
        !! end ## Just a regression test !! test Transclusion parameter spacing is lost without data-parsoid !! options parsoid=wt2wt !! wikitext {{echo| Hi ho }} {{echo|
        }} !! html/parsoid !! end