/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1185.49.22 by John Arbash Meinel
Added get_password to the UIFactory, using it inside of sftp.py
1
# Copyright (C) 2005 by Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Tests for the bzrlib ui
18
"""
19
20
import os
1534.5.6 by Robert Collins
split out converter logic into per-format objects.
21
from StringIO import StringIO
1185.49.22 by John Arbash Meinel
Added get_password to the UIFactory, using it inside of sftp.py
22
import sys
23
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
24
25
import bzrlib.errors as errors
26
from bzrlib.progress import TTYProgressBar, ProgressBarStack
1185.49.22 by John Arbash Meinel
Added get_password to the UIFactory, using it inside of sftp.py
27
from bzrlib.tests import TestCase
1558.8.4 by Aaron Bentley
Fixed test case for pb.note
28
import bzrlib.ui
1185.49.22 by John Arbash Meinel
Added get_password to the UIFactory, using it inside of sftp.py
29
from bzrlib.ui import SilentUIFactory
30
from bzrlib.ui.text import TextUIFactory
31
32
class UITests(TestCase):
33
34
    def test_silent_factory(self):
35
36
        ui = SilentUIFactory()
1594.1.3 by Robert Collins
Fixup pb usage to use nested_progress_bar.
37
        pb = ui.nested_progress_bar()
38
        try:
39
            # TODO: Test that there is no output from SilentUIFactory
40
    
41
            self.assertEquals(ui.get_password(), None)
42
            self.assertEquals(ui.get_password(u'Hello There \u1234 %(user)s',
43
                                              user=u'some\u1234')
44
                             , None)
45
        finally:
46
            pb.finished()
1185.49.22 by John Arbash Meinel
Added get_password to the UIFactory, using it inside of sftp.py
47
48
    def test_text_factory(self):
49
        ui = TextUIFactory()
1594.1.3 by Robert Collins
Fixup pb usage to use nested_progress_bar.
50
        pb = ui.nested_progress_bar()
51
        pb.finished()
1185.49.22 by John Arbash Meinel
Added get_password to the UIFactory, using it inside of sftp.py
52
        # TODO: Test the output from TextUIFactory, perhaps by overriding sys.stdout
53
54
        # Unfortunately we can't actually test the ui.get_password() because 
55
        # that would actually prompt the user for a password during the test suite
56
        # This has been tested manually with both LANG=en_US.utf-8 and LANG=C
57
        # print
58
        # self.assertEquals(ui.get_password(u"%(user)s please type 'bogus'",
59
        #                                   user=u'some\u1234')
60
        #                  , 'bogus')
61
1534.5.6 by Robert Collins
split out converter logic into per-format objects.
62
63
    def test_progress_note(self):
64
        stderr = StringIO()
65
        stdout = StringIO()
1558.8.4 by Aaron Bentley
Fixed test case for pb.note
66
        old_factory = bzrlib.ui.ui_factory
67
        bzrlib.ui.ui_factory = TextUIFactory()
68
        pb = None
69
        try:
70
            pb = bzrlib.ui.ui_factory.nested_progress_bar()
71
            pb.to_messages_file = stdout
72
            bzrlib.ui.ui_factory._progress_bar_stack.bottom().to_file = stderr
73
            result = pb.note('t')
74
            self.assertEqual(None, result)
75
            self.assertEqual("t\n", stdout.getvalue())
76
            # the exact contents will depend on the terminal width and we don't
77
            # care about that right now - but you're probably running it on at
78
            # least a 10-character wide terminal :)
79
            self.assertContainsRe(stderr.getvalue(), r'^\r {10,}\r$')
80
        finally:
81
            if pb is not None:
82
                pb.finished()
83
            bzrlib.ui.ui_factory = old_factory
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
84
85
    def test_progress_nested(self):
86
        # test factory based nested and popping.
87
        ui = TextUIFactory()
88
        pb1 = ui.nested_progress_bar()
89
        pb2 = ui.nested_progress_bar()
90
        self.assertRaises(errors.MissingProgressBarFinish, pb1.finished)
91
        pb2.finished()
92
        pb1.finished()
93
94
    def test_progress_stack(self):
95
        # test the progress bar stack which the default text factory 
96
        # uses.
97
        stderr = StringIO()
98
        stdout = StringIO()
99
        # make a stack, which accepts parameters like a pb.
100
        stack = ProgressBarStack(to_file=stderr, to_messages_file=stdout)
101
        # but is not one
102
        self.assertFalse(getattr(stack, 'note', False))
103
        pb1 = stack.get_nested()
104
        pb2 = stack.get_nested()
105
        self.assertRaises(errors.MissingProgressBarFinish, pb1.finished)
106
        pb2.finished()
107
        pb1.finished()
108
        # the text ui factory never actually removes the stack once its setup.
109
        # we need to be able to nest again correctly from here.
110
        pb1 = stack.get_nested()
111
        pb2 = stack.get_nested()
112
        self.assertRaises(errors.MissingProgressBarFinish, pb1.finished)
113
        pb2.finished()
114
        pb1.finished()