File: test_unit_line_dynamic_fields.py

package info (click to toggle)
gfapy 1.2.3%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,048 kB
  • sloc: python: 11,777; sh: 167; makefile: 68
file content (96 lines) | stat: -rw-r--r-- 3,583 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import unittest
import gfapy

class TestUnitLineDynamicFields(unittest.TestCase):

  def test_respond_to(self):
    l = gfapy.line.edge.Link(["L", "1", "+", "2", "-", "*", "zz:Z:yes", "KC:i:100"])
    # record_type
    self.assertTrue(hasattr(l, "record_type"))
    # reqfields
    self.assertTrue(hasattr(l, "from_segment"))
    self.assertIsInstance(object.__getattribute__(l, "from_segment"),
                          gfapy.line.common.dynamic_fields.DynamicField)
    # predefined tags
    self.assertTrue(hasattr(l, "KC"))
    self.assertTrue(hasattr(l, "try_get_KC"))
    self.assertIsInstance(object.__getattribute__(l, "KC"),
                          gfapy.line.common.dynamic_fields.DynamicField)
    # custom tags
    self.assertTrue(hasattr(l, "zz"))
    self.assertTrue(hasattr(l, "try_get_zz"))
    # not-yet-existing tags
    self.assertTrue(hasattr(l, "aa"))
    #raises exception in python, because hasattr calls getattr
    #self.assertTrue(hasattr(l, "try_get_aa"))

  def test_field_getters_positional_fields(self):
    l = gfapy.Line(["S", "12", "*", "xx:i:13", "KC:i:10"])
    self.assertEqual("12", l.name)
    with self.assertRaises(AttributeError):
      l.zzz

  def test_field_getters_existing_tags(self):
    l = gfapy.Line(["S", "12", "*", "xx:i:13", "KC:i:10"])
    self.assertEqual("xx", sorted(l.tagnames)[1])
    self.assertEqual("13", l.field_to_s("xx"))
    self.assertEqual(13, l.xx)
    self.assertEqual(13, l.try_get_xx())
    self.assertEqual("10", l.field_to_s("KC"))
    self.assertEqual(10, l.KC)
    self.assertEqual(10, l.try_get_KC())

  def test_field_getters_not_existing_tags(self):
    l = gfapy.line.Header(["H", "xx:i:13", "VN:Z:HI"])
    self.assertEqual(None, l.zz)
    with self.assertRaises(gfapy.NotFoundError):
      l.try_get_zz()

  def test_field_setters_positional_fields(self):
    l = gfapy.Line(["S", "12", "*", "xx:i:13", "KC:i:1200"])
    with self.assertRaises(gfapy.FormatError):
      l.name = "A\t1"
      l.validate_field("name")
    l.name = "14"
    self.assertEqual("14", l.name)

  def test_field_setters_existing_tags(self):
    l = gfapy.line.Header(["H", "xx:i:13", "VN:Z:HI"], vlevel = 3)
    self.assertEqual(13, l.xx)
    l.xx = 15
    self.assertEqual(15, l.xx)
    with self.assertRaises(gfapy.FormatError):
      l.xx = "1A"
    l.set_datatype("xx", "Z")
    l.xx = "1A"
    self.assertEqual("HI", l.VN)
    l.VN = "HO"
    self.assertEqual("HO", l.VN)

  def test_field_setters_not_existing_tags(self):
    l = gfapy.line.Header(["H", "xx:i:13", "VN:Z:HI"])
    l.zz="1"
    self.assertEqual("1", l.zz)
    self.assertEqual("Z", gfapy.Field._get_default_gfa_tag_datatype(l.zz))
    l.zi=1
    self.assertEqual(1, l.zi)
    self.assertEqual("i", gfapy.Field._get_default_gfa_tag_datatype(l.zi))
    l.zf=1.0
    self.assertEqual(1.0, l.zf)
    self.assertEqual("f", gfapy.Field._get_default_gfa_tag_datatype(l.zf))
    l.bf=[1.0, 1.0]
    self.assertEqual([1.0, 1.0], l.bf)
    self.assertEqual("B", gfapy.Field._get_default_gfa_tag_datatype(l.bf))
    l.bi=[1.0, 1.0]
    self.assertEqual([1, 1], l.bi)
    self.assertEqual("B", gfapy.Field._get_default_gfa_tag_datatype(l.bi))
    l.ba=[1.0, 1]
    self.assertEqual([1.0, 1], l.ba)
    self.assertEqual("J", gfapy.Field._get_default_gfa_tag_datatype(l.ba))
    l.bh={"a" : 1.0, "b" : 1}
    self.assertEqual({"a" : 1.0, "b" : 1}, gfapy.Line(str(l)).bh)
    self.assertEqual("J", gfapy.Field._get_default_gfa_tag_datatype(l.bh))
    #Assignement of new attributes possible in python.
    #with self.assertRaises(AttributeError):
    #  l.zzz="1"