예제 #1
0
    def assert_run_command(self, command, **kw_args):
        """
        Passes if command is successfully ran and returns subprocess.Popen.

          process = self.assert_run_command(["echo", "123"])    # => pass
          self.assert_equal("123\\n", process.stdout.read())    # => pass
          self.assert_run_command("false")                      # => fail
          self.assert_run_command("unknown-command")            # => fail
        """
        import subprocess
        popen_kw_args = {
            "stdin": subprocess.PIPE,
            "stdout": subprocess.PIPE,
            "stderr": subprocess.PIPE,
        }
        popen_kw_args.update(kw_args)
        try:
            process = subprocess.Popen(command, **popen_kw_args)
        except OSError:
            exception_class, exception_value = sys.exc_info()[:2]
            message = "expected: <%s> is successfully ran\n" \
                " but was: <%s>(%s) is raised and failed to ran" % \
                (pp.format(command),
                 pp.format_exception_class(exception_class),
                 str(exception_value))
            self._fail(message)
        return_code = process.wait()
        if return_code != 0:
            message = "expected: <%s> is successfully finished\n" \
                " but was: <%d> is returned as exit code" % \
                (pp.format(command), return_code)
            self._fail(message)
        self._pass_assertion()
        return process
예제 #2
0
    def assert_run_command(self, command, **kw_args):
        """
        Passes if command is successfully ran and returns subprocess.Popen.

          process = self.assert_run_command(["echo", "123"])    # => pass
          self.assert_equal("123\\n", process.stdout.read())    # => pass
          self.assert_run_command("false")                      # => fail
          self.assert_run_command("unknown-command")            # => fail
        """
        import subprocess
        popen_kw_args = {
            "stdin": subprocess.PIPE,
            "stdout": subprocess.PIPE,
            "stderr": subprocess.PIPE,
        }
        popen_kw_args.update(kw_args)
        try:
            process = subprocess.Popen(command, **popen_kw_args)
        except OSError:
            exception_class, exception_value = sys.exc_info()[:2]
            message = "expected: <%s> is successfully ran\n" \
                " but was: <%s>(%s) is raised and failed to ran" % \
                (pp.format(command),
                 pp.format_exception_class(exception_class),
                 str(exception_value))
            self._fail(message)
        return_code = process.wait()
        if return_code != 0:
            message = "expected: <%s> is successfully finished\n" \
                " but was: <%d> is returned as exit code" % \
                (pp.format(command), return_code)
            self._fail(message)
        self._pass_assertion()
        return process
예제 #3
0
    def assert_equal(self, expected, actual, message=None):
        """
        Passes if expected == actual.

          self.assert_equal(5, 2 + 3) # => pass
        """
        if expected == actual:
            self._pass_assertion()
        else:
            formatted_expected = pp.format(expected)
            formatted_actual = pp.format(actual)
            self._fail("", message, formatted_expected, formatted_actual)
예제 #4
0
    def assert_equal(self, expected, actual, message=None):
        """
        Passes if expected == actual.

          self.assert_equal(5, 2 + 3) # => pass
        """
        if expected == actual:
            self._pass_assertion()
        else:
            formatted_expected = pp.format(expected)
            formatted_actual = pp.format(actual)
            self._fail("", message, formatted_expected, formatted_actual)
예제 #5
0
    def assert_hasattr(self, object, name, message=None):
        """
        Passes if hasattr(object, name) returns True.

          self.assert_hasattr("string", "strip")   # => pass
          self.assert_hasattr("string", "unknown") # => fail
        """
        if hasattr(object, name):
            self._pass_assertion()
        else:
            object = pp.format(object)
            name = pp.format(name)
            system_message = "expected: hasattr(%s, %s)" % (object, name)
            self._fail(system_message, message)
예제 #6
0
    def assert_hasattr(self, object, name, message=None):
        """
        Passes if hasattr(object, name) returns True.

          self.assert_hasattr("string", "strip")   # => pass
          self.assert_hasattr("string", "unknown") # => fail
        """
        if hasattr(object, name):
            self._pass_assertion()
        else:
            object = pp.format(object)
            name = pp.format(name)
            system_message = "expected: hasattr(%s, %s)" % (object, name)
            self._fail(system_message, message)
