Пример #1
0
    def test_parses_mixed(self):
        # Test that we can parse both a version 13 and earlier version files
        # using the same parser. Make sure that parsing works regardless of
        # the order of the incoming documents.
        sample_version_13 = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing version 13 test
               ---
               test: sample yaml
               ...
            not ok 2 A failing version 13 test"""
        )
        sample_pre_13 = inspect.cleandoc(
            """1..2
            ok 1 A passing pre-13 test
            not ok 2 A failing pre-13 test"""
        )

        parser = Parser()
        lines = []
        lines.extend(parser.parse_text(sample_version_13))
        lines.extend(parser.parse_text(sample_pre_13))
        if have_yaml:
            self.assertEqual(13, lines[0].version)
            self.assertEqual("A passing version 13 test", lines[2].description)
            self.assertEqual("A failing version 13 test", lines[3].description)
            self.assertEqual("A passing pre-13 test", lines[5].description)
            self.assertEqual("A failing pre-13 test", lines[6].description)
        else:
            self.assertEqual(13, lines[0].version)
            self.assertEqual("A passing version 13 test", lines[2].description)
            self.assertEqual("A failing version 13 test", lines[6].description)
            self.assertEqual("A passing pre-13 test", lines[8].description)
            self.assertEqual("A failing pre-13 test", lines[9].description)

        # Test parsing documents in reverse order
        parser = Parser()
        lines = []
        lines.extend(parser.parse_text(sample_pre_13))
        lines.extend(parser.parse_text(sample_version_13))
        if have_yaml:
            self.assertEqual("A passing pre-13 test", lines[1].description)
            self.assertEqual("A failing pre-13 test", lines[2].description)
            self.assertEqual(13, lines[3].version)
            self.assertEqual("A passing version 13 test", lines[5].description)
            self.assertEqual("A failing version 13 test", lines[6].description)
        else:
            self.assertEqual("A passing pre-13 test", lines[1].description)
            self.assertEqual("A failing pre-13 test", lines[2].description)
            self.assertEqual(13, lines[3].version)
            self.assertEqual("A passing version 13 test", lines[5].description)
            self.assertEqual("A failing version 13 test", lines[9].description)
Пример #2
0
    def test_parses_yaml_no_end(self):
        sample = inspect.cleandoc(u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               test: sample yaml
            not ok 2 A failing test""")
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        if have_yaml:
            converted_yaml = yaml.safe_load(u"""test: sample yaml""")
            self.assertEqual(4, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
            self.assertEqual("test", lines[3].category)
            self.assertIsNone(lines[3].yaml_block)
        else:
            self.assertEqual(6, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 5)):
                self.assertEqual("unknown", lines[l].category)
            self.assertEqual("test", lines[5].category)
