aboutsummaryrefslogtreecommitdiff
blob: 92ffba5708bfca60e4eb93191e224c47f1b4ed93 (plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/python
#
# Copyright(c) 2009, Gentoo Foundation
#
# Licensed under the GNU General Public License, v2

import unittest

from gentoolkit.cpv import CPV, compare_strs

class TestGentoolkitCPV(unittest.TestCase):

	def assertEqual2(self, o1, o2):
		# logic bugs hidden behind short circuiting comparisons for metadata
		# is why we test the comparison *both* ways.
		self.assertEqual(o1, o2)
		self.assertEqual(o2, o1)

	def assertNotEqual2(self, o1, o2):
		# is why we test the comparison *both* ways.
		self.assertNotEqual(o1, o2)
		self.assertNotEqual(o2, o1)

	def test_comparison(self):
		self.assertEqual2(CPV('pkg'), CPV('pkg'))
		self.assertNotEqual2(CPV('pkg'), CPV('pkg1'))
		self.assertEqual2(CPV('cat/pkg'), CPV('cat/pkg'))
		self.assertNotEqual2(CPV('cat/pkg'), CPV('cat/pkgb'))
		self.assertNotEqual2(CPV('cata/pkg'), CPV('cat/pkg'))
		self.assertEqual2(CPV('cat/pkg-0.1'), CPV('cat/pkg-0.1'))
		self.assertNotEqual2(CPV('cat/pkg-1.0'), CPV('cat/pkg-1'))
		self.assertEqual2(CPV('cat/pkg-0'), CPV('cat/pkg-0'))
		self.assertEqual2(CPV('cat/pkg-1-r1'), CPV('cat/pkg-1-r1'))
		self.assertNotEqual2(CPV('cat/pkg-2-r1'), CPV('cat/pkg-2-r10'))
		self.assertEqual2(CPV('cat/pkg-1_rc2'), CPV('cat/pkg-1_rc2'))
		self.assertNotEqual2(CPV('cat/pkg-2_rc2-r1'), CPV('cat/pkg-2_rc1-r1'))

	def test_compare_strs(self):
		# Test ordering of package strings, Portage has test for vercmp,
		# so just do the rest
		version_tests = [
			# different categories
			('sys-apps/portage-2.1.6.8', 'sys-auth/pambase-20080318'),
			# different package names
			('sys-apps/pkgcore-0.4.7.15-r1', 'sys-apps/portage-2.1.6.8'),
			# different package versions
			('sys-apps/portage-2.1.6.8', 'sys-apps/portage-2.2_rc25')
		]
		# Check less than
		for vt in version_tests:
			self.assertTrue(compare_strs(vt[0], vt[1]) == -1)
		# Check greater than
		for vt in version_tests:
			self.assertTrue(compare_strs(vt[1], vt[0]) == 1)
		# Check equal
		vt = ('sys-auth/pambase-20080318', 'sys-auth/pambase-20080318')
		self.assertTrue(compare_strs(vt[0], vt[1]) == 0)

	def test_chunk_splitting(self):
		all_tests = [
			# simple
			('sys-apps/portage-2.2', {
				'category': 'sys-apps',
				'name': 'portage',
				'cp': 'sys-apps/portage',
				'version': '2.2',
				'revision': '',
				'fullversion': '2.2'
			}),
			# with rc
			('sys-apps/portage-2.2_rc10', {
				'category': 'sys-apps',
				'name': 'portage',
				'cp': 'sys-apps/portage',
				'version': '2.2_rc10',
				'revision': '',
				'fullversion': '2.2_rc10'
			}),
			# with revision
			('sys-apps/portage-2.2_rc10-r1', {
				'category': 'sys-apps',
				'name': 'portage',
				'cp': 'sys-apps/portage',
				'version': '2.2_rc10',
				'revision': 'r1',
				'fullversion': '2.2_rc10-r1'
			}),
			# with dash (-) in name (Bug #316961)
			('c-portage', {
				'category': '',
				'name': 'c-portage',
				'cp': 'c-portage',
				'version': '',
				'revision': '',
				'fullversion': ''
			}),
			# with dash (-) in name (Bug #316961)
			('sys-apps/c-portage-2.2_rc10-r1', {
				'category': 'sys-apps',
				'name': 'c-portage',
				'cp': 'sys-apps/c-portage',
				'version': '2.2_rc10',
				'revision': 'r1',
				'fullversion': '2.2_rc10-r1'
			}),
		]

		for test in all_tests:
			cpv = CPV(test[0])
			keys = ('category', 'name', 'cp', 'version', 'revision', 'fullversion')
			for k in keys:
				self.assertEqual(
					getattr(cpv, k), test[1][k]
				)


def test_main():
	suite = unittest.TestLoader().loadTestsFromTestCase(TestGentoolkitCPV)
	unittest.TextTestRunner(verbosity=2).run(suite)
test_main.__test__ = False


if __name__ == '__main__':
	test_main()