예제 #7
0
    def assert_not_equal(self, not_expected, actual, message=None):
        """
        Passes if not_expected != actual.

          self.assert_not_equal(-5, 2 + 3) # => pass
        """
        if not_expected != actual:
            self._pass_assertion()
        else:
            formatted_not_expected = pp.format(not_expected)
            formatted_actual = pp.format(actual)
            system_message = "not expected: <%s>\n     but was: <%s>" % \
                (formatted_not_expected, formatted_actual)
            if formatted_not_expected != formatted_actual:
                system_message = pp.append_diff(system_message,
                                                not_expected, actual)
            self._fail(system_message, message)
예제 #8
0
    def assert_not_equal(self, not_expected, actual, message=None):
        """
        Passes if not_expected != actual.

          self.assert_not_equal(-5, 2 + 3) # => pass
        """
        if not_expected != actual:
            self._pass_assertion()
        else:
            formatted_not_expected = pp.format(not_expected)
            formatted_actual = pp.format(actual)
            system_message = "not expected: <%s>\n     but was: <%s>" % \
                (formatted_not_expected, formatted_actual)
            if formatted_not_expected != formatted_actual:
                system_message = pp.append_diff(system_message, not_expected,
                                                actual)
            self._fail(system_message, message)
예제 #9
0
    def assert_in_delta(self, expected, actual, delta, message=None):
        """
        Passes if (expected - delta) <= actual <= (expected + delta).

          self.assert_in_delta(3, 3.01, 0.001) # => pass
        """
        lower = expected - delta
        upper = expected + delta
        if lower <= actual <= upper:
            self._pass_assertion()
        else:
            expected = pp.format(expected)
            actual = pp.format(actual)
            delta = pp.format(delta)
            range = pp.format([lower, upper])
            system_message = "expected: <%s+-%s %s>\n but was: <%s>" % \
                (expected, delta, range, actual)
            self._fail(system_message, message)
예제 #10
0
    def assert_in_delta(self, expected, actual, delta, message=None):
        """
        Passes if (expected - delta) <= actual <= (expected + delta).

          self.assert_in_delta(3, 3.01, 0.001) # => pass
        """
        lower = expected - delta
        upper = expected + delta
        if lower <= actual <= upper:
            self._pass_assertion()
        else:
            expected = pp.format(expected)
            actual = pp.format(actual)
            delta = pp.format(delta)
            range = pp.format([lower, upper])
            system_message = "expected: <%s+-%s %s>\n but was: <%s>" % \
                (expected, delta, range, actual)
            self._fail(system_message, message)
예제 #11
0
 def search(pattern):
     if isinstance(pattern, str):
         pattern = re.compile(pattern)
     content = b''
     timeout = 1.5
     while len(select.select([messages.stdout], [], [], timeout)[0]) > 0:
         timeout = 0.1
         added_content = messages.stdout.read()
         if not added_content:
             break
         content += added_content
         if re.search(pattern, str(content)):
             return
     message = \
         "expected: <%s> is found in <%s>\n" \
         " content: <%s>" % \
         (pp.format_re(pattern),
          pp.format(log_file),
          pp.format(content))
     self.fail(message)
예제 #12
0
 def search(pattern):
     if isinstance(pattern, str):
         pattern = re.compile(pattern)
     content = b''
     timeout = 1.5
     while len(select.select([messages.stdout], [], [],
                             timeout)[0]) > 0:
         timeout = 0.1
         added_content = messages.stdout.read()
         if not added_content:
             break
         content += added_content
         if re.search(pattern, str(content)):
             return
     message = \
         "expected: <%s> is found in <%s>\n" \
         " content: <%s>" % \
         (pp.format_re(pattern),
          pp.format(log_file),
          pp.format(content))
     self.fail(message)
예제 #13
0
    def assert_callable(self, object, message=None):
        """
        Passes if callable(object) returns True.

          self.assert_callable(lambda: 1) # => pass
          self.assert_callable("string")  # => fail
        """
        if callable(object):
            self._pass_assertion()
        else:
            object = pp.format(object)
            system_message = "expected: callable(%s)" % (object)
            self._fail(system_message, message)
