summaryrefslogtreecommitdiffstats
path: root/tests/test_parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_parser.py')
-rw-r--r--tests/test_parser.py152
1 files changed, 152 insertions, 0 deletions
diff --git a/tests/test_parser.py b/tests/test_parser.py
new file mode 100644
index 0000000..dbeb36b
--- /dev/null
+++ b/tests/test_parser.py
@@ -0,0 +1,152 @@
+# Copyright (C) 2016 Adrien Vergé
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import unittest
+
+import yaml
+
+from yamllint.parser import (line_generator, token_or_comment_generator,
+ token_or_comment_or_line_generator,
+ Line, Token, Comment)
+
+
+class ParserTestCase(unittest.TestCase):
+ def test_line_generator(self):
+ e = list(line_generator(''))
+ self.assertEqual(len(e), 1)
+ self.assertEqual(e[0].line_no, 1)
+ self.assertEqual(e[0].start, 0)
+ self.assertEqual(e[0].end, 0)
+
+ e = list(line_generator('\n'))
+ self.assertEqual(len(e), 2)
+
+ e = list(line_generator(' \n'))
+ self.assertEqual(len(e), 2)
+ self.assertEqual(e[0].line_no, 1)
+ self.assertEqual(e[0].start, 0)
+ self.assertEqual(e[0].end, 1)
+
+ e = list(line_generator('\n\n'))
+ self.assertEqual(len(e), 3)
+
+ e = list(line_generator('---\n'
+ 'this is line 1\n'
+ 'line 2\n'
+ '\n'
+ '3\n'))
+ self.assertEqual(len(e), 6)
+ self.assertEqual(e[0].line_no, 1)
+ self.assertEqual(e[0].content, '---')
+ self.assertEqual(e[2].content, 'line 2')
+ self.assertEqual(e[3].content, '')
+ self.assertEqual(e[5].line_no, 6)
+
+ e = list(line_generator('test with\n'
+ 'no newline\n'
+ 'at the end'))
+ self.assertEqual(len(e), 3)
+ self.assertEqual(e[2].line_no, 3)
+ self.assertEqual(e[2].content, 'at the end')
+
+ def test_token_or_comment_generator(self):
+ e = list(token_or_comment_generator(''))
+ self.assertEqual(len(e), 2)
+ self.assertIsNone(e[0].prev)
+ self.assertIsInstance(e[0].curr, yaml.Token)
+ self.assertIsInstance(e[0].next, yaml.Token)
+ self.assertEqual(e[1].prev, e[0].curr)
+ self.assertEqual(e[1].curr, e[0].next)
+ self.assertIsNone(e[1].next)
+
+ e = list(token_or_comment_generator('---\n'
+ 'k: v\n'))
+ self.assertEqual(len(e), 9)
+ self.assertIsInstance(e[3].curr, yaml.KeyToken)
+ self.assertIsInstance(e[5].curr, yaml.ValueToken)
+
+ e = list(token_or_comment_generator('# start comment\n'
+ '- a\n'
+ '- key: val # key=val\n'
+ '# this is\n'
+ '# a block \n'
+ '# comment\n'
+ '- c\n'
+ '# end comment\n'))
+ self.assertEqual(len(e), 21)
+ self.assertIsInstance(e[1], Comment)
+ self.assertEqual(e[1], Comment(1, 1, '# start comment', 0))
+ self.assertEqual(e[11], Comment(3, 13, '# key=val', 0))
+ self.assertEqual(e[12], Comment(4, 1, '# this is', 0))
+ self.assertEqual(e[13], Comment(5, 1, '# a block ', 0))
+ self.assertEqual(e[14], Comment(6, 1, '# comment', 0))
+ self.assertEqual(e[18], Comment(8, 1, '# end comment', 0))
+
+ e = list(token_or_comment_generator('---\n'
+ '# no newline char'))
+ self.assertEqual(e[2], Comment(2, 1, '# no newline char', 0))
+
+ e = list(token_or_comment_generator('# just comment'))
+ self.assertEqual(e[1], Comment(1, 1, '# just comment', 0))
+
+ e = list(token_or_comment_generator('\n'
+ ' # indented comment\n'))
+ self.assertEqual(e[1], Comment(2, 4, '# indented comment', 0))
+
+ e = list(token_or_comment_generator('\n'
+ '# trailing spaces \n'))
+ self.assertEqual(e[1], Comment(2, 1, '# trailing spaces ', 0))
+
+ e = [c for c in
+ token_or_comment_generator('# block\n'
+ '# comment\n'
+ '- data # inline comment\n'
+ '# block\n'
+ '# comment\n'
+ '- k: v # inline comment\n'
+ '- [ l, ist\n'
+ '] # inline comment\n'
+ '- { m: ap\n'
+ '} # inline comment\n'
+ '# block comment\n'
+ '- data # inline comment\n')
+ if isinstance(c, Comment)]
+ self.assertEqual(len(e), 10)
+ self.assertFalse(e[0].is_inline())
+ self.assertFalse(e[1].is_inline())
+ self.assertTrue(e[2].is_inline())
+ self.assertFalse(e[3].is_inline())
+ self.assertFalse(e[4].is_inline())
+ self.assertTrue(e[5].is_inline())
+ self.assertTrue(e[6].is_inline())
+ self.assertTrue(e[7].is_inline())
+ self.assertFalse(e[8].is_inline())
+ self.assertTrue(e[9].is_inline())
+
+ def test_token_or_comment_or_line_generator(self):
+ e = list(token_or_comment_or_line_generator('---\n'
+ 'k: v # k=v\n'))
+ self.assertEqual(len(e), 13)
+ self.assertIsInstance(e[0], Token)
+ self.assertIsInstance(e[0].curr, yaml.StreamStartToken)
+ self.assertIsInstance(e[1], Token)
+ self.assertIsInstance(e[1].curr, yaml.DocumentStartToken)
+ self.assertIsInstance(e[2], Line)
+ self.assertIsInstance(e[3].curr, yaml.BlockMappingStartToken)
+ self.assertIsInstance(e[4].curr, yaml.KeyToken)
+ self.assertIsInstance(e[6].curr, yaml.ValueToken)
+ self.assertIsInstance(e[8], Comment)
+ self.assertIsInstance(e[9], Line)
+ self.assertIsInstance(e[12], Line)