Exemplo n.º 1
0
    def testMixedIfs(self):
        CASES = [
            ([], '', True),
            (['a', 'b'], 'a_b', True),
            (['a', 'b'], ' a b ', True),
            (['a', 'b'], 'a _ b', True),
            (['a', 'b'], '  a _ b  ', True),
            (['a', '', 'b'], 'a _ _ b', True),
            (['a', '', 'b'], 'a __ b', True),
            (['a', '', '', 'b'], 'a _  _ _  b', True),
            (['a'], '  a _ ', True),

            # NOTES:
            # - This cases REQUIRES ignoring leading whitespace.  The state machine
            # can't handle it.  Contrast with the case above.
            # - We get three spans with index 1 because of the initial rule to
            # ignore whitespace, and then EMIT_EMPTY.  Seems harmless for now?
            (['', 'a'], ' _ a _ ', True),

            # Backslash escape
            (['a b'], r'a\ b', True),
            (['a\\', 'b'], r'a\ b', False),
        ]

        # IFS='_ '
        sp = split.IfsSplitter(' ', '_')
        _RunSplitCases(self, sp, CASES)

        self.assertEqual('a\ \_b', sp.Escape('a _b'))
Exemplo n.º 2
0
 def testTrailingWhitespaceBug(self):
     # Bug: these differed
     CASES = [
         (['x y'], r' x\ y', True),
         (['ab '], r' ab\ ', True),
         (['ab '], r' ab\  ', True),
     ]
     sp = split.IfsSplitter(split.DEFAULT_IFS, '')
     _RunSplitCases(self, sp, CASES)
Exemplo n.º 3
0
    def testTwoOther(self):
        CASES = [
            (['a', '', 'b', '', '', 'c', 'd'], 'a__b---c_d', True),

            # Backslash escape
            (['a_-b'], r'a\_\-b', True),
            (['a\\', '\\', 'b'], r'a\_\-b', False),
        ]

        # IFS='_ '
        sp = split.IfsSplitter('', '_-')
        _RunSplitCases(self, sp, CASES)
Exemplo n.º 4
0
    def testOtherOnly(self):
        CASES = [
            ([], '', True),
            ([''], '_', True),
            (['a'], 'a_', True),
            (['', '', 'a', 'b'], '__a_b_', True),

            # Backslash escape
            (['a_b'], r'a\_b', True),
            (['a\\', 'b'], r'a\_b', False),
        ]

        # IFS='_ '
        sp = split.IfsSplitter('', '_')
        _RunSplitCases(self, sp, CASES)
Exemplo n.º 5
0
    def testDefaultIfs(self):
        CASES = [
            ([], '', True),
            (['a'], 'a', True),
            (['a'], ' a ', True),
            (['ab'], '\tab\n', True),
            (['a', 'b'], 'a  b\n', True),
            (['a b'], r'a\ b', True),
            (['a\\', 'b'], r'a\ b', False),
            ([r'\*.sh'], r'\\*.sh', True),
            (['Aa', 'b', ' a b'], 'Aa b \\ a\\ b', True),
        ]

        sp = split.IfsSplitter(split.DEFAULT_IFS, '')
        _RunSplitCases(self, sp, CASES)

        self.assertEqual(r'a\ _b', sp.Escape('a _b'))
Exemplo n.º 6
0
    def testWhitespaceOnly(self):
        CASES = [
            ([], '', True),
            ([], '\t', True),
            (['a'], 'a\t', True),
            (['a', 'b'], '\t\ta\tb\t', True),

            # Backslash escape
            (['a\tb'], 'a\\\tb', True),
            (['a\\', 'b'], 'a\\\tb', False),
        ]

        # IFS='_ '
        sp = split.IfsSplitter('\t', '')
        _RunSplitCases(self, sp, CASES)

        self.assertEqual('a b', sp.Escape('a b'))
        self.assertEqual('a\\\tb', sp.Escape('a\tb'))
Exemplo n.º 7
0
    def testAppendParts(self):
        # allow_escape is True by default, but False when the user passes -r.
        CASES = [
            (['Aa', 'b', ' a b'], 100, 'Aa b \\ a\\ b'),
            (['a', 'b', 'c'], 3, 'a b c '),
        ]

        for expected_parts, max_results, line in CASES:
            sp = split.IfsSplitter(split.DEFAULT_IFS, '')
            spans = sp.Split(line, True)
            print('--- %r' % line)
            for span in spans:
                print('  %s %s' % span)

            parts = []
            builtin_misc._AppendParts(line, spans, max_results, False, parts)
            self.assertEqual(expected_parts, parts)

            print('---')
Exemplo n.º 8
0
    def testSpansToParts(self):
        sp = split.IfsSplitter(split.DEFAULT_IFS, '')

        s = 'one\\ two'
        spans = sp.Split(s, False)
        print(spans)

        parts = split._SpansToParts(s, spans)
        self.assertEqual(['one\\', 'two'], parts)

        spans = sp.Split(s, True)  # allow_escape
        parts = split._SpansToParts(s, spans)
        self.assertEqual(['one two'], parts)

        # NOTE: Only read builtin supports max_results
        return

        parts = split._SpansToParts(s, spans, max_results=1)
        self.assertEqual(['one\\ two'], parts)

        print(spans)

        parts = split._SpansToParts(s, spans, max_results=1)
        self.assertEqual(['one two'], parts)