Ejemplo n.º 1
0
 def test_parse_command_valid_no_end(self):
     """
     Run parse_command on an input without the comment end `-->` and check
     the return value.
     """
     retval = Markdown.parse_command("<!-- WRITE hello_world.c")
     self.assertEqual(retval, ("WRITE", "hello_world.c"))
Ejemplo n.º 2
0
 def test_parse_command_trailing_chars(self):
     """
     Run parse_command on an input with trailing characters. This should be
     illegal.
     """
     retval = Markdown.parse_command("<!-- WRITE hello_world.c --> oops")
     self.assertIsNone(retval)
Ejemplo n.º 3
0
    def test_parse_command_invalid(self):
        """
        Run parse_command on an input with missing characters, i.e. invalid
        input, and expect that the return valid is None.
        """
        retval = Markdown.parse_command("<-- WRITE hello_world.c -->")
        self.assertIsNone(retval)

        retval = Markdown.parse_command("!-- WRITE hello_world.c -->")
        self.assertIsNone(retval)

        retval = Markdown.parse_command("WRITE hello_world.c")
        self.assertIsNone(retval)

        retval = Markdown.parse_command("<!-- -->")
        self.assertIsNone(retval)

        retval = Markdown.parse_command("<!--   -->")
        self.assertIsNone(retval)
Ejemplo n.º 4
0
 def test_parse_code_empty(self):
     """
     Run parse_command on an empty code block. The return value should be
     an empty list.
     """
     block = []
     block.append("```root")
     block.append("```")
     retval = Markdown.parse_code(block)
     self.assertEqual(retval, [])
Ejemplo n.º 5
0
 def test_parse_code_empty_pre(self):
     """
     Run parse_command on an empty pre-block. The return value should be
     an empty list.
     """
     block = []
     block.append("<pre>")
     block.append("</pre>")
     retval = Markdown.parse_code(block)
     self.assertEqual(retval, [])
Ejemplo n.º 6
0
 def test_parse_code_valid_unnamed(self):
     """
     Run parse_command on an input without language indication and
     check that the return valid contains the specified block of code.
     """
     block = []
     block.append("```")
     block.append("void main() {};")
     block.append("```")
     retval = Markdown.parse_code(block)
     self.assertEqual(retval, ["void main() {};"])
Ejemplo n.º 7
0
 def test_parse_code_valid_python(self):
     """
     Run parse_command on an input with a different language indication and
     check that the return valid contains the specified block of code.
     """
     block = []
     block.append("```python")
     block.append("print(3)")
     block.append("```")
     retval = Markdown.parse_code(block)
     self.assertEqual(retval, ["print(3)"])
Ejemplo n.º 8
0
    def test_parse_invalid_middle_line(self):
        """
        Check that an example with a separation line between command and code
        fails. The violating line should stay in the original document.
        """
        doc = []
        doc.append("<!-- APPEND /dev/null -->")
        doc.append("This caused a seg fault?")

        retval = Markdown.parse(doc)
        self.assertIsNone(retval)
        self.assertEqual(doc, [])  # lines are eaten in the second round
Ejemplo n.º 9
0
    def test_parse_code_missing_end_pre(self):
        """
        Run parse_command on pre-input without the block end and check that
        parsing failed.
        """
        block = []
        block.append("<pre>")
        block.append("touch /tmp")
        block.append("touch /home")

        retval = Markdown.parse_code(block)
        self.assertIsNone(retval)
        self.assertEqual(block, [])
Ejemplo n.º 10
0
    def test_parse_code_missing_start(self):
        """
        Run parse_command on input without the block start and check that
        parsing failed.
        """
        block = []
        block.append("touch /tmp")
        block.append("touch /home")
        block.append("```")

        retval = Markdown.parse_code(block)
        self.assertIsNone(retval)
        self.assertEqual(block, ['touch /tmp', 'touch /home', '```'])
Ejemplo n.º 11
0
    def test_parse_no_tag_pre(self):
        """
        Check that an pre-example without any tags fails. This sould consume all
        lines.
        """
        doc = []
        doc.append("Yeeharr, this is an example.")
        doc.append("<pre>")
        doc.append("touch /tmp")
        doc.append("touch /home")
        doc.append("</pre>")
        doc.append("This caused a seg fault?")

        retval = Markdown.parse([])
        self.assertIsNone(retval)
Ejemplo n.º 12
0
    def test_parse_code_leading_lines_pre(self):
        """
        Run parse_command on pre-input with leading lines and check that parsing
        failed. The parse method should not remove any lines in this case.
        """
        block = []
        block.append("This is a leading line.")
        block.append("<pre>")
        block.append("touch /tmp")
        block.append("touch /home")
        block.append("</pre>")

        retval = Markdown.parse_code(block)
        self.assertIsNone(retval)

        self.assertEqual(len(block), 5)
Ejemplo n.º 13
0
    def test_parse_code_mix_delimiter_2(self):
        """
        Run parse_command on a block input which contains </pre> The
        parse_code should read this as-is and not interpret it as the block
        delimiter.
        """
        block = []
        block.append("```")
        block.append("<pre>")
        block.append("</pre>")
        block.append("```")
        retval = Markdown.parse_code(block)
        self.assertEqual(len(retval), 2)
        self.assertEqual(retval[0], "<pre>")
        self.assertEqual(retval[1], "</pre>")

        self.assertEqual(block, [])
