[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/godhelpjun/bpython/reloading-sys/bpython/test/test_sitefix.py [Back]  [Original]

import sys
import optparse

from bpython.test import FixLanguageTestCase as TestCase
from bpython._py3compat import py3

from bpython.curtsiesfrontend import sitefix


class AttrReplaced(object):
    def __init__(self, module, attr, replacement):
        self.module = module
        self.attr = attr
        self.replacement = replacement

    def __enter__(self):
        if hasattr(self.module, self.attr):
            self.orig_value = getattr(self.module, self.attr)
        setattr(self.module, self.attr, self.replacement)

    def __exit__(self, exc_type, exc_value, traceback):
        if hasattr(self, 'orig_value'):
            setattr(self.module, self.attr, self.replacement)
        else:
            delattr(self.module, self.attr)


class TestCurtsiesReevaluateWithImport(TestCase):
    def test_reload_works(self):
        orig = optparse.SUPPRESS_HELP
        with AttrReplaced(optparse, 'SUPPRESS_HELP', 1):
            #  reload(optparse)
            sitefix.reload(optparse)
            self.assertEqual(optparse.SUPPRESS_HELP, orig)

    def test_reload_sys(self):
        with AttrReplaced(sys, 'stdin', 1):
            with AttrReplaced(sys, 'a', 2):
                with AttrReplaced(sys, 'version', 3):
                    sitefix.reload(sys)
                    self.assertEqual(sys.a, 2)  # new attrs stick around
                    self.assertEqual(sys.stdin, 1)  # stdin stays
                    if not py3:
                        # In Python 3 sys attributes are not replaced on reload
                        self.assertNotEqual(sys.version, 3)  # in Python 2

Web Proxy Viewer  |  New URL  |  Original Page