summaryrefslogtreecommitdiff
path: root/tests/test_option.py
blob: 3996659e3c6a8b93e7d480e05ea9c1355b50e74f (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
#!/usr/bin/env python

import unittest
import sys

from StringIO import StringIO
from common import gobject
from gobject import option

class TestOption(unittest.TestCase):
    EXCEPTION_MESSAGE = "This callback fails"

    def setup_group(self):
        def option_callback(option, opt, value, parser):
            raise StandardError(self.EXCEPTION_MESSAGE)
        
        group = option.OptionGroup(
            "unittest", "Unit test options", "Show all unittest options",
            option_list = [
                option.make_option("-f", "-u", "--file", "--unit-file",
                                   type="filename",
                                   dest="unit_file",
                                   help="Unit test option"),
                option.make_option("--test-integer",
                                   type="int",
                                   dest="test_integer",
                                   help="Unit integer option"),
                option.make_option("--callback-failure-test",
                                   action="callback",
                                   callback=option_callback,
                                   dest="test_integer",
                                   help="Unit integer option"),
            ])
        group.add_option("-t", "--test", 
                         action="store_false", 
                         dest="test", 
                         default=True,
                         help="Unit test option")
        return group

    def setup_parser(self):
        parser = option.OptionParser("NAMES...", 
                                     description="Option unit test")
        parser.add_option("-t", "--test", help="Unit test option",
                          action="store_false", dest="test", default=True)
        return parser

    def testOption(self):
        parser = self.setup_parser()
        group = self.setup_group()
        parser.add_option_group(group)

        parser.parse_args(["test_option.py", "--test", "-f", "test"])
        assert group.values.test
        assert not parser.values.test
        assert group.values.unit_file == "test"
        
        try:
            parser.parse_args(["test_option.py", "--test-integer=text"])
        except option.OptionValueError:
            pass
        else:
            assert False

        sio = StringIO()
        old_stderr = sys.stderr
        sys.stderr = sio
        try:
            parser.parse_args(["test_option.py", "--callback-failure-test"])
        finally:
            sys.stderr = old_stderr
        assert (sio.getvalue().split('\n')[-2] == 
                "StandardError: " + self.EXCEPTION_MESSAGE)

        try:
            parser.parse_args(["test_option.py", "--unknwon-option"])
        except option.BadOptionError:
            pass
        else:
            assert False

    def testBadConstructor(self):
        self.assertRaises(TypeError, option.OptionGroup)