예제 #14
0
    def assert_callable(self, object, message=None):
        """
        Passes if callable(object) returns True.

          self.assert_callable(lambda: 1) # => pass
          self.assert_callable("string")  # => fail
        """
        if callable(object):
            self._pass_assertion()
        else:
            object = pp.format(object)
            system_message = "expected: callable(%s)" % (object)
            self._fail(system_message, message)
예제 #15
0
    def assert_match(self, pattern, target, message=None):
        """
        Passes if re.match(pattern, target) doesn't return None.

          self.assert_match("abc", "abcde") # => pass
          self.assert_match("abc", "deabc") # => fail
        """
        if re.match(pattern, target):
            self._pass_assertion()
        else:
            pattern_repr = pp.format_re_repr(pattern)
            pattern = pp.format_re(pattern)
            target = pp.format(target)
            format = \
                "expected: re.match(%s, %s) doesn't return None\n" \
                " pattern: <%s>\n" \
                "  target: <%s>"
            system_message = format % (pattern_repr, target, pattern, target)
            self._fail(system_message, message)
예제 #16
0
    def assert_not_found(self, pattern, target, message=None):
        """
        Passes if re.search(pattern, target) returns None.

          self.assert_search("abc", "deABC") # => pass
          self.assert_search("abc", "deabc") # => fail
        """
        if re.search(pattern, target) is None:
            self._pass_assertion()
        else:
            pattern_repr = pp.format_re_repr(pattern)
            pattern = pp.format_re(pattern)
            target = pp.format(target)
            format = \
                "expected: re.search(%s, %s) returns None\n" \
                " pattern: <%s>\n" \
                "  target: <%s>"
            system_message = format % (pattern_repr, target, pattern, target)
            self._fail(system_message, message)
예제 #17
0
    def assert_not_found(self, pattern, target, message=None):
        """
        Passes if re.search(pattern, target) returns None.

          self.assert_search("abc", "deABC") # => pass
          self.assert_search("abc", "deabc") # => fail
        """
        if re.search(pattern, target) is None:
            self._pass_assertion()
        else:
            pattern_repr = pp.format_re_repr(pattern)
            pattern = pp.format_re(pattern)
            target = pp.format(target)
            format = \
                "expected: re.search(%s, %s) returns None\n" \
                " pattern: <%s>\n" \
                "  target: <%s>"
            system_message = format % (pattern_repr, target, pattern, target)
            self._fail(system_message, message)
예제 #18
0
    def assert_match(self, pattern, target, message=None):
        """
        Passes if re.match(pattern, target) doesn't return None.

          self.assert_match("abc", "abcde") # => pass
          self.assert_match("abc", "deabc") # => fail
        """
        if re.match(pattern, target):
            self._pass_assertion()
        else:
            pattern_repr = pp.format_re_repr(pattern)
            pattern = pp.format_re(pattern)
            target = pp.format(target)
            format = \
                "expected: re.match(%s, %s) doesn't return None\n" \
                " pattern: <%s>\n" \
                "  target: <%s>"
            system_message = format % (pattern_repr, target, pattern, target)
            self._fail(system_message, message)
예제 #19
0
 def test_run_failed_dict_data(self):
     class TestCase(pikzie.TestCase):
         def test_fail_assertion_dict_data(self, data):
             self.assert_equal(data, data)
             self.assert_equal("dict", data)
     label = "fail"
     data = {"a": 1, "b": 2}
     test = TestCase("test_fail_assertion_dict_data", label, data)
     format = \
         "\n" \
         "1) Failure: TestCase.test_fail_assertion_dict_data (%s): %s\n" \
         "  data: %s\n" \
         "%s:%d: %s\n" \
         "expected: <'dict'>\n" \
         " but was: <%s>\n" \
         "\n"
     target_line = "self.assert_equal(\"dict\", data)"
     line_no = Source.find_target_line_no(target_line)
     details = format % (label, target_line, str(data),
                         self.file_name, line_no, target_line,
                         pp.format(data))
     self.assert_output("F", 1, 1, 1, 0, 0, 0, 0, details, [test])