| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- # Copyright 2016 Google Inc. All Rights Reserved.
- #
- # 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.
- """Support module for tests for yapf."""
- import difflib
- import sys
- import unittest
- from yapf.pytree import blank_line_calculator
- from yapf.pytree import comment_splicer
- from yapf.pytree import continuation_splicer
- from yapf.pytree import pytree_unwrapper
- from yapf.pytree import pytree_utils
- from yapf.pytree import pytree_visitor
- from yapf.pytree import split_penalty
- from yapf.pytree import subtype_assigner
- from yapf.yapflib import identify_container
- from yapf.yapflib import style
- class YAPFTest(unittest.TestCase):
- def __init__(self, *args):
- super(YAPFTest, self).__init__(*args)
- def assertCodeEqual(self, expected_code, code):
- if code != expected_code:
- msg = ['Code format mismatch:', 'Expected:']
- linelen = style.Get('COLUMN_LIMIT')
- for line in expected_code.splitlines():
- if len(line) > linelen:
- msg.append('!> %s' % line)
- else:
- msg.append(' > %s' % line)
- msg.append('Actual:')
- for line in code.splitlines():
- if len(line) > linelen:
- msg.append('!> %s' % line)
- else:
- msg.append(' > %s' % line)
- msg.append('Diff:')
- msg.extend(
- difflib.unified_diff(
- code.splitlines(),
- expected_code.splitlines(),
- fromfile='actual',
- tofile='expected',
- lineterm=''))
- self.fail('\n'.join(msg))
- def ParseAndUnwrap(code, dumptree=False):
- """Produces logical lines from the given code.
- Parses the code into a tree, performs comment splicing and runs the
- unwrapper.
- Arguments:
- code: code to parse as a string
- dumptree: if True, the parsed pytree (after comment splicing) is dumped
- to stderr. Useful for debugging.
- Returns:
- List of logical lines.
- """
- tree = pytree_utils.ParseCodeToTree(code)
- comment_splicer.SpliceComments(tree)
- continuation_splicer.SpliceContinuations(tree)
- subtype_assigner.AssignSubtypes(tree)
- identify_container.IdentifyContainers(tree)
- split_penalty.ComputeSplitPenalties(tree)
- blank_line_calculator.CalculateBlankLines(tree)
- if dumptree:
- pytree_visitor.DumpPyTree(tree, target_stream=sys.stderr)
- llines = pytree_unwrapper.UnwrapPyTree(tree)
- for lline in llines:
- lline.CalculateFormattingInformation()
- return llines
|