Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.

Upstream: https://github.com/ARMmbed/DAPLink

Revision:
0:01f31e923fe2
diff -r 000000000000 -r 01f31e923fe2 test/test_info.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/test_info.py	Tue Apr 07 12:55:42 2020 +0200
@@ -0,0 +1,189 @@
+#
+# DAPLink Interface Firmware
+# Copyright (c) 2009-2016, ARM Limited, All Rights Reserved
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+ 
+from __future__ import absolute_import
+from __future__ import print_function
+import six
+import sys
+import time
+
+
+class TestInfo(object):
+    # Higher number = more severe
+    SUBTEST = 0
+    INFO = 1
+    WARNING = 2
+    FAILURE = 3
+
+    _MSG_TYPES = set((INFO, WARNING, FAILURE))
+    _MSG_LEVEL_TO_FMT_STR = {
+        INFO: "Info: %s",
+        WARNING: "Warning: %s",
+        FAILURE: "Failure: %s",
+    }
+
+    def __init__(self, name, init_print=True):
+        self._all = []
+        self.failures = 0
+        self.warnings = 0
+        self.infos = 0
+        self.name = name
+        if init_print:
+            self._print_msg("SubTest: " + name)
+
+    def failure(self, msg):
+        assert isinstance(msg, six.string_types)
+        self._add_entry(self.FAILURE, msg)
+
+    def warning(self, msg):
+        assert isinstance(msg, six.string_types)
+        self._add_entry(self.WARNING, msg)
+
+    def info(self, msg):
+        assert isinstance(msg, six.string_types)
+        self._add_entry(self.INFO, msg)
+
+    def print_msg(self, warning_level, max_recursion=0, spacing=2,
+                  log_file=sys.stdout, _recursion_level=0):
+        """
+        Print problems at the given level
+
+        By default only the top level passes and fails are printed.
+        Set max_recursion to the number of subtests to be printed, or
+        to None if all levels should be printed.
+        """
+        assert warning_level in self._MSG_TYPES
+        assert max_recursion is None or max_recursion >= 0
+
+        if self.get_failed():
+            result_str = 'Failure'
+            test_level = self.FAILURE
+        elif self.get_warning():
+            result_str = 'Warning'
+            test_level = self.WARNING
+        else:
+            result_str = 'Pass'
+            test_level = self.INFO
+        prefix = ' ' * (_recursion_level * spacing)
+
+        # Check if test should be printed - the waning level
+        # is enabled, or this is the top level test
+        if test_level < warning_level and _recursion_level != 0:
+            return
+
+        # Print test header
+        print(prefix + "Test: %s: %s" % (self.name, result_str),
+              file=log_file)
+
+        # Check for recursion termination
+        if max_recursion is not None and _recursion_level > max_recursion:
+            return
+        _recursion_level += 1
+
+        # Print messages
+        prefix = ' ' * (_recursion_level * spacing)
+        for msg_level, msg in self._all:
+            if msg_level == self.SUBTEST:
+                test_info = msg
+                test_info.print_msg(warning_level, max_recursion,
+                                    spacing, log_file, _recursion_level)
+            else:
+                fmt = prefix + self._MSG_LEVEL_TO_FMT_STR[msg_level]
+                if msg_level >= warning_level:
+                    print(fmt % msg, file=log_file)
+
+    def get_failed(self):
+        self._update_counts()
+        return self.failures != 0
+
+    def get_warning(self):
+        self._update_counts()
+        return self.warnings != 0
+
+    def get_name(self):
+        return self.name
+
+    def create_subtest(self, name):
+        assert isinstance(name, six.string_types)
+        test_info = TestInfo(name)
+        self._add_entry(self.SUBTEST, test_info)
+        return test_info
+
+    def attach_subtest(self, subtest):
+        assert isinstance(subtest, TestInfo)
+        self._add_entry(self.SUBTEST, subtest)
+
+    def get_counts(self):
+        """
+        Return the number of events that occured
+
+        Return the number of even messages as a
+        tuple containing (failure_count, warning_count, info_count).
+        """
+        self._update_counts()
+        return self.failures, self.warnings, self.infos
+
+    def _update_counts(self):
+        self.failures, self.warnings, self.infos = 0, 0, 0
+        for msg_level, msg in self._all:
+            if msg_level == self.SUBTEST:
+                test_info = msg
+                failures, warnings, infos = test_info.get_counts()
+                self.failures += failures
+                self.warnings += warnings
+                self.infos += infos
+            else:
+                if msg_level == self.FAILURE:
+                    self.failures += 1
+                elif msg_level == self.WARNING:
+                    self.warnings += 1
+                elif msg_level == self.INFO:
+                    self.infos += 1
+                else:
+                    # Should never get here
+                    assert False
+
+    def _add_entry(self, entry_type, msg):
+        if entry_type is self.SUBTEST:
+            assert isinstance(msg, TestInfo)
+            # Test name printed in constructor
+        else:
+            assert isinstance(msg, six.string_types)
+            self._print_msg(msg)
+        self._all.append((entry_type, msg))
+
+    @staticmethod
+    def _print_msg(msg):
+        print(get_timestamp_tag() + msg)
+
+
+class TestInfoStub(TestInfo):
+
+    def __init__(self):
+        super(TestInfoStub, self).__init__('stub test', False)
+
+    def create_subtest(self, name):
+        assert isinstance(name, six.string_types)
+        return TestInfoStub()
+
+    @staticmethod
+    def _print_msg(msg):
+        print(get_timestamp_tag() + "%s"%(msg,))
+
+def get_timestamp_tag():
+    return "[{:0<17f}] ".format(time.time())