def test2_min_max_repeats(self):
        """This test case verifies the functionality of setting the minimal and maximal repeats."""
        match_context = MatchContext(
            b'fixed log line. \n A different line follows.')
        fixed_data_model_element = FixedDataModelElement(
            'fixed', self.fixed_log_line)
        repeated_element_data_model_element = RepeatedElementDataModelElement(
            'repeatedElement', fixed_data_model_element, 2, 5)
        self.assertEqual(
            repeated_element_data_model_element.get_match_element(
                'match', match_context), None)

        match_context = MatchContext(
            b'fixed log line. fixed log line. \n A different line follows.')
        self.assertEqual(
            repeated_element_data_model_element.get_match_element(
                'match', match_context).get_match_string(),
            b'fixed log line. fixed log line. ')

        match_context = MatchContext(
            b'fixed log line. fixed log line. fixed log line. fixed log line. fixed log line. \n A different line follows.'
        )
        self.assertEqual(
            repeated_element_data_model_element.get_match_element(
                'match', match_context).get_match_string(),
            b'fixed log line. fixed log line. fixed log line. fixed log line. fixed log line. '
        )

        match_context = MatchContext(
            b'fixed log line. fixed log line. fixed log line. fixed log line. fixed log line. fixed log line. \n A different line follows.'
        )
        self.assertEqual(
            repeated_element_data_model_element.get_match_element(
                'match', match_context), None)
    def test1_standard_input_values(self):
        """This test case verifies the functionality of the repeating Matches."""
        match_context = MatchContext(
            b'fixed log line. \n A different line follows.')
        fixed_data_model_element = FixedDataModelElement(
            'fixed', self.fixed_log_line)
        repeated_element_data_model_element = RepeatedElementDataModelElement(
            'repeatedElement', fixed_data_model_element)
        self.assertEqual(
            repeated_element_data_model_element.get_match_element(
                'match', match_context).get_match_string(),
            self.fixed_log_line)

        match_context = MatchContext(
            b'fixed log line. fixed log line. fixed log line. fixed log line. \n A different line follows.'
        )
        self.assertEqual(
            repeated_element_data_model_element.get_match_element(
                'match', match_context).get_match_string(),
            b'fixed log line. fixed log line. fixed log line. fixed log line. '
        )

        match_context = MatchContext(b'A different line follows.')
        self.assertEqual(
            repeated_element_data_model_element.get_match_element(
                'match', match_context).get_match_string(), b'')
    def test9get_match_element_match_context_input_validation(self):
        """Check if an exception is raised, when other classes than MatchContext are used in get_match_element."""
        model_element = RepeatedElementDataModelElement(
            self.id_, DummyFixedDataModelElement(self.fixed_id,
                                                 self.fixed_data))
        data = b"fixed data"
        model_element.get_match_element(self.path, DummyMatchContext(data))
        model_element.get_match_element(self.path, MatchContext(data))

        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, MatchElement(None, data, None, None))
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, data)
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, data.decode())
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, 123)
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, 123.22)
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, True)
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, None)
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, [])
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, {"key": MatchContext(data)})
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, set())
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, ())
        self.assertRaises(AttributeError, model_element.get_match_element,
                          self.path, model_element)
    def test3get_match_element_valid_match(self):
        """Parse matching substring from MatchContext and check if the MatchContext was updated with all characters."""
        fixed_dme = DummyFixedDataModelElement(self.fixed_id, self.fixed_data)
        repeated_dme = RepeatedElementDataModelElement(
            self.id_, DummyFixedDataModelElement(self.fixed_id,
                                                 self.fixed_data))
        data = b"fixed data string."
        value = b"fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, value,
            value, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])

        data = b"fixed data fixed data fixed data fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, data,
            data, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/1" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/2" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/3" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])

        data = b"fixed data fixed data \nhere is some other string.\nfixed data fixed data "
        value = b"fixed data fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, value,
            value, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/1" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])
    def test4get_match_element_min_max_repeats(self):
        """This test case verifies the functionality of setting the minimal and maximal repeats."""
        fixed_dme = DummyFixedDataModelElement(self.fixed_id, self.fixed_data)
        repeated_dme = RepeatedElementDataModelElement(self.id_,
                                                       fixed_dme,
                                                       min_repeat=2,
                                                       max_repeat=5)
        same_min_max_repeat_dme = RepeatedElementDataModelElement(self.id_,
                                                                  fixed_dme,
                                                                  min_repeat=3,
                                                                  max_repeat=3)
        data = b"other data"
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_no_match_results(data, match_element, match_context)
        match_context = DummyMatchContext(data)
        match_element = same_min_max_repeat_dme.get_match_element(
            self.path, match_context)
        self.compare_no_match_results(data, match_element, match_context)

        data = b"fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_no_match_results(data, match_element, match_context)

        match_context = DummyMatchContext(data)
        match_element = same_min_max_repeat_dme.get_match_element(
            self.path, match_context)
        self.compare_no_match_results(data, match_element, match_context)

        data = b"fixed data fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, data,
            data, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/1" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])

        match_context = DummyMatchContext(data)
        match_element = same_min_max_repeat_dme.get_match_element(
            self.path, match_context)
        self.compare_no_match_results(data, match_element, match_context)

        data = b"fixed data fixed data fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, data,
            data, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/1" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/2" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])

        match_context = DummyMatchContext(data)
        match_element = same_min_max_repeat_dme.get_match_element(
            self.path, match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, data,
            data, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/1" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/2" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])

        data = b"fixed data fixed data fixed data fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, data,
            data, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/1" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/2" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/3" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])

        match_context = DummyMatchContext(data)
        match_element = same_min_max_repeat_dme.get_match_element(
            self.path, match_context)
        self.compare_no_match_results(data, match_element, match_context)

        data = b"fixed data fixed data fixed data fixed data fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_match_results(
            data, match_element, match_context, self.id_, self.path, data,
            data, [
                fixed_dme.get_match_element("%s/%s/0" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/1" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/2" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/3" % (self.path, self.id_),
                                            DummyMatchContext(data)),
                fixed_dme.get_match_element("%s/%s/4" % (self.path, self.id_),
                                            DummyMatchContext(data))
            ])

        match_context = DummyMatchContext(data)
        match_element = same_min_max_repeat_dme.get_match_element(
            self.path, match_context)
        self.compare_no_match_results(data, match_element, match_context)

        data = b"fixed data fixed data fixed data fixed data fixed data fixed data "
        match_context = DummyMatchContext(data)
        match_element = repeated_dme.get_match_element(self.path,
                                                       match_context)
        self.compare_no_match_results(data, match_element, match_context)

        match_context = DummyMatchContext(data)
        match_element = same_min_max_repeat_dme.get_match_element(
            self.path, match_context)
        self.compare_no_match_results(data, match_element, match_context)