jenkins-bot has submitted this change and it was merged.
Change subject: [IMPROV] ui tests: deindent source code ......................................................................
[IMPROV] ui tests: deindent source code
With 03477f98e54ff2b91cc1938abb3742cee215fa59 the ui_tests now run outside of __name__ == __main__'. To have the number of changes minimal it didn't deindent the source code but just changed the if-condition to be always True.
Change-Id: I2ab67f422a1d9df1da1ae0523f3f163577c416c1 --- M tests/ui_tests.py 1 file changed, 372 insertions(+), 359 deletions(-)
Approvals: John Vandenberg: Looks good to me, but someone else must approve XZise: Looks good to me, approved jenkins-bot: Verified
diff --git a/tests/ui_tests.py b/tests/ui_tests.py index 365b329..9229769 100644 --- a/tests/ui_tests.py +++ b/tests/ui_tests.py @@ -129,476 +129,489 @@ return strin._stream.readline().strip()
-# TODO: This complete section doesn't depend on __name__ == '__main__' anymore -if True: - patched_streams = {} - strout = Stream('out', patched_streams) - strerr = Stream('err', patched_streams) - strin = Stream('in', {}) +patched_streams = {} +strout = Stream('out', patched_streams) +strerr = Stream('err', patched_streams) +strin = Stream('in', {})
- newstdout = strout._stream - newstderr = strerr._stream - newstdin = strin._stream +newstdout = strout._stream +newstderr = strerr._stream +newstdin = strin._stream
- org_print = ui._print - org_input = ui._raw_input +org_print = ui._print +org_input = ui._raw_input
- def patch(): - """Patch standard terminal files.""" - strout.reset() - strerr.reset() - strin.reset() - ui._print = patched_print - ui._raw_input = patched_input
- def unpatch(): - """un-patch standard terminal files.""" - ui._print = org_print - ui._raw_input = org_input +def patch(): + """Patch standard terminal files.""" + strout.reset() + strerr.reset() + strin.reset() + ui._print = patched_print + ui._raw_input = patched_input
- logger = logging.getLogger('pywiki') - loggingcontext = {'caller_name': "ui_tests", - 'caller_file': "ui_tests", - 'caller_line': 0, - 'newline': "\n"}
- class UITestCase(unittest.TestCase): +def unpatch(): + """un-patch standard terminal files.""" + ui._print = org_print + ui._raw_input = org_input
- """UI tests.""" +logger = logging.getLogger('pywiki') +loggingcontext = {'caller_name': "ui_tests", + 'caller_file': "ui_tests", + 'caller_line': 0, + 'newline': "\n"}
- net = False
- def setUp(self): - patch() +class UITestCase(unittest.TestCase):
- pywikibot.config.colorized_output = True - pywikibot.config.transliterate = False - pywikibot.ui.transliteration_target = None - pywikibot.ui.encoding = 'utf-8' + """UI tests."""
- def tearDown(self): - unpatch() + net = False
- def _encode(self, string, encoding='utf-8'): - if sys.version_info[0] > 2: - return string - else: - return string.encode(encoding) + def setUp(self): + patch()
- class TestTerminalOutput(UITestCase): + pywikibot.config.colorized_output = True + pywikibot.config.transliterate = False + pywikibot.ui.transliteration_target = None + pywikibot.ui.encoding = 'utf-8'
- """Terminal output tests.""" + def tearDown(self): + unpatch()
- def testOutputLevels_logging_debug(self): - logger.log(DEBUG, 'debug', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "") + def _encode(self, string, encoding='utf-8'): + if sys.version_info[0] > 2: + return string + else: + return string.encode(encoding)
- def testOutputLevels_logging_verbose(self): - logger.log(VERBOSE, 'verbose', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "")
- def testOutputLevels_logging_info(self): - logger.log(INFO, 'info', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "info\n") +class TestTerminalOutput(UITestCase):
- def testOutputLevels_logging_stdout(self): - logger.log(STDOUT, 'stdout', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "stdout\n") - self.assertEqual(newstderr.getvalue(), "") + """Terminal output tests."""
- def testOutputLevels_logging_input(self): - logger.log(INPUT, 'input', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "input\n") + def testOutputLevels_logging_debug(self): + logger.log(DEBUG, 'debug', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "")
- def testOutputLevels_logging_WARNING(self): - logger.log(WARNING, 'WARNING', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "WARNING: WARNING\n") + def testOutputLevels_logging_verbose(self): + logger.log(VERBOSE, 'verbose', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "")
- def testOutputLevels_logging_ERROR(self): - logger.log(ERROR, 'ERROR', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "ERROR: ERROR\n") + def testOutputLevels_logging_info(self): + logger.log(INFO, 'info', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "info\n")
- def testOutputLevels_logging_CRITICAL(self): - logger.log(CRITICAL, 'CRITICAL', extra=loggingcontext) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "CRITICAL: CRITICAL\n") + def testOutputLevels_logging_stdout(self): + logger.log(STDOUT, 'stdout', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "stdout\n") + self.assertEqual(newstderr.getvalue(), "")
- def test_output(self): - pywikibot.output("output", toStdout=False) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "output\n") + def testOutputLevels_logging_input(self): + logger.log(INPUT, 'input', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "input\n")
- def test_output_stdout(self): - pywikibot.output("output", toStdout=True) - self.assertEqual(newstdout.getvalue(), "output\n") - self.assertEqual(newstderr.getvalue(), "") + def testOutputLevels_logging_WARNING(self): + logger.log(WARNING, 'WARNING', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "WARNING: WARNING\n")
- def test_warning(self): - pywikibot.warning("warning") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "WARNING: warning\n") + def testOutputLevels_logging_ERROR(self): + logger.log(ERROR, 'ERROR', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "ERROR: ERROR\n")
- def test_error(self): - pywikibot.error("error") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "ERROR: error\n") + def testOutputLevels_logging_CRITICAL(self): + logger.log(CRITICAL, 'CRITICAL', extra=loggingcontext) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "CRITICAL: CRITICAL\n")
- def test_log(self): - pywikibot.log("log") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "") + def test_output(self): + pywikibot.output("output", toStdout=False) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "output\n")
- def test_critical(self): - pywikibot.critical("critical") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "CRITICAL: critical\n") + def test_output_stdout(self): + pywikibot.output("output", toStdout=True) + self.assertEqual(newstdout.getvalue(), "output\n") + self.assertEqual(newstderr.getvalue(), "")
- def test_debug(self): - pywikibot.debug("debug", "test") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "") + def test_warning(self): + pywikibot.warning("warning") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "WARNING: warning\n")
- def test_exception(self): - class TestException(Exception): - pass - try: - raise TestException("Testing Exception") - except TestException: - pywikibot.exception("exception") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "ERROR: TestException: Testing Exception\n") + def test_error(self): + pywikibot.error("error") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "ERROR: error\n")
- def test_exception_tb(self): - class TestException(Exception): - pass - try: - raise TestException("Testing Exception") - except TestException: - pywikibot.exception("exception", tb=True) - self.assertEqual(newstdout.getvalue(), "") - stderrlines = newstderr.getvalue().split("\n") - self.assertEqual(stderrlines[0], "ERROR: TestException: Testing Exception") - self.assertEqual(stderrlines[1], "Traceback (most recent call last):") - self.assertEqual(stderrlines[3], """ raise TestException("Testing Exception")""") - self.assertTrue(stderrlines[4].endswith(': Testing Exception')) + def test_log(self): + pywikibot.log("log") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "")
- self.assertNotEqual(stderrlines[-1], "\n") + def test_critical(self): + pywikibot.critical("critical") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "CRITICAL: critical\n")
- class TestTerminalInput(UITestCase): + def test_debug(self): + pywikibot.debug("debug", "test") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "")
- """Terminal input tests.""" + def test_exception(self): + class TestException(Exception):
- input_choice_output = "question ([A]nswer 1, a[n]swer 2, an[s]wer 3) " + """Test Exception."""
- def testInput(self): - newstdin.write("input to read\n") - newstdin.seek(0) + try: + raise TestException("Testing Exception") + except TestException: + pywikibot.exception("exception") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "ERROR: TestException: Testing Exception\n")
- returned = pywikibot.input("question") + def test_exception_tb(self): + class TestException(Exception):
- self.assertEqual(newstdout.getvalue(), "") - self.assertEqual(newstderr.getvalue(), "question ") + """Test Exception."""
- self.assertIsInstance(returned, unicode) - self.assertEqual(returned, u"input to read") + try: + raise TestException("Testing Exception") + except TestException: + pywikibot.exception("exception", tb=True) + self.assertEqual(newstdout.getvalue(), "") + stderrlines = newstderr.getvalue().split("\n") + self.assertEqual(stderrlines[0], "ERROR: TestException: Testing Exception") + self.assertEqual(stderrlines[1], "Traceback (most recent call last):") + self.assertEqual(stderrlines[3], """ raise TestException("Testing Exception")""") + self.assertTrue(stderrlines[4].endswith(': Testing Exception'))
- def _call_input_choice(self): - rv = pywikibot.input_choice( - "question", - (('answer 1', u'A'), - ('answer 2', u'N'), - ('answer 3', u'S')), - u'A', - automatic_quit=False) + self.assertNotEqual(stderrlines[-1], "\n")
- self.assertEqual(newstdout.getvalue(), "")
- self.assertIsInstance(rv, unicode) +class TestTerminalInput(UITestCase):
- return rv + """Terminal input tests."""
- def testInputChoiceDefault(self): - newstdin.write("\n") - newstdin.seek(0) + input_choice_output = "question ([A]nswer 1, a[n]swer 2, an[s]wer 3) "
- returned = self._call_input_choice() + def testInput(self): + newstdin.write("input to read\n") + newstdin.seek(0)
- self.assertEqual(returned, "a") + returned = pywikibot.input("question")
- def testInputChoiceCapital(self): - newstdin.write("N\n") - newstdin.seek(0) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual(newstderr.getvalue(), "question ")
- returned = self._call_input_choice() + self.assertIsInstance(returned, unicode) + self.assertEqual(returned, u"input to read")
- self.assertEqual(newstderr.getvalue(), self.input_choice_output) + def _call_input_choice(self): + rv = pywikibot.input_choice( + "question", + (('answer 1', u'A'), + ('answer 2', u'N'), + ('answer 3', u'S')), + u'A', + automatic_quit=False)
- self.assertEqual(returned, "n") + self.assertEqual(newstdout.getvalue(), "")
- def testInputChoiceNonCapital(self): - newstdin.write("n\n") - newstdin.seek(0) + self.assertIsInstance(rv, unicode)
- returned = self._call_input_choice() + return rv
- self.assertEqual(newstderr.getvalue(), self.input_choice_output) + def testInputChoiceDefault(self): + newstdin.write("\n") + newstdin.seek(0)
- self.assertEqual(returned, "n") + returned = self._call_input_choice()
- def testInputChoiceIncorrectAnswer(self): - newstdin.write("X\nN\n") - newstdin.seek(0) + self.assertEqual(returned, "a")
- returned = self._call_input_choice() + def testInputChoiceCapital(self): + newstdin.write("N\n") + newstdin.seek(0)
- self.assertEqual(newstderr.getvalue(), - self.input_choice_output * 2) + returned = self._call_input_choice() + + self.assertEqual(newstderr.getvalue(), self.input_choice_output) + + self.assertEqual(returned, "n") + + def testInputChoiceNonCapital(self): + newstdin.write("n\n") + newstdin.seek(0) + + returned = self._call_input_choice() + + self.assertEqual(newstderr.getvalue(), self.input_choice_output) + + self.assertEqual(returned, "n") + + def testInputChoiceIncorrectAnswer(self): + newstdin.write("X\nN\n") + newstdin.seek(0) + + returned = self._call_input_choice() + + self.assertEqual(newstderr.getvalue(), + self.input_choice_output * 2) + + self.assertEqual(returned, "n") + + +@unittest.skipUnless(os.name == "posix", "requires Unix console") +class TestTerminalOutputColorUnix(UITestCase): + + """Terminal output color tests.""" + + str1 = 'text \03{lightpurple}light purple text\03{default} text' + + def testOutputColorizedText(self): + pywikibot.output(self.str1) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual( + newstderr.getvalue(), + 'text \x1b[95mlight purple text\x1b[0m text\n\x1b[0m')
- self.assertEqual(returned, "n") + def testOutputNoncolorizedText(self): + pywikibot.config.colorized_output = False + pywikibot.output(self.str1) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual( + newstderr.getvalue(), + 'text light purple text text ***\n')
- @unittest.skipUnless(os.name == "posix", "requires Unix console") - class TestTerminalOutputColorUnix(UITestCase): + str2 = ('normal text \03{lightpurple} light purple ' + + '\03{lightblue} light blue \03{default} light purple ' + + '\03{default} normal text')
- """Terminal output color tests.""" + @unittest.expectedFailure + def testOutputColorCascade(self): + pywikibot.output(self.str2) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual( + newstderr.getvalue(), + 'normal text \x1b[35;1m light purple ' + + '\x1b[94m light blue \x1b[35;1m light purple ' + + '\x1b[0m normal text\n\x1b[0m')
- str1 = 'text \03{lightpurple}light purple text\03{default} text' + def testOutputColorCascade_incorrect(self): + """ Test incorrect behavior of testOutputColorCascade. """ + pywikibot.output(self.str2) + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual( + newstderr.getvalue(), + 'normal text \x1b[95m light purple ' + + '\x1b[94m light blue \x1b[0m light purple ' + + '\x1b[0m normal text\n\x1b[0m')
- def testOutputColorizedText(self): - pywikibot.output(self.str1) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual( - newstderr.getvalue(), - 'text \x1b[95mlight purple text\x1b[0m text\n\x1b[0m')
- def testOutputNoncolorizedText(self): - pywikibot.config.colorized_output = False - pywikibot.output(self.str1) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual( - newstderr.getvalue(), - 'text light purple text text ***\n') +@unittest.skipUnless(os.name == "posix", "requires Unix console") +class TestTerminalUnicodeUnix(UITestCase):
- str2 = ('normal text \03{lightpurple} light purple ' + - '\03{lightblue} light blue \03{default} light purple ' + - '\03{default} normal text') + """Terminal output tests for unix."""
- @unittest.expectedFailure - def testOutputColorCascade(self): - pywikibot.output(self.str2) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual( - newstderr.getvalue(), - 'normal text \x1b[35;1m light purple ' + - '\x1b[94m light blue \x1b[35;1m light purple ' + - '\x1b[0m normal text\n\x1b[0m') + def testOutputUnicodeText(self): + pywikibot.output(u"Заглавная_страница") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual( + newstderr.getvalue(), + self._encode(u'Заглавная_страница\n', 'utf-8'))
- def testOutputColorCascade_incorrect(self): - """ Test incorrect behavior of testOutputColorCascade. """ - pywikibot.output(self.str2) - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual( - newstderr.getvalue(), - 'normal text \x1b[95m light purple ' + - '\x1b[94m light blue \x1b[0m light purple ' + - '\x1b[0m normal text\n\x1b[0m') + def testInputUnicodeText(self): + newstdin.write(self._encode(u'Заглавная_страница\n', 'utf-8')) + newstdin.seek(0)
- @unittest.skipUnless(os.name == "posix", "requires Unix console") - class TestTerminalUnicodeUnix(UITestCase): + returned = pywikibot.input(u"Википедию? ")
- """Terminal output tests for unix.""" + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual( + newstderr.getvalue(), + self._encode(u'Википедию? ', 'utf-8'))
- def testOutputUnicodeText(self): - pywikibot.output(u"Заглавная_страница") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual( - newstderr.getvalue(), - self._encode(u'Заглавная_страница\n', 'utf-8')) + self.assertIsInstance(returned, unicode) + self.assertEqual(returned, u"Заглавная_страница")
- def testInputUnicodeText(self): - newstdin.write(self._encode(u'Заглавная_страница\n', 'utf-8')) - newstdin.seek(0)
- returned = pywikibot.input(u"Википедию? ") +@unittest.skipUnless(os.name == "posix", "requires Unix console") +class TestTransliterationUnix(UITestCase):
- self.assertEqual(newstdout.getvalue(), "") - self.assertEqual( - newstderr.getvalue(), - self._encode(u'Википедию? ', 'utf-8')) + """Terminal output transliteration tests."""
- self.assertIsInstance(returned, unicode) - self.assertEqual(returned, u"Заглавная_страница") + def testOutputTransliteratedUnicodeText(self): + pywikibot.ui.encoding = 'latin-1' + pywikibot.config.transliterate = True + pywikibot.output(u"abcd АБГД αβγδ あいうえお") + self.assertEqual(newstdout.getvalue(), "") + self.assertEqual( + newstderr.getvalue(), + 'abcd \x1b[93mA\x1b[0m\x1b[93mB\x1b[0m\x1b[93mG\x1b[0m' + '\x1b[93mD\x1b[0m \x1b[93ma\x1b[0m\x1b[93mb\x1b[0m\x1b[93mg' + '\x1b[0m\x1b[93md\x1b[0m \x1b[93ma\x1b[0m\x1b[93mi\x1b[0m' + '\x1b[93mu\x1b[0m\x1b[93me\x1b[0m\x1b[93mo\x1b[0m\n\x1b[0m')
- @unittest.skipUnless(os.name == "posix", "requires Unix console") - class TestTransliterationUnix(UITestCase):
- """Terminal output transliteration tests.""" +@unittest.skipUnless(os.name == "nt", "requires Windows console") +class WindowsTerminalTestCase(UITestCase):
- def testOutputTransliteratedUnicodeText(self): - pywikibot.ui.encoding = 'latin-1' - pywikibot.config.transliterate = True - pywikibot.output(u"abcd АБГД αβγδ あいうえお") - self.assertEqual(newstdout.getvalue(), "") - self.assertEqual( - newstderr.getvalue(), - 'abcd \x1b[93mA\x1b[0m\x1b[93mB\x1b[0m\x1b[93mG\x1b[0m' - '\x1b[93mD\x1b[0m \x1b[93ma\x1b[0m\x1b[93mb\x1b[0m\x1b[93mg' - '\x1b[0m\x1b[93md\x1b[0m \x1b[93ma\x1b[0m\x1b[93mi\x1b[0m' - '\x1b[93mu\x1b[0m\x1b[93me\x1b[0m\x1b[93mo\x1b[0m\n\x1b[0m') + """MS Windows terminal tests."""
- @unittest.skipUnless(os.name == "nt", "requires Windows console") - class WindowsTerminalTestCase(UITestCase): + @classmethod + def setUpClass(cls): + if os.name != 'nt': + raise unittest.SkipTest('requires Windows console') + super(WindowsTerminalTestCase, cls).setUpClass()
- """MS Windows terminal tests.""" + @classmethod + def setUpProcess(cls, command): + import pywinauto + import subprocess + si = subprocess.STARTUPINFO() + si.dwFlags = subprocess.STARTF_USESTDHANDLES + cls._process = subprocess.Popen(command, + creationflags=subprocess.CREATE_NEW_CONSOLE)
- @classmethod - def setUpClass(cls): - if os.name != 'nt': - raise unittest.SkipTest('requires Windows console') - super(WindowsTerminalTestCase, cls).setUpClass() + cls._app = pywinauto.application.Application() + cls._app.connect_(process=cls._process.pid)
- @classmethod - def setUpProcess(cls, command): - import pywinauto - import subprocess - si = subprocess.STARTUPINFO() - si.dwFlags = subprocess.STARTF_USESTDHANDLES - cls._process = subprocess.Popen(command, - creationflags=subprocess.CREATE_NEW_CONSOLE) + # set truetype font (Lucida Console, hopefully) + cls._app.window_().TypeKeys("% {UP}{ENTER}^L{HOME}L{ENTER}", with_spaces=True)
- cls._app = pywinauto.application.Application() - cls._app.connect_(process=cls._process.pid) + @classmethod + def tearDownProcess(cls): + cls._process.kill()
- # set truetype font (Lucida Console, hopefully) - cls._app.window_().TypeKeys("% {UP}{ENTER}^L{HOME}L{ENTER}", with_spaces=True) + def setUp(self): + super(WindowsTerminalTestCase, self).setUp() + self.setclip(u'')
- @classmethod - def tearDownProcess(cls): - cls._process.kill() + def waitForWindow(self): + while not self._app.window_().IsEnabled(): + time.sleep(0.01)
- def setUp(self): - super(WindowsTerminalTestCase, self).setUp() - self.setclip(u'') + def getstdouterr(self): + sentinel = u'~~~~SENTINEL~~~~cedcfc9f-7eed-44e2-a176-d8c73136c185' + # select all and copy to clipboard + self._app.window_().SetFocus() + self.waitForWindow() + self._app.window_().TypeKeys('% {UP}{UP}{UP}{RIGHT}{DOWN}{DOWN}{DOWN}{ENTER}{ENTER}', with_spaces=True)
- def waitForWindow(self): - while not self._app.window_().IsEnabled(): - time.sleep(0.01) + while True: + data = self.getclip() + if data != sentinel: + return data + time.sleep(0.01)
- def getstdouterr(self): - sentinel = u'~~~~SENTINEL~~~~cedcfc9f-7eed-44e2-a176-d8c73136c185' - # select all and copy to clipboard - self._app.window_().SetFocus() - self.waitForWindow() - self._app.window_().TypeKeys('% {UP}{UP}{UP}{RIGHT}{DOWN}{DOWN}{DOWN}{ENTER}{ENTER}', with_spaces=True) + def setclip(self, text): + import win32clipboard
- while True: - data = self.getclip() - if data != sentinel: - return data - time.sleep(0.01) + win32clipboard.OpenClipboard() + win32clipboard.SetClipboardData(win32clipboard.CF_UNICODETEXT, unicode(text)) + win32clipboard.CloseClipboard()
- def setclip(self, text): - import win32clipboard + def getclip(self): + import win32clipboard
- win32clipboard.OpenClipboard() - win32clipboard.SetClipboardData(win32clipboard.CF_UNICODETEXT, unicode(text)) - win32clipboard.CloseClipboard() + win32clipboard.OpenClipboard() + data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT) + win32clipboard.CloseClipboard() + data = data.split(u"\x00")[0] + data = data.replace(u"\r\n", u"\n") + return data
- def getclip(self): - import win32clipboard + def sendstdin(self, text): + self.setclip(text.replace(u"\n", u"\r\n")) + self._app.window_().SetFocus() + self.waitForWindow() + self._app.window_().TypeKeys('% {UP}{UP}{UP}{RIGHT}{DOWN}{DOWN}{ENTER}', with_spaces=True)
- win32clipboard.OpenClipboard() - data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT) - win32clipboard.CloseClipboard() - data = data.split(u"\x00")[0] - data = data.replace(u"\r\n", u"\n") - return data
- def sendstdin(self, text): - self.setclip(text.replace(u"\n", u"\r\n")) - self._app.window_().SetFocus() - self.waitForWindow() - self._app.window_().TypeKeys('% {UP}{UP}{UP}{RIGHT}{DOWN}{DOWN}{ENTER}', with_spaces=True) +class TestWindowsTerminalUnicode(WindowsTerminalTestCase):
- class TestWindowsTerminalUnicode(WindowsTerminalTestCase): + """MS Windows terminal unicode tests."""
- """MS Windows terminal unicode tests.""" + @classmethod + def setUpClass(cls): + super(TestWindowsTerminalUnicode, cls).setUpClass() + import inspect + fn = inspect.getfile(inspect.currentframe()) + cls.setUpProcess(["python", "pwb.py", fn, "--run-as-slave-interpreter"])
- @classmethod - def setUpClass(cls): - super(TestWindowsTerminalUnicode, cls).setUpClass() - import inspect - fn = inspect.getfile(inspect.currentframe()) - cls.setUpProcess(["python", "pwb.py", fn, "--run-as-slave-interpreter"]) + _manager.connect() + cls.pywikibot = _manager.pywikibot()
- _manager.connect() - cls.pywikibot = _manager.pywikibot() + @classmethod + def tearDownClass(cls): + del cls.pywikibot + cls.tearDownProcess()
- @classmethod - def tearDownClass(cls): - del cls.pywikibot - cls.tearDownProcess() + def setUp(self): + super(TestWindowsTerminalUnicode, self).setUp()
- def setUp(self): - super(TestWindowsTerminalUnicode, self).setUp() + self.pywikibot.set_config('colorized_output', True) + self.pywikibot.set_config('transliterate', False) + self.pywikibot.set_config('console_encoding', 'utf-8') + self.pywikibot.set_ui('transliteration_target', None) + self.pywikibot.set_ui('encoding', 'utf-8')
- self.pywikibot.set_config('colorized_output', True) - self.pywikibot.set_config('transliterate', False) - self.pywikibot.set_config('console_encoding', 'utf-8') - self.pywikibot.set_ui('transliteration_target', None) - self.pywikibot.set_ui('encoding', 'utf-8') + self.pywikibot.cls()
- self.pywikibot.cls() + def testOutputUnicodeText_no_transliterate(self): + self.pywikibot.output(u"Заглавная_страница") + self.assertEqual(self.getstdouterr(), u"Заглавная_страница\n")
- def testOutputUnicodeText_no_transliterate(self): - self.pywikibot.output(u"Заглавная_страница") - self.assertEqual(self.getstdouterr(), u"Заглавная_страница\n") + def testOutputUnicodeText_transliterate(self): + self.pywikibot.set_config('transliterate', True) + self.pywikibot.set_ui('transliteration_target', 'latin-1') + self.pywikibot.output(u"Заглавная_страница") + self.assertEqual(self.getstdouterr(), "Zaglavnaya_stranica\n")
- def testOutputUnicodeText_transliterate(self): - self.pywikibot.set_config('transliterate', True) - self.pywikibot.set_ui('transliteration_target', 'latin-1') - self.pywikibot.output(u"Заглавная_страница") - self.assertEqual(self.getstdouterr(), "Zaglavnaya_stranica\n") + def testInputUnicodeText(self): + self.pywikibot.set_config('transliterate', True)
- def testInputUnicodeText(self): - self.pywikibot.set_config('transliterate', True) + self.pywikibot.request_input(u"Википедию? ") + self.assertEqual(self.getstdouterr(), u"Википедию?") + self.sendstdin(u"Заглавная_страница\n") + returned = self.pywikibot.get_input()
- self.pywikibot.request_input(u"Википедию? ") - self.assertEqual(self.getstdouterr(), u"Википедию?") - self.sendstdin(u"Заглавная_страница\n") - returned = self.pywikibot.get_input() + self.assertEqual(returned, u"Заглавная_страница")
- self.assertEqual(returned, u"Заглавная_страница")
- class TestWindowsTerminalUnicodeArguments(WindowsTerminalTestCase): +class TestWindowsTerminalUnicodeArguments(WindowsTerminalTestCase):
- """MS Windows terminal unicode argument tests.""" + """MS Windows terminal unicode argument tests."""
- @classmethod - def setUpClass(cls): - super(TestWindowsTerminalUnicodeArguments, cls).setUpClass() - cls.setUpProcess(["cmd", "/k", "echo off"]) + @classmethod + def setUpClass(cls): + super(TestWindowsTerminalUnicodeArguments, cls).setUpClass() + cls.setUpProcess(["cmd", "/k", "echo off"])
- @classmethod - def tearDownClass(cls): - cls.tearDownProcess() - pass + @classmethod + def tearDownClass(cls): + cls.tearDownProcess() + pass
- def testOutputUnicodeText_no_transliterate(self): - self.sendstdin(u"""python -c "import os, pywikibot; os.system('cls'); pywikibot.output(u'\n'.join(pywikibot.handleArgs()))" Alpha Bετα Гамма دلتا\n""") - while(True): - lines = self.getstdouterr().split("\n") - if len(lines) >= 4 and lines[0] == "Alpha": - break - time.sleep(1) + def testOutputUnicodeText_no_transliterate(self): + self.sendstdin(u"""python -c "import os, pywikibot; os.system('cls'); pywikibot.output(u'\n'.join(pywikibot.handleArgs()))" Alpha Bετα Гамма دلتا\n""") + while(True): + lines = self.getstdouterr().split("\n") + if len(lines) >= 4 and lines[0] == "Alpha": + break + time.sleep(1)
- # empty line is the new command line - self.assertEqual(lines, [u"Alpha", u"Bετα", u"Гамма", u"دلتا", u""]) + # empty line is the new command line + self.assertEqual(lines, [u"Alpha", u"Bετα", u"Гамма", u"دلتا", u""])
if __name__ == "__main__":
pywikibot-commits@lists.wikimedia.org