Пример #3
0
    def test_parses_yaml_no_end(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               test: sample yaml
            not ok 2 A failing test"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        try:
            import yaml
            from more_itertools import peekable  # noqa

            converted_yaml = yaml.load(u"""test: sample yaml""")
            self.assertEqual(4, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
            self.assertEqual("test", lines[3].category)
            self.assertIsNone(lines[3].yaml_block)
        except ImportError:
            self.assertEqual(6, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 5)):
                self.assertEqual("unknown", lines[l].category)
            self.assertEqual("test", lines[5].category)
Пример #4
0
    def test_parses_yaml_no_end(self):
        sample = inspect.cleandoc(u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               test: sample yaml
            not ok 2 A failing test""")
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        try:
            import yaml
            from more_itertools import peekable  # noqa
            converted_yaml = yaml.load(u"""test: sample yaml""")
            self.assertEqual(4, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
            self.assertEqual('test', lines[3].category)
            self.assertIsNone(lines[3].yaml_block)
        except ImportError:
            self.assertEqual(6, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 5)):
                self.assertEqual('unknown', lines[l].category)
            self.assertEqual('test', lines[5].category)
Пример #5
0
    def test_parses_yaml_more_complex(self):
        sample = inspect.cleandoc(u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar""")
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        if have_yaml:
            converted_yaml = yaml.safe_load(u"""
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar""")
            self.assertEqual(3, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
        else:
            self.assertEqual(11, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 11)):
                self.assertEqual("unknown", lines[l].category)
Пример #6
0
    def test_parses_text(self):
        sample = inspect.cleandoc(u"""1..2
            ok 1 A passing test
            not ok 2 A failing test""")
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(3, len(lines))
        self.assertEqual('plan', lines[0].category)
        self.assertEqual('test', lines[1].category)
        self.assertTrue(lines[1].ok)
        self.assertEqual('test', lines[2].category)
        self.assertFalse(lines[2].ok)
Пример #7
0
    def test_parses_text(self):
        sample = inspect.cleandoc(
            u"""1..2
            ok 1 A passing test
            not ok 2 A failing test""")
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(3, len(lines))
        self.assertEqual('plan', lines[0].category)
        self.assertEqual('test', lines[1].category)
        self.assertTrue(lines[1].ok)
        self.assertEqual('test', lines[2].category)
        self.assertFalse(lines[2].ok)
Пример #8
0
    def test_parses_yaml_more_complex(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar
               output: |-
                 a multiline string
                 must be handled properly
                 even with | pipes
                 | here > and: there"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        if have_yaml:
            converted_yaml = yaml.safe_load(
                u'''
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar
               output: "a multiline string\\nmust be handled properly\\neven with | pipes\\n| here > and: there"'''  # noqa
            )
            self.assertEqual(3, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
        else:
            self.assertEqual(16, len(lines))
            self.assertEqual(13, lines[0].version)
            for line_index in list(range(3, 11)):
                self.assertEqual("unknown", lines[line_index].category)
Пример #9
0
    def test_malformed_yaml(self):
        self.maxDiff = None
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               test: sample yaml
               \tfail: tabs are not allowed!
               ...
            not ok 2 A failing test"""
        )
        yaml_err = inspect.cleandoc(
            u"""
WARNING: Optional imports not found, TAP 13 output will be
    ignored. To parse yaml, see requirements in docs:
    https://tappy.readthedocs.io/en/latest/consumers.html#tap-version-13"""
        )
        parser = Parser()
        lines = []

        with captured_output() as (parse_out, _):
            for line in parser.parse_text(sample):
                lines.append(line)

        try:
            import yaml  # noqa
            from more_itertools import peekable  # noqa

            self.assertEqual(4, len(lines))
            self.assertEqual(13, lines[0].version)
            with captured_output() as (out, _):
                self.assertIsNone(lines[2].yaml_block)
            self.assertEqual(
                "Error parsing yaml block. Check formatting.", out.getvalue().strip()
            )
            self.assertEqual("test", lines[3].category)
            self.assertIsNone(lines[3].yaml_block)
        except ImportError:
            self.assertEqual(8, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 7)):
                self.assertEqual("unknown", lines[l].category)
            self.assertEqual("test", lines[7].category)
            self.assertEqual(yaml_err, parse_out.getvalue().strip())
Пример #10
0
    def test_malformed_yaml(self):
        self.maxDiff = None
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               test: sample yaml
               \tfail: tabs are not allowed!
               ...
            not ok 2 A failing test"""
        )
        yaml_err = inspect.cleandoc(
            u"""
WARNING: Optional imports not found, TAP 13 output will be
    ignored. To parse yaml, see requirements in docs:
    https://tappy.readthedocs.io/en/latest/consumers.html#tap-version-13"""
        )
        parser = Parser()
        lines = []

        with captured_output() as (parse_out, _):
            for line in parser.parse_text(sample):
                lines.append(line)

        try:
            import yaml  # noqa
            from more_itertools import peekable  # noqa

            self.assertEqual(4, len(lines))
            self.assertEqual(13, lines[0].version)
            with captured_output() as (out, _):
                self.assertIsNone(lines[2].yaml_block)
            self.assertEqual(
                "Error parsing yaml block. Check formatting.", out.getvalue().strip()
            )
            self.assertEqual("test", lines[3].category)
            self.assertIsNone(lines[3].yaml_block)
        except ImportError:
            self.assertEqual(8, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 7)):
                self.assertEqual("unknown", lines[l].category)
            self.assertEqual("test", lines[7].category)
            self.assertEqual(yaml_err, parse_out.getvalue().strip())
