Skip to content

Commit 998d68f

Browse files
committed
Refactor tests to share test code between fastobo.term and fastobo.typedef classes
1 parent 6beac86 commit 998d68f

File tree

3 files changed

+211
-95
lines changed

3 files changed

+211
-95
lines changed

tests/common.py

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
# coding: utf-8
2+
3+
import datetime
4+
import unittest
5+
6+
import fastobo
7+
8+
9+
# --- TermFrame --------------------------------------------------------------
10+
11+
class _TestFrame(object):
12+
13+
type = NotImplementedError
14+
15+
def setUp(self):
16+
self.id = fastobo.id.PrefixedIdent("MS", "1000031")
17+
18+
def test_init(self):
19+
try:
20+
frame = self.type(self.id)
21+
except Exception:
22+
self.fail("could not create frame instances")
23+
24+
def test_init_iterable(self):
25+
try:
26+
frame = self.type(self.id, [])
27+
except Exception:
28+
self.fail("could not create frame instances")
29+
try:
30+
frame = self.type(self.id, [
31+
fastobo.term.NameClause("thing"),
32+
fastobo.term.CreatedByClause("Martin Larralde")
33+
])
34+
except Exception:
35+
self.fail("could not create frame from iterable")
36+
37+
def test_init_type_error(self):
38+
self.assertRaises(TypeError, self.type, 1)
39+
self.assertRaises(TypeError, self.type, [1])
40+
self.assertRaises(TypeError, self.type, ["abc"])
41+
self.assertRaises(TypeError, self.type, "abc")
42+
self.assertRaises(TypeError, self.type, self.id, 1)
43+
self.assertRaises(TypeError, self.type, self.id, [1])
44+
self.assertRaises(TypeError, self.type, self.id, ["abc"])
45+
self.assertRaises(TypeError, self.type, self.id, "abc")
46+
47+
48+
# --- DefClause --------------------------------------------------------------
49+
50+
class _TestDefClause(object):
51+
52+
type = NotImplementedError
53+
54+
def test_repr(self):
55+
clause = self.type("definition")
56+
self.assertEqual(repr(clause), "DefClause('definition')")
57+
58+
id_ = fastobo.id.PrefixedIdent('ISBN', '0321842685')
59+
desc = "Hacker's Delight (2nd Edition)"
60+
x = fastobo.xref.Xref(id_, desc)
61+
62+
clause = self.type("definition", fastobo.xref.XrefList([x]))
63+
self.assertEqual(repr(clause), "DefClause('definition', XrefList([{!r}]))".format(x))
64+
65+
66+
# --- ConsiderClause ---------------------------------------------------------
67+
68+
class _TestConsiderClause(object):
69+
70+
type = NotImplementedError
71+
72+
def setUp(self):
73+
self.id = fastobo.id.PrefixedIdent("MS", "1000031")
74+
self.id2 = fastobo.id.PrefixedIdent("MS", "1000032")
75+
76+
def test_init(self):
77+
try:
78+
frame = self.type(self.id)
79+
except Exception:
80+
self.fail("could not create `ConsiderClause` instances")
81+
82+
def test_init_type_error(self):
83+
self.assertRaises(TypeError, self.type)
84+
self.assertRaises(TypeError, self.type, 1)
85+
86+
def test_eq(self):
87+
self.assertEqual(self.type(self.id), self.type(self.id))
88+
self.assertNotEqual(self.type(self.id), self.type(self.id2))
89+
90+
91+
# --- IsObsoleteClause -------------------------------------------------------
92+
93+
class _TestIsObsoleteClause(object):
94+
95+
type = NotImplementedError
96+
97+
def test_init(self):
98+
try:
99+
frame = self.type(True)
100+
except Exception:
101+
self.fail("could not create `IsObsoleteClause` instances")
102+
103+
def test_property_obsolete(self):
104+
c = self.type(False)
105+
self.assertEqual(c.obsolete, False)
106+
c.obsolete = True
107+
self.assertEqual(c.obsolete, True)
108+
109+
def test_repr(self):
110+
self.assertEqual(repr(self.type(False)), "IsObsoleteClause(False)")
111+
self.assertEqual(repr(self.type(True)), "IsObsoleteClause(True)")
112+
113+
def test_str(self):
114+
self.assertEqual(str(self.type(False)), "is_obsolete: false")
115+
self.assertEqual(str(self.type(True)), "is_obsolete: true")
116+
117+
def test_eq(self):
118+
self.assertEqual(self.type(True), self.type(True))
119+
self.assertEqual(self.type(False), self.type(False))
120+
self.assertNotEqual(self.type(False), self.type(True))
121+
122+
123+
# --- CreationDateClause -----------------------------------------------------
124+
125+
class _TestIsObsoleteClause(object):
126+
127+
type = NotImplementedError
128+
129+
def test_date(self):
130+
d1 = datetime.date(2021, 1, 23)
131+
clause = self.type(d1)
132+
self.assertEqual(str(clause), "creation_date: 2021-01-23")
133+
self.assertEqual(repr(clause), "CreationDateClause(datetime.date(2021, 1, 23))")
134+
self.assertEqual(clause.date, d1)
135+
self.assertIsInstance(clause.date, d1)
136+
d2 = datetime.date(2021, 2, 15)
137+
clause.date = d2
138+
self.assertIsInstance(clause.date, datetime.date)
139+
140+
def test_date(self):
141+
d1 = datetime.datetime(2021, 1, 23, 12)
142+
clause = self.type(d1)
143+
self.assertEqual(str(clause), "creation_date: 2021-01-23T12:00:00")
144+
self.assertEqual(repr(clause), "CreationDateClause(datetime.datetime(2021, 1, 23, 12, 0))")
145+
self.assertEqual(clause.date, d1)
146+
self.assertIsInstance(clause.date, datetime.datetime)
147+
d2 = datetime.datetime(2021, 2, 15, 12, 30, 0, tzinfo=datetime.timezone.utc)
148+
clause.date = d2
149+
self.assertEqual(str(clause), "creation_date: 2021-02-15T12:30:00Z")
150+
self.assertIsInstance(clause.date, datetime.datetime)

