annotate tests/unit.py @ 98:91e213025769

handle None type (though its probably a bogus case) and note on future failure upon coercion
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 30 Apr 2012 11:07:17 -0700
parents 0804a706d6bf
children c530f6265deb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 #!/usr/bin/env python
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 """
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4 unit tests
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 """
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6
30
b27a7cb2dd5b stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents: 28
diff changeset
7 import configuration
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
8 import os
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
9 import sys
32
da4d5c5831c6 serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents: 30
diff changeset
10 import tempfile
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
11 import unittest
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
12
32
da4d5c5831c6 serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents: 30
diff changeset
13 try:
da4d5c5831c6 serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents: 30
diff changeset
14 import json
da4d5c5831c6 serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents: 30
diff changeset
15 except ImportError:
da4d5c5831c6 serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents: 30
diff changeset
16 import simplejson as json
da4d5c5831c6 serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents: 30
diff changeset
17
19
cadc9514f60a we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
18 from example import ExampleConfiguration # example configuration to test
11
e00afe2c83bf stubbing configuration parser
Jeff Hammel <jhammel@mozilla.com>
parents: 0
diff changeset
19
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
20 # globals
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
21 here = os.path.dirname(os.path.abspath(__file__))
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22
24
39f2611db9be rename a bunch of things and begin to work on the sanity of validation
Jeff Hammel <jhammel@mozilla.com>
parents: 19
diff changeset
23 class ConfigurationUnitTest(unittest.TestCase):
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
24
24
39f2611db9be rename a bunch of things and begin to work on the sanity of validation
Jeff Hammel <jhammel@mozilla.com>
parents: 19
diff changeset
25 def test_cli(self):
28
c516ab813079 begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
26 """test command line interface"""
c516ab813079 begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
27
19
cadc9514f60a we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
28 example = ExampleConfiguration()
cadc9514f60a we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
29
cadc9514f60a we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
30 # parse command line arguments
65
2a2e9aee5bc6 refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents: 58
diff changeset
31 options, args = example.parse_args(['-a', 'ts', '--develop', '-e', '/home/jhammel/bin/firefox'])
25
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
32
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
33 # ensure that the options appropriately get set
19
cadc9514f60a we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
34 self.assertEqual(bool(args), False) # no arguments
cadc9514f60a we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
35 self.assertEqual(options.develop, True)
25
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
36 self.assertEqual(options.activeTests, ['ts'])
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
37 self.assertEqual(options.browser_path, '/home/jhammel/bin/firefox')
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
38
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
39 # ensure that the configuration appropriately gets updated
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
40 self.assertEqual(example.config['develop'], True)
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
41 self.assertEqual(example.config['activeTests'], ['ts'])
b39e550402ea we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents: 24
diff changeset
42 self.assertEqual(example.config['browser_path'], '/home/jhammel/bin/firefox')
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
43
28
c516ab813079 begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
44 def test_configuration_providers(self):
c516ab813079 begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
45 """test file-based configuration providers"""
39
3c91bf85adb5 actually test serialization
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
46 # requires json/simplejson to be installed
30
b27a7cb2dd5b stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents: 28
diff changeset
47
b27a7cb2dd5b stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents: 28
diff changeset
48 example = ExampleConfiguration()
b27a7cb2dd5b stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents: 28
diff changeset
49
b27a7cb2dd5b stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents: 28
diff changeset
50 # see what providers you got
b27a7cb2dd5b stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents: 28
diff changeset
51 json_provider = example.configuration_provider('json')
b27a7cb2dd5b stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents: 28
diff changeset
52 self.assertTrue(isinstance(json_provider, configuration.JSON))
28
c516ab813079 begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 25
diff changeset
53
33
b7d6a90b0bb5 setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
54 # serialize to a temporary file
37
a1f8dec4d4f9 we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
55 filename = tempfile.mktemp(suffix='.json')
38
8909ae1cc4ea fix serialization (stub) tests
Jeff Hammel <jhammel@mozilla.com>
parents: 37
diff changeset
56 self.assertEqual(example.filename2format(filename), 'json')
37
a1f8dec4d4f9 we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
57 self.assertFalse(os.path.exists(filename))
34
79aca36abd9a fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents: 33
diff changeset
58 config = {'browser_path': '/home/jhammel/bin/firefox',
79aca36abd9a fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents: 33
diff changeset
59 'activeTests': ['ts']}
79aca36abd9a fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents: 33
diff changeset
60 example(config)
79aca36abd9a fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents: 33
diff changeset
61 config['test_timeout'] = 1200 # default
79aca36abd9a fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents: 33
diff changeset
62 self.assertEqual(config, example.config)
37
a1f8dec4d4f9 we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
63 example.serialize(filename)
a1f8dec4d4f9 we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents: 36
diff changeset
64 self.assertTrue(os.path.exists(filename))
39
3c91bf85adb5 actually test serialization
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
65 serialized = json.loads(file(filename).read())
3c91bf85adb5 actually test serialization
Jeff Hammel <jhammel@mozilla.com>
parents: 38
diff changeset
66 self.assertEqual(serialized, config)
42
75886253ee73 test deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
67
75886253ee73 test deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
68 # deserialize
75886253ee73 test deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
69 deserialized = example.deserialize(filename)
75886253ee73 test deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
70 self.assertEqual(deserialized, config)
75886253ee73 test deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
71
75886253ee73 test deserialization
Jeff Hammel <jhammel@mozilla.com>
parents: 41
diff changeset
72 # cleanup
33
b7d6a90b0bb5 setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
73 if os.path.exists(filename):
b7d6a90b0bb5 setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
74 os.remove(filename)
b7d6a90b0bb5 setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents: 32
diff changeset
75
48
84fb8ad5ba81 ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
76 def test_missing_values(self):
84fb8ad5ba81 ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
77 """ensure that Configuration raises a missing value exception"""
84fb8ad5ba81 ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
78
84fb8ad5ba81 ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
79 example = ExampleConfiguration()
84fb8ad5ba81 ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
80
89
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
81 # monkey-patch the error method from optparse.OptionParser
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
82 error_msg = []
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
83 def error(msg):
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
84 error_msg.append(msg)
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
85 example.error = error
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
86
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
87 # trigger it
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
88 example.parse_args(args=[])
0804a706d6bf handle CLI errors with optparse
Jeff Hammel <jhammel@mozilla.com>
parents: 65
diff changeset
89 self.assertEqual(error_msg, ['Parameter browser_path is required but not present'])
48
84fb8ad5ba81 ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents: 43
diff changeset
90
36
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
91 def test_required(self):
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
92 """ensure you have to have required values"""
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
93
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
94 example = ExampleConfiguration()
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
95
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
96 # ensure you get an exception
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
97 missingvalueexception = None
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
98 try:
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
99 example()
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
100 except configuration.MissingValueException, e:
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
101 missingvalueexception = e
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
102 self.assertTrue(isinstance(e, configuration.MissingValueException))
d218df4d0b4c add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents: 34
diff changeset
103
40
056280e7a6ea stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents: 39
diff changeset
104 def test_multiple_configurations(self):
056280e7a6ea stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents: 39
diff changeset
105 """test having multiple configurations"""
056280e7a6ea stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents: 39
diff changeset
106
056280e7a6ea stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents: 39
diff changeset
107 # simple override
056280e7a6ea stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents: 39
diff changeset
108 args1 = ['-e', '/opt/bin/firefox']
056280e7a6ea stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents: 39
diff changeset
109
55
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
110 # simple serialized file
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
111 json_file = os.path.join(here, 'base.json')
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
112 assert os.path.exists(json_file)
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
113 json_config = json.loads(file(json_file).read())
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
114
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
115 # parse the json file
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
116 example = ExampleConfiguration()
65
2a2e9aee5bc6 refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents: 58
diff changeset
117 example.parse_args([json_file])
55
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
118 self.assertEqual(example.config, json_config)
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
119
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
120 # parse the json file with overrides
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
121 example = ExampleConfiguration()
65
2a2e9aee5bc6 refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents: 58
diff changeset
122 example.parse_args([json_file] + args1)
55
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
123 config = json_config.copy()
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
124 config['browser_path'] = '/opt/bin/firefox'
87bd539a21d3 test with overrides
Jeff Hammel <jhammel@mozilla.com>
parents: 49
diff changeset
125 self.assertEqual(example.config, config)
43
f09982d47b3c add --dump option
Jeff Hammel <jhammel@mozilla.com>
parents: 42
diff changeset
126
56
7f8e9c5d1606 introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents: 55
diff changeset
127 # it shouldn't matter in which order the arguments are
7f8e9c5d1606 introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents: 55
diff changeset
128 example = ExampleConfiguration()
65
2a2e9aee5bc6 refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents: 58
diff changeset
129 example.parse_args(args1 + [json_file])
56
7f8e9c5d1606 introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents: 55
diff changeset
130 self.assertEqual(example.config, config)
7f8e9c5d1606 introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents: 55
diff changeset
131
58
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
132 # Now a tricky case:
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
133 # the default value for test_timeout is 1200:
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
134 example = ExampleConfiguration()
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
135 self.assertEqual(example.options['test_timeout']['default'], 1200)
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
136 # The value from base.json is 60:
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
137 self.assertEqual(json_config['test_timeout'], 60)
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
138 self.assertEqual(config['test_timeout'], 60)
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
139 # but we can override it back from the "command line"
65
2a2e9aee5bc6 refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents: 58
diff changeset
140 example.parse_args(args1 + [json_file, '--test_timeout', '1200'])
58
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
141 config['test_timeout'] = 1200
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
142 self.assertEqual(example.config, config)
f7dc5cf2540c add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents: 56
diff changeset
143
0
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
144 if __name__ == '__main__':
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
145 unittest.main()