Пример #11
0
    def test_parses_yaml_no_start(self):
        sample = inspect.cleandoc(u"""TAP version 13
            1..2
            ok 1 A passing test
               test: sample yaml
               ...
            not ok 2 A failing test""")
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(6, len(lines))
        self.assertEqual(13, lines[0].version)
        self.assertIsNone(lines[2].yaml_block)
        for l in list(range(3, 5)):
            self.assertEqual('unknown', lines[l].category)
        self.assertEqual('test', lines[5].category)
Пример #12
0
    def test_parses_yaml_more_complex(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        try:
            import yaml
            from more_itertools import peekable  # noqa

            converted_yaml = yaml.load(
                u"""
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar"""
            )
            self.assertEqual(3, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
        except ImportError:
            self.assertEqual(11, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 11)):
                self.assertEqual("unknown", lines[l].category)
Пример #13
0
    def test_parses_yaml_more_complex(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        try:
            import yaml
            from more_itertools import peekable  # noqa

            converted_yaml = yaml.load(
                u"""
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar"""
            )
            self.assertEqual(3, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
        except ImportError:
            self.assertEqual(11, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 11)):
                self.assertEqual("unknown", lines[l].category)
Пример #14
0
    def test_parses_yaml_no_start(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               test: sample yaml
               ...
            not ok 2 A failing test"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(6, len(lines))
        self.assertEqual(13, lines[0].version)
        self.assertIsNone(lines[2].yaml_block)
        for l in list(range(3, 5)):
            self.assertEqual("unknown", lines[l].category)
        self.assertEqual("test", lines[5].category)
Пример #15
0
def get_first_error(text):
    try:
        parser = Parser()
        tap_lines = parser.parse_text(text)

        # TODO: refactor
        lines = text.split("\n")
        output = []
        seeking = False
        for ix, tap_line in enumerate(tap_lines):
            if seeking and (tap_line.category == "test"
                            or "Backtrace:" in lines[ix]):
                break
            if not seeking and tap_line.category == "test" and not tap_line.ok:
                seeking = True
            if seeking:
                output.append(lines[ix])

        if message := "\n".join(output):
            return message
        else:
Пример #16
0
    def test_parses_yaml_no_association(self):
        sample = inspect.cleandoc(u"""TAP version 13
            1..2
            ok 1 A passing test
            # Diagnostic line
               ---
               test: sample yaml
               ...
            not ok 2 A failing test""")
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(8, len(lines))
        self.assertEqual(13, lines[0].version)
        self.assertIsNone(lines[2].yaml_block)
        self.assertEqual('diagnostic', lines[3].category)
        for l in list(range(4, 7)):
            self.assertEqual('unknown', lines[l].category)
        self.assertEqual('test', lines[7].category)
Пример #17
0
    def test_parses_yaml_no_association(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
            # Diagnostic line
               ---
               test: sample yaml
               ...
            not ok 2 A failing test"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(8, len(lines))
        self.assertEqual(13, lines[0].version)
        self.assertIsNone(lines[2].yaml_block)
        self.assertEqual("diagnostic", lines[3].category)
        for l in list(range(4, 7)):
            self.assertEqual("unknown", lines[l].category)
        self.assertEqual("test", lines[7].category)
Пример #18
0
from tap.parser import Parser

output = """
TAP version 13
1..3
DsMakeSpn: HTTP/LAB1-W2K8R2-GW.lab1.awake.local
ok 1 - TestDsMakeSpn # 0.004000
ok 2 - TestDsCrackNames # 0.000000
ok 3 - TestDsCrackNames # SKIP
[100%] Built target kos-qemu-image-TestDsParse-sim
"""

lines = []
parser = Parser()
for line in parser.parse_text(output):
    if line.category == "test":
        d = line.directive
        print(line.ok, line.description, line.skip, d.text)
    if line.category == "plan":
        print(line.expected_tests)
Пример #19
0
    def test_parses_yaml_more_complex(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar
               output: |-
                 a multiline string
                 must be handled properly
                 even with | pipes
                 | here > and: there"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        if have_yaml:
            converted_yaml = yaml.safe_load(
                u'''
               message: test
               severity: fail
               data:
                 got:
                   - foo
                 expect:
                   - bar
               output: |-
                 a multiline string
                 must be handled properly
                 even with | pipes
                 | here > and: there"""
            )
            self.assertEqual(3, len(lines))
            self.assertEqual(13, lines[0].version)
            self.assertEqual(converted_yaml, lines[2].yaml_block)
        else:
            self.assertEqual(16, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 11)):
                self.assertEqual("unknown", lines[l].category)

    def test_parses_yaml_no_association(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
            # Diagnostic line
               ---
               test: sample yaml
               ...
            not ok 2 A failing test"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(8, len(lines))
        self.assertEqual(13, lines[0].version)
        self.assertIsNone(lines[2].yaml_block)
        self.assertEqual("diagnostic", lines[3].category)
        for l in list(range(4, 7)):
            self.assertEqual("unknown", lines[l].category)
        self.assertEqual("test", lines[7].category)

    def test_parses_yaml_no_start(self):
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               test: sample yaml
               ...
            not ok 2 A failing test"""
        )
        parser = Parser()
        lines = []

        for line in parser.parse_text(sample):
            lines.append(line)

        self.assertEqual(6, len(lines))
        self.assertEqual(13, lines[0].version)
        self.assertIsNone(lines[2].yaml_block)
        for l in list(range(3, 5)):
            self.assertEqual("unknown", lines[l].category)
        self.assertEqual("test", lines[5].category)

    def test_malformed_yaml(self):
        self.maxDiff = None
        sample = inspect.cleandoc(
            u"""TAP version 13
            1..2
            ok 1 A passing test
               ---
               test: sample yaml
               \tfail: tabs are not allowed!
               ...
            not ok 2 A failing test"""
        )
        yaml_err = inspect.cleandoc(
            u"""
WARNING: Optional imports not found, TAP 13 output will be
    ignored. To parse yaml, see requirements in docs:
    https://tappy.readthedocs.io/en/latest/consumers.html#tap-version-13"""
        )
        parser = Parser()
        lines = []

        with captured_output() as (parse_out, _):
            for line in parser.parse_text(sample):
                lines.append(line)

        if have_yaml:
            self.assertEqual(4, len(lines))
            self.assertEqual(13, lines[0].version)
            with captured_output() as (out, _):
                self.assertIsNone(lines[2].yaml_block)
            self.assertEqual(
                "Error parsing yaml block. Check formatting.", out.getvalue().strip()
            )
            self.assertEqual("test", lines[3].category)
            self.assertIsNone(lines[3].yaml_block)
        else:
            self.assertEqual(8, len(lines))
            self.assertEqual(13, lines[0].version)
            for l in list(range(3, 7)):
                self.assertEqual("unknown", lines[l].category)
            self.assertEqual("test", lines[7].category)
            self.assertEqual(yaml_err, parse_out.getvalue().strip())
Пример #20
0
def get_score(text):
    parser = Parser()
    lines = text.split("\n")
    gen = parser.parse_text(text)
    return sum(test.ok for ix, test in enumerate(gen)
               if test.category == "test" and "WARNING" not in lines[ix])