tests/test_term.py

Lines changed: 18 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -5,116 +5,39 @@
55

66
import fastobo
77

8-
# --- TermFrame --------------------------------------------------------------
8+
from .common import (
9+
_TestFrame,
10+
_TestIsObsoleteClause,
11+
_TestDefClause,
12+
_TestConsiderClause,
13+
_TestIsObsoleteClause,
14+
)
915

10-
class TestTermFrame(unittest.TestCase):
16+
# --- TermFrame --------------------------------------------------------------
1117

18+
class TestTermFrame(_TestFrame, unittest.TestCase):
1219
type = fastobo.term.TermFrame
1320

14-
def setUp(self):
15-
self.id = fastobo.id.PrefixedIdent("MS", "1000031")
16-
17-
def test_init(self):
18-
try:
19-
frame = self.type(self.id)
20-
except Exception:
21-
self.fail("could not create `TermFrame` instances")
22-
23-
def test_init_iterable(self):
24-
try:
25-
frame = self.type(self.id, [])
26-
except Exception:
27-
self.fail("could not create `TermFrame` instances")
28-
try:
29-
frame = self.type(self.id, [
30-
fastobo.term.NameClause("thing"),
31-
fastobo.term.CreatedByClause("Martin Larralde")
32-
])
33-
except Exception:
34-
self.fail("could not create `TermFrame` from iterable")
35-
36-
def test_init_type_error(self):
37-
self.assertRaises(TypeError, self.type, 1)
38-
self.assertRaises(TypeError, self.type, [1])
39-
self.assertRaises(TypeError, self.type, ["abc"])
40-
self.assertRaises(TypeError, self.type, "abc")
41-
self.assertRaises(TypeError, self.type, self.id, 1)
42-
self.assertRaises(TypeError, self.type, self.id, [1])
43-
self.assertRaises(TypeError, self.type, self.id, ["abc"])
44-
self.assertRaises(TypeError, self.type, self.id, "abc")
45-
46-
47-
# --- DefClause ---------------------------------------------------------
48-
49-
class TestDefClause(unittest.TestCase):
50-
51-
type = fastobo.term.DefClause
5221

53-
def test_repr(self):
54-
clause = self.type("definition")
55-
self.assertEqual(repr(clause), "DefClause('definition')")
22+
# --- DefClause --------------------------------------------------------------
5623

