xref: /aosp_15_r20/external/yapf/yapftests/format_token_test.py (revision 7249d1a64f4850ccf838e62a46276f891f72998e)
1*7249d1a6SKrzysztof Kosiński# Copyright 2015 Google Inc. All Rights Reserved.
2*7249d1a6SKrzysztof Kosiński#
3*7249d1a6SKrzysztof Kosiński# Licensed under the Apache License, Version 2.0 (the "License");
4*7249d1a6SKrzysztof Kosiński# you may not use this file except in compliance with the License.
5*7249d1a6SKrzysztof Kosiński# You may obtain a copy of the License at
6*7249d1a6SKrzysztof Kosiński#
7*7249d1a6SKrzysztof Kosiński#     http://www.apache.org/licenses/LICENSE-2.0
8*7249d1a6SKrzysztof Kosiński#
9*7249d1a6SKrzysztof Kosiński# Unless required by applicable law or agreed to in writing, software
10*7249d1a6SKrzysztof Kosiński# distributed under the License is distributed on an "AS IS" BASIS,
11*7249d1a6SKrzysztof Kosiński# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7249d1a6SKrzysztof Kosiński# See the License for the specific language governing permissions and
13*7249d1a6SKrzysztof Kosiński# limitations under the License.
14*7249d1a6SKrzysztof Kosiński"""Tests for yapf.format_token."""
15*7249d1a6SKrzysztof Kosiński
16*7249d1a6SKrzysztof Kosińskiimport unittest
17*7249d1a6SKrzysztof Kosiński
18*7249d1a6SKrzysztof Kosińskifrom lib2to3 import pytree
19*7249d1a6SKrzysztof Kosińskifrom lib2to3.pgen2 import token
20*7249d1a6SKrzysztof Kosiński
21*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import format_token
22*7249d1a6SKrzysztof Kosiński
23*7249d1a6SKrzysztof Kosiński
24*7249d1a6SKrzysztof Kosińskiclass TabbedContinuationAlignPaddingTest(unittest.TestCase):
25*7249d1a6SKrzysztof Kosiński
26*7249d1a6SKrzysztof Kosiński  def testSpace(self):
27*7249d1a6SKrzysztof Kosiński    align_style = 'SPACE'
28*7249d1a6SKrzysztof Kosiński
29*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(0, align_style, 2)
30*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '')
31*7249d1a6SKrzysztof Kosiński
32*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(2, align_style, 2)
33*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, ' ' * 2)
34*7249d1a6SKrzysztof Kosiński
35*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(5, align_style, 2)
36*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, ' ' * 5)
37*7249d1a6SKrzysztof Kosiński
38*7249d1a6SKrzysztof Kosiński  def testFixed(self):
39*7249d1a6SKrzysztof Kosiński    align_style = 'FIXED'
40*7249d1a6SKrzysztof Kosiński
41*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(0, align_style, 4)
42*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '')
43*7249d1a6SKrzysztof Kosiński
44*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(2, align_style, 4)
45*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '\t')
46*7249d1a6SKrzysztof Kosiński
47*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(5, align_style, 4)
48*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '\t' * 2)
49*7249d1a6SKrzysztof Kosiński
50*7249d1a6SKrzysztof Kosiński  def testVAlignRight(self):
51*7249d1a6SKrzysztof Kosiński    align_style = 'VALIGN-RIGHT'
52*7249d1a6SKrzysztof Kosiński
53*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(0, align_style, 4)
54*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '')
55*7249d1a6SKrzysztof Kosiński
56*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(2, align_style, 4)
57*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '\t')
58*7249d1a6SKrzysztof Kosiński
59*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(4, align_style, 4)
60*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '\t')
61*7249d1a6SKrzysztof Kosiński
62*7249d1a6SKrzysztof Kosiński    pad = format_token._TabbedContinuationAlignPadding(5, align_style, 4)
63*7249d1a6SKrzysztof Kosiński    self.assertEqual(pad, '\t' * 2)
64*7249d1a6SKrzysztof Kosiński
65*7249d1a6SKrzysztof Kosiński
66*7249d1a6SKrzysztof Kosińskiclass FormatTokenTest(unittest.TestCase):
67*7249d1a6SKrzysztof Kosiński
68*7249d1a6SKrzysztof Kosiński  def testSimple(self):
69*7249d1a6SKrzysztof Kosiński    tok = format_token.FormatToken(pytree.Leaf(token.STRING, "'hello world'"))
70*7249d1a6SKrzysztof Kosiński    self.assertEqual(
71*7249d1a6SKrzysztof Kosiński        "FormatToken(name=DOCSTRING, value='hello world', column=0, "
72*7249d1a6SKrzysztof Kosiński        "lineno=0, splitpenalty=0)", str(tok))
73*7249d1a6SKrzysztof Kosiński    self.assertTrue(tok.is_string)
74*7249d1a6SKrzysztof Kosiński
75*7249d1a6SKrzysztof Kosiński    tok = format_token.FormatToken(pytree.Leaf(token.COMMENT, '# A comment'))
76*7249d1a6SKrzysztof Kosiński    self.assertEqual(
77*7249d1a6SKrzysztof Kosiński        'FormatToken(name=COMMENT, value=# A comment, column=0, '
78*7249d1a6SKrzysztof Kosiński        'lineno=0, splitpenalty=0)', str(tok))
79*7249d1a6SKrzysztof Kosiński    self.assertTrue(tok.is_comment)
80*7249d1a6SKrzysztof Kosiński
81*7249d1a6SKrzysztof Kosiński  def testIsMultilineString(self):
82*7249d1a6SKrzysztof Kosiński    tok = format_token.FormatToken(pytree.Leaf(token.STRING, '"""hello"""'))
83*7249d1a6SKrzysztof Kosiński    self.assertTrue(tok.is_multiline_string)
84*7249d1a6SKrzysztof Kosiński
85*7249d1a6SKrzysztof Kosiński    tok = format_token.FormatToken(pytree.Leaf(token.STRING, 'r"""hello"""'))
86*7249d1a6SKrzysztof Kosiński    self.assertTrue(tok.is_multiline_string)
87*7249d1a6SKrzysztof Kosiński
88*7249d1a6SKrzysztof Kosiński
89*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__':
90*7249d1a6SKrzysztof Kosiński  unittest.main()
91