def _process_frame_event(self, event):
        attributes = event[c.ATTRIBUTES_KEY]
        framed_event = None
        while True:
            line = self.next_line()
            m = c.QUERY_FRAME_PATTERNS[c.QUERY_FRAME_PART_END].match(line)
            if m:
                if m.group(c.FRAME_NAME_KEY) != attributes[c.FRAME_NAME_KEY]:
                    self.logger.warning(
                        "The QStart:NAME != QEnd:NAME (%s != %s)",
                        m.group(c.FRAME_NAME_KEY),
                        attributes[c.FRAME_NAME_KEY],
                    )
                break
            m = c.QUERY_FRAME_PATTERNS[c.QUERY_FRAME_PART_DEFAULT].match(line)
            if m:
                attributes[c.DEFAULT_KEY] = m.group(c.DEFAULT_KEY)
                continue
            m = c.QUERY_FRAME_PATTERNS[c.QUERY_FRAME_PART_HIDDEN].match(line)
            if m:
                if m.group(c.HIDDEN_KEY) == "TRUE":
                    attributes[c.HIDDEN_KEY] = True
                elif m.group(c.HIDDEN_KEY) == "FALSE":
                    attributes[c.HIDDEN_KEY] = False
                else:
                    self.logger.warning(
                        "The QHidden(%s) has invalid option: "
                        "%s not in (TRUE, FALSE)",
                        attributes[c.FRAME_NAME_KEY],
                        m.group(c.HIDDEN_KEY),
                    )
                    attributes[c.HIDDEN_KEY] = False
                continue
            m = c.QUERY_FRAME_PATTERNS[
                c.QUERY_FRAME_PART_VALID_VALUES
            ].match(line)
            if m:
                attributes[c.VALID_VALUES_KEY] = utils.split_valid_options(
                    m.group('valid')
                )
                continue

            framed_event = self._next_event(line)
            if framed_event is None:
                raise errors.UnexpectedInputError(
                    c.QUERY_FRAME_EVENT, attributes, line,
                )

            event[c.ATTRIBUTES_KEY].update(framed_event[c.ATTRIBUTES_KEY])
            event[c.TYPE_KEY] = framed_event[c.TYPE_KEY]

        if framed_event is None:
            raise errors.IncompleteQueryFrameError(
                "The frame %s doesn't contain query.",
                event,
            )
def test_negative_case():
    with pytest.raises(ValueError) as ex:
        split_valid_options("abc\\def|foobar")
    assert "Unescaped" in str(ex.value)
def test_split_function(string, expected_options):
    options = split_valid_options(string)
    assert options == expected_options