57-
id_ = fastobo.id.PrefixedIdent('ISBN', '0321842685')
58-
desc = "Hacker's Delight (2nd Edition)"
59-
x = fastobo.xref.Xref(id_, desc)
60-
61-
clause = self.type("definition", fastobo.xref.XrefList([x]))
62-
self.assertEqual(repr(clause), "DefClause('definition', XrefList([{!r}]))".format(x))
24+
class TestDefClause(_TestDefClause, unittest.TestCase):
25+
type = fastobo.term.DefClause
6326

6427

6528
# --- ConsiderClause ---------------------------------------------------------
6629

67-
class TestConsiderClause(unittest.TestCase):
68-
30+
class TestConsiderClause(_TestConsiderClause, unittest.TestCase):
6931
type = fastobo.term.ConsiderClause
7032

71-
def setUp(self):
72-
self.id = fastobo.id.PrefixedIdent("MS", "1000031")
73-
self.id2 = fastobo.id.PrefixedIdent("MS", "1000032")
74-
75-
def test_init(self):
76-
try:
77-
frame = self.type(self.id)
78-
except Exception:
79-
self.fail("could not create `ConsiderClause` instances")
80-
81-
def test_init_type_error(self):
82-
self.assertRaises(TypeError, self.type)
83-
self.assertRaises(TypeError, self.type, 1)
84-
85-
def test_eq(self):
86-
self.assertEqual(self.type(self.id), self.type(self.id))
87-
self.assertNotEqual(self.type(self.id), self.type(self.id2))
88-
8933

9034
# --- IsObsoleteClause -------------------------------------------------------
9135

36+
class TestIsObsoleteClause(_TestIsObsoleteClause, unittest.TestCase):
37+
type = fastobo.term.IsObsoleteClause
9238

93-
class TestIsObsoleteClause(unittest.TestCase):
9439

95-
type = fastobo.term.IsObsoleteClause
40+
# --- CreationDateClause -----------------------------------------------------
9641

97-
def test_init(self):
98-
try:
99-
frame = self.type(True)
100-
except Exception:
101-
self.fail("could not create `IsObsoleteClause` instances")
102-
103-
def test_property_obsolete(self):
104-
c = self.type(False)
105-
self.assertEqual(c.obsolete, False)
106-
c.obsolete = True
107-
self.assertEqual(c.obsolete, True)
108-
109-
def test_repr(self):
110-
self.assertEqual(repr(self.type(False)), "IsObsoleteClause(False)")
111-
self.assertEqual(repr(self.type(True)), "IsObsoleteClause(True)")
112-
113-
def test_str(self):
114-
self.assertEqual(str(self.type(False)), "is_obsolete: false")
115-
self.assertEqual(str(self.type(True)), "is_obsolete: true")
116-
117-
def test_eq(self):
118-
self.assertEqual(self.type(True), self.type(True))
119-
self.assertEqual(self.type(False), self.type(False))
120-
self.assertNotEqual(self.type(False), self.type(True))
42+
class TestIsObsoleteClause(_TestIsObsoleteClause, unittest.TestCase):
43+
type = fastobo.term.CreationDateClause

tests/test_typedef.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# coding: utf-8
2+
3+
import datetime
4+
import unittest
5+
6+
import fastobo
7+
8+
from .common import (
9+
_TestFrame,
10+
_TestIsObsoleteClause,
11+
_TestDefClause,
12+
_TestConsiderClause,
13+
_TestIsObsoleteClause,
14+
)
15+
16+
# --- TermFrame --------------------------------------------------------------
17+
18+
class TestTypedefFrame(_TestFrame, unittest.TestCase):
19+
type = fastobo.typedef.TypedefFrame
20+
21+
22+
# --- DefClause --------------------------------------------------------------
23+
24+
class TestDefClause(_TestDefClause, unittest.TestCase):
25+
type = fastobo.typedef.DefClause
26+
27+
28+
# --- ConsiderClause ---------------------------------------------------------
29+
30+
class TestConsiderClause(_TestConsiderClause, unittest.TestCase):
31+
type = fastobo.typedef.ConsiderClause
32+
33+
34+
# --- IsObsoleteClause -------------------------------------------------------
35+
36+
class TestIsObsoleteClause(_TestIsObsoleteClause, unittest.TestCase):
37+
type = fastobo.typedef.IsObsoleteClause
38+
39+
40+
# --- CreationDateClause -----------------------------------------------------
41+
42+
class TestIsObsoleteClause(_TestIsObsoleteClause, unittest.TestCase):
43+
type = fastobo.typedef.CreationDateClause

0 commit comments

Comments
 (0)