def test_invalid_telemetry(self):
        testData = [
            "||",
            # odd number of characters between pipes
            "|!!|",
            "|!!!|",
            "|!!!!!|",
            "|!!!!!!!|",
            "|!!!!!!!!!|",
            "|!!!!!!!!!!!|",
            "|!!!!!!!!!!!!!|",
            # invalid characters in sequence
            "| a|",
            "|a |",
            "|aa  |",
            "|aaaa  |",
            "|aaaaaa  |",
            "|aaaaaaaa  |",
            "|aaaaaaaaaa  |",
            "|aaaaaaaaaaaa  |",
            "|ss11223344556677|",  # over 8 fields
            ]

        for datum in testData:
            extra, telem = _parse_comment_telemetry(datum)

            self.assertEqual(datum, extra)
    def test_prefix_sufix_glue(self):
        testData = [
            # resulting extra should be 'asdzxc'
            ['asd', '|"!"!|', 'zxc'],
            ['', '|"!"!|', 'zxc'],
            ['asd', '|"!"!|', ''],
            # empty extra
            ['', '|"!"!|', ''],
            # should parse only first occurance of |ss11|
            ['asd', '|"!"!|', '|"!"!|'],
            ['', '|"!"!|', '|"!"!|'],
            ['|aa|', '|"!"!|', '|"!"!|'],
            ['|aa|', '|"!"!|', ''],
            ]

        for datum in testData:
            extra, telem = _parse_comment_telemetry("".join(datum))

            self.assertEqual(datum[0]+datum[2], extra)
    def test_random_valid_telemetry(self):
        for i in range(100):
            vals = [randint(0, self.b91max) for x in range(randint(1, 5))]

            bits = None

            if len(vals) is 5 and randint(1, 10) > 5:
                bits = "{0:08b}".format(randint(0, 255))[::-1]

            testData = self.genTelem(i, vals, bits)

            extra, resData = _parse_comment_telemetry(self.telemString(testData))
            resData = resData['telemetry']

            # clean up extra data, so we can compare
            if bits is None:
                del resData['bits']

            resData['vals'] = resData['vals'][:len(vals)]

            self.assertEqual(testData, resData)
    def test_output_format(self):
        parsedOutput = _parse_comment_telemetry("|aabb|")

        self.assertTrue(isinstance(parsedOutput, tuple))
        self.assertTrue(len(parsedOutput) == 2)

        extra, telemetry = parsedOutput

        self.assertTrue(isinstance(extra, str))
        self.assertTrue(isinstance(telemetry, dict))

        self.assertTrue('telemetry' in telemetry)

        self.assertTrue('seq' in telemetry['telemetry'])
        self.assertTrue(isinstance(telemetry['telemetry']['seq'], int))

        self.assertTrue('vals' in telemetry['telemetry'])
        self.assertTrue(isinstance(telemetry['telemetry']['vals'], list))
        self.assertTrue(len(telemetry['telemetry']['vals']) == 5)

        self.assertTrue('bits' in telemetry['telemetry'])
        self.assertTrue(isinstance(telemetry['telemetry']['bits'], str))
        self.assertTrue(len(telemetry['telemetry']['bits']) == 8)
        self.assertTrue(len(telemetry['telemetry']['bits'].replace('0', '')) == 0)