def test_invalid_nested_wikilinks(self): self.assertEqual( { 'Parameter': [], 'ParserFunction': [], 'Template': [], 'WikiLink': [[10, 15]], 'Comment': [], 'ExtTag': [[0, 24]] }, parse_to_spans(bytearray(b'<ref>[[L| [[S]] ]]</ref>')))
def test_invalid_nested_wikilinks_in_ref(self): self.assertEqual( { 'Parameter': [], 'ParserFunction': [], 'Template': [], 'WikiLink': [[0, 13]], 'Comment': [], 'ExtTag': [] }, parse_to_spans(bytearray(b'[[L| [[S]] ]]')))
def test_single_brace_after_pf_remove(self): self.assertEqual( { 'Parameter': [], 'ParserFunction': [[4, 17]], 'Template': [[1, 21]], 'WikiLink': [], 'Comment': [], 'ExtensionTag': [] }, parse_to_spans(bytearray(b'{{{ {{#if:v|y|n}}} }}')))
def test_invalid_table_in_template(self): self.assertEqual( { 'Comment': [], 'ExtensionTag': [], 'Parameter': [], 'ParserFunction': [], 'Template': [[0, 17]], 'WikiLink': [] }, parse_to_spans(bytearray(b'{{t|\n{|a\n|b\n|}\n}}')))
def test_eliminate_invalid_templates_after_extracting_params(self): self.assertEqual( { 'Comment': [], 'ExtensionTag': [], 'Parameter': [[0, 9]], 'ParserFunction': [], 'Template': [], 'WikiLink': [] }, parse_to_spans(bytearray(b'{{{_|2}}}')))
def test_nested_parser_functions_containing_param(self): self.assertEqual( { 'Comment': [], 'ExtensionTag': [], 'Parameter': [[18, 25]], 'ParserFunction': [[0, 31], [9, 28]], 'Template': [], 'WikiLink': [] }, parse_to_spans(bytearray(b'{{#if: | {{#expr: {{{p}}} }} }}')))
def test_nested_wikilinks_in_ref(self): self.assertEqual( { 'Parameter': [], 'ParserFunction': [], 'Template': [], 'WikiLink': [[30, 38], [5, 40]], 'Comment': [], 'ExtensionTag': [[0, 46]] }, parse_to_spans( bytearray(b'<ref>[[File:Example.jpg|thumb|[[Link]]]]</ref>')))
def test_nested_param_semiparser(self): self.assertEqual( [[1, 14]], parse_to_spans(bytearray(b'{{{#if:v|y|n}}}'))['ParserFunction'], )
def test_parse_inner_contents_of_wikilink_inside_ref(self): self.assertEqual( [[7, 20]], parse_to_spans( bytearray(b'<ref>[[{{text|link}}]]</ref>'))['Template'], )
def test_single_brace_after_first_tl_removal(self): self.assertEqual( [[7, 16], [0, 20]], parse_to_spans(bytearray(b'{{text|{{text|}}} }}'))['Template'], )
def test_single_brace_in_tl(self): self.assertEqual( [[0, 12]], parse_to_spans(bytearray(b'{{text|i}n}}'))['Template'], )
def bytearray_parse_to_spans(bytes_: bytes) -> Dict[str, List[List[int]]]: return { k: [i[:2] for i in v] for k, v in parse_to_spans(bytearray(bytes_)).items()}
def bytearray_parse_to_spans(bytes_: bytes): return parse_to_spans(bytearray(bytes_))
def test_nested_template_with_unmatched_leading_brace(self): self.assertEqual( [0, 21], parse_to_spans(bytearray(b'{{text|{{{text|a}} }}'))['Template'][0])
def test_params_are_extracted_before_parser_functions(self): self.assertEqual([[0, 17]], parse_to_spans( bytearray(b'{{{#expr:1+1|3}}}'))['Parameter'])