summaryrefslogtreecommitdiff
path: root/Lib/test/test_webbrowser.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_webbrowser.py')
-rw-r--r--Lib/test/test_webbrowser.py192
1 files changed, 192 insertions, 0 deletions
diff --git a/Lib/test/test_webbrowser.py b/Lib/test/test_webbrowser.py
new file mode 100644
index 0000000000..34b9364a3f
--- /dev/null
+++ b/Lib/test/test_webbrowser.py
@@ -0,0 +1,192 @@
+import webbrowser
+import unittest
+import subprocess
+from unittest import mock
+from test import support
+
+
+URL = 'http://www.example.com'
+CMD_NAME = 'test'
+
+
+class PopenMock(mock.MagicMock):
+
+ def poll(self):
+ return 0
+
+ def wait(self, seconds=None):
+ return 0
+
+
+class CommandTestMixin:
+
+ def _test(self, meth, *, args=[URL], kw={}, options, arguments):
+ """Given a web browser instance method name along with arguments and
+ keywords for same (which defaults to the single argument URL), creates
+ a browser instance from the class pointed to by self.browser, calls the
+ indicated instance method with the indicated arguments, and compares
+ the resulting options and arguments passed to Popen by the browser
+ instance against the 'options' and 'args' lists. Options are compared
+ in a position independent fashion, and the arguments are compared in
+ sequence order to whatever is left over after removing the options.
+
+ """
+ popen = PopenMock()
+ support.patch(self, subprocess, 'Popen', popen)
+ browser = self.browser_class(name=CMD_NAME)
+ getattr(browser, meth)(*args, **kw)
+ popen_args = subprocess.Popen.call_args[0][0]
+ self.assertEqual(popen_args[0], CMD_NAME)
+ popen_args.pop(0)
+ for option in options:
+ self.assertIn(option, popen_args)
+ popen_args.pop(popen_args.index(option))
+ self.assertEqual(popen_args, arguments)
+
+
+class GenericBrowserCommandTest(CommandTestMixin, unittest.TestCase):
+
+ browser_class = webbrowser.GenericBrowser
+
+ def test_open(self):
+ self._test('open',
+ options=[],
+ arguments=[URL])
+
+
+class BackgroundBrowserCommandTest(CommandTestMixin, unittest.TestCase):
+
+ browser_class = webbrowser.BackgroundBrowser
+
+ def test_open(self):
+ self._test('open',
+ options=[],
+ arguments=[URL])
+
+
+class ChromeCommandTest(CommandTestMixin, unittest.TestCase):
+
+ browser_class = webbrowser.Chrome
+
+ def test_open(self):
+ self._test('open',
+ options=[],
+ arguments=[URL])
+
+ def test_open_with_autoraise_false(self):
+ self._test('open', kw=dict(autoraise=False),
+ options=[],
+ arguments=[URL])
+
+ def test_open_new(self):
+ self._test('open_new',
+ options=['--new-window'],
+ arguments=[URL])
+
+ def test_open_new_tab(self):
+ self._test('open_new_tab',
+ options=[],
+ arguments=[URL])
+
+
+class MozillaCommandTest(CommandTestMixin, unittest.TestCase):
+
+ browser_class = webbrowser.Mozilla
+
+ def test_open(self):
+ self._test('open',
+ options=['-raise', '-remote'],
+ arguments=['openURL({})'.format(URL)])
+
+ def test_open_with_autoraise_false(self):
+ self._test('open', kw=dict(autoraise=False),
+ options=['-noraise', '-remote'],
+ arguments=['openURL({})'.format(URL)])
+
+ def test_open_new(self):
+ self._test('open_new',
+ options=['-raise', '-remote'],
+ arguments=['openURL({},new-window)'.format(URL)])
+
+ def test_open_new_tab(self):
+ self._test('open_new_tab',
+ options=['-raise', '-remote'],
+ arguments=['openURL({},new-tab)'.format(URL)])
+
+
+class GaleonCommandTest(CommandTestMixin, unittest.TestCase):
+
+ browser_class = webbrowser.Galeon
+
+ def test_open(self):
+ self._test('open',
+ options=['-n'],
+ arguments=[URL])
+
+ def test_open_with_autoraise_false(self):
+ self._test('open', kw=dict(autoraise=False),
+ options=['-noraise', '-n'],
+ arguments=[URL])
+
+ def test_open_new(self):
+ self._test('open_new',
+ options=['-w'],
+ arguments=[URL])
+
+ def test_open_new_tab(self):
+ self._test('open_new_tab',
+ options=['-w'],
+ arguments=[URL])
+
+
+class OperaCommandTest(CommandTestMixin, unittest.TestCase):
+
+ browser_class = webbrowser.Opera
+
+ def test_open(self):
+ self._test('open',
+ options=['-remote'],
+ arguments=['openURL({})'.format(URL)])
+
+ def test_open_with_autoraise_false(self):
+ self._test('open', kw=dict(autoraise=False),
+ options=['-remote', '-noraise'],
+ arguments=['openURL({})'.format(URL)])
+
+ def test_open_new(self):
+ self._test('open_new',
+ options=['-remote'],
+ arguments=['openURL({},new-window)'.format(URL)])
+
+ def test_open_new(self):
+ self._test('open_new_tab',
+ options=['-remote'],
+ arguments=['openURL({},new-page)'.format(URL)])
+
+
+class ELinksCommandTest(CommandTestMixin, unittest.TestCase):
+
+ browser_class = webbrowser.Elinks
+
+ def test_open(self):
+ self._test('open', options=['-remote'],
+ arguments=['openURL({})'.format(URL)])
+
+ def test_open_with_autoraise_false(self):
+ self._test('open',
+ options=['-remote'],
+ arguments=['openURL({})'.format(URL)])
+
+ def test_open_new(self):
+ self._test('open_new',
+ options=['-remote'],
+ arguments=['openURL({},new-window)'.format(URL)])
+
+ def test_open_new_tab(self):
+ self._test('open_new_tab',
+ options=['-remote'],
+ arguments=['openURL({},new-tab)'.format(URL)])
+
+
+if __name__=='__main__':
+ unittest.main()