File: test_line_numbers.py

package info (click to toggle)
python-asttokens 3.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 624 kB
  • sloc: python: 3,560; makefile: 30
file content (63 lines) | stat: -rw-r--r-- 2,762 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# -*- coding: utf-8 -*-
import unittest
from .context import asttokens

class TestLineNumbers(unittest.TestCase):

  def test_line_numbers(self):
    ln = asttokens.LineNumbers("Hello\nworld\nThis\n\nis\n\na test.\n")
    self.assertEqual(ln.line_to_offset(1, 0), 0)
    self.assertEqual(ln.line_to_offset(1, 5), 5)
    self.assertEqual(ln.line_to_offset(2, 0), 6)
    self.assertEqual(ln.line_to_offset(2, 5), 11)
    self.assertEqual(ln.line_to_offset(3, 0), 12)
    self.assertEqual(ln.line_to_offset(4, 0), 17)
    self.assertEqual(ln.line_to_offset(5, 0), 18)
    self.assertEqual(ln.line_to_offset(6, 0), 21)
    self.assertEqual(ln.line_to_offset(7, 0), 22)
    self.assertEqual(ln.line_to_offset(7, 7), 29)
    self.assertEqual(ln.offset_to_line(0),  (1, 0))
    self.assertEqual(ln.offset_to_line(5),  (1, 5))
    self.assertEqual(ln.offset_to_line(6),  (2, 0))
    self.assertEqual(ln.offset_to_line(11), (2, 5))
    self.assertEqual(ln.offset_to_line(12), (3, 0))
    self.assertEqual(ln.offset_to_line(17), (4, 0))
    self.assertEqual(ln.offset_to_line(18), (5, 0))
    self.assertEqual(ln.offset_to_line(21), (6, 0))
    self.assertEqual(ln.offset_to_line(22), (7, 0))
    self.assertEqual(ln.offset_to_line(29), (7, 7))

    # Test that out-of-bounds inputs still return something sensible.
    self.assertEqual(ln.line_to_offset(6, 19), 30)
    self.assertEqual(ln.line_to_offset(100, 99), 30)
    self.assertEqual(ln.line_to_offset(2, -1), 6)
    self.assertEqual(ln.line_to_offset(-1, 99), 0)
    self.assertEqual(ln.offset_to_line(30), (8, 0))
    self.assertEqual(ln.offset_to_line(100), (8, 0))
    self.assertEqual(ln.offset_to_line(-100), (1, 0))

  def test_unicode(self):
    ln = asttokens.LineNumbers("фыва\nячсм")
    self.assertEqual(ln.line_to_offset(1, 0), 0)
    self.assertEqual(ln.line_to_offset(1, 4), 4)
    self.assertEqual(ln.line_to_offset(2, 0), 5)
    self.assertEqual(ln.line_to_offset(2, 4), 9)

    self.assertEqual(ln.offset_to_line(0), (1, 0))
    self.assertEqual(ln.offset_to_line(4), (1, 4))
    self.assertEqual(ln.offset_to_line(5), (2, 0))
    self.assertEqual(ln.offset_to_line(9), (2, 4))

  def test_utf8_offsets(self):
    ln = asttokens.LineNumbers("фыва\nф.в.")
    self.assertEqual(ln.from_utf8_col(1, 0), 0)
    self.assertEqual(ln.from_utf8_col(1, 2), 1)
    self.assertEqual(ln.from_utf8_col(1, 3), 1)
    self.assertEqual(ln.from_utf8_col(1, 6), 3)
    self.assertEqual(ln.from_utf8_col(1, 8), 4)
    self.assertEqual(ln.from_utf8_col(2, 0), 0)
    self.assertEqual(ln.from_utf8_col(2, 2), 1)
    self.assertEqual(ln.from_utf8_col(2, 3), 2)
    self.assertEqual(ln.from_utf8_col(2, 4), 2)
    self.assertEqual(ln.from_utf8_col(2, 5), 3)
    self.assertEqual(ln.from_utf8_col(2, 6), 4)