Ejemplo n.º 14
0
    def test_parse_code_trailing_lines_pre(self):
        """
        Run parse_command on pre-input with trailing lines. Check that the
        trailing list is not in the output and all other lines have been
        removed from the input.
        """
        block = []
        block.append("<pre>")
        block.append("touch /tmp")
        block.append("touch /home")
        block.append("</pre>")
        block.append("This should not cause a crash.")

        retval = Markdown.parse_code(block)
        self.assertEqual(retval, ["touch /tmp", "touch /home"])

        self.assertEqual(block, ["This should not cause a crash."])
Ejemplo n.º 15
0
    def test_parse_code_valid_pre(self):
        """
        Run parse_command on a pre-block input and check that the return value
        contains the specified block of code. The example should remove all
        lines from the input.
        """
        block = []
        block.append("<pre>")
        block.append("whoami")
        block.append("ls ~")
        block.append("</pre>")
        retval = Markdown.parse_code(block)
        self.assertEqual(len(retval), 2)
        self.assertEqual(retval[0], "whoami")
        self.assertEqual(retval[1], "ls ~")

        self.assertEqual(block, [])
Ejemplo n.º 16
0
    def test_parse_valid_pre(self):
        """
        Check that a simple pre-example runs and returns args, command and
        content.
        """
        doc = []
        doc.append("<!-- APPEND /dev/null -->")
        doc.append("<pre>")
        doc.append("touch /tmp")
        doc.append("touch /home")
        doc.append("</pre>")

        retval = Markdown.parse(doc)
        self.assertEqual(len(retval), 4)
        command, args, content, length = retval
        self.assertEqual(command, "APPEND")
        self.assertEqual(args, "/dev/null")
        self.assertEqual(content, ["touch /tmp", "touch /home"])
        self.assertEqual(length, 5)
Ejemplo n.º 17
0
    def test_parse_valid_additional_lines_pre(self):
        """
        Check that an pre-example with unrelated lines runs and returns args,
        command and content. The inital list of lines should be modified and
        is expected to contain only the tailing lines.
        """
        doc = []
        doc.append("Yeeharr, this is an example.")
        doc.append("<!-- APPEND /dev/null -->")
        doc.append("<pre>")
        doc.append("touch /tmp")
        doc.append("touch /home")
        doc.append("</pre>")
        doc.append("This caused a seg fault?")

        retval = Markdown.parse(doc)
        self.assertEqual(len(retval), 4)
        command, args, content, length = retval
        self.assertEqual(command, "APPEND")
        self.assertEqual(args, "/dev/null")
        self.assertEqual(content, ["touch /tmp", "touch /home"])
        self.assertEqual(length, 5)
        self.assertEqual(doc, ["This caused a seg fault?"])
Ejemplo n.º 18
0
 def test_parse_command_valid(self):
     """
     Run parse_command on a standard input and check the return value.
     """
     retval = Markdown.parse_command("<!-- WRITE hello_world.c -->")
     self.assertEqual(retval, ("WRITE", "hello_world.c"))
Ejemplo n.º 19
0
 def test_parse_empty_input(self):
     """
     Check that an empty example fails.
     """
     retval = Markdown.parse([])
     self.assertIsNone(retval)
Ejemplo n.º 20
0
    def test_parse_command_whitespace(self):
        """
        Run parse_command on a valid input with whitespace added/removed in various
        places check the return value. Additional whitespace should be
        ignored, except at the beginning of the line. Missing whitespace
        should be invalid.
        """
        expectation = ("WRITE", "hello_world.c")

        # valid whitespace
        retval = Markdown.parse_command("<!-- WRITE hello_world.c -->")
        self.assertEqual(retval, expectation)

        retval = Markdown.parse_command("<!--   WRITE hello_world.c -->")
        self.assertEqual(retval, expectation)

        retval = Markdown.parse_command("<!--\tWRITE hello_world.c -->")
        self.assertEqual(retval, expectation)

        retval = Markdown.parse_command("<!-- WRITE   hello_world.c -->")
        self.assertEqual(retval, expectation)

        retval = Markdown.parse_command("<!-- WRITE hello_world.c     -->")
        self.assertEqual(retval, expectation)

        retval = Markdown.parse_command("<!-- WRITE hello_world.c -->  ")
        self.assertEqual(retval, expectation)

        retval = Markdown.parse_command("<!-- WRITE hello_world.c\r-->")
        self.assertEqual(retval, expectation)

        retval = Markdown.parse_command("<!--  WRITE  hello_world.c  -->  ")
        self.assertEqual(retval, expectation)

        # special case: space within argument, also valid
        retval = Markdown.parse_command("<!--  WRITE  hello  world c  -->  ")
        self.assertEqual(retval, ("WRITE", "hello  world c"))

        # special case: no argument, but valid
        retval = Markdown.parse_command("<!-- WRITEhello_world.c -->")
        self.assertEqual(retval, ("WRITEhello_world.c", None))

        # invalid whitespace
        retval = Markdown.parse_command("<!-- WRITE hello_world.c-->")
        self.assertIsNone(retval)

        retval = Markdown.parse_command("<!--WRITE hello_world.c -->")
        self.assertIsNone(retval)

        retval = Markdown.parse_command(" <!-- WRITE hello_world.c -->")
        self.assertIsNone(retval)

        retval = Markdown.parse_command("<! -- WRITE hello_world.c -->")
        self.assertIsNone(retval)

        # this is still invalid, since the args part must not contain '>'
        retval = Markdown.parse_command("<!-- WRITE hello_world.c - ->")
        self.assertIsNone(retval)