|
| 1 | +importio |
1 | 2 | importos |
2 | 3 | importre |
3 | 4 | importshlex |
4 | 5 | importsubprocess |
5 | 6 | importsys |
6 | 7 | importunittest |
7 | 8 | importwebbrowser |
| 9 | +fromfunctoolsimportpartial |
8 | 10 | fromtestimportsupport |
9 | 11 | fromtest.supportimportimport_helper |
10 | 12 | fromtest.supportimportis_apple_mobile |
@@ -301,6 +303,69 @@ def test_open_new_tab(self): |
301 | 303 | self._test('open_new_tab') |
302 | 304 |
|
303 | 305 |
|
| 306 | +classMockPopenPipe: |
| 307 | +def__init__(self,cmd,mode): |
| 308 | +self.cmd=cmd |
| 309 | +self.mode=mode |
| 310 | +self.pipe=io.StringIO() |
| 311 | +self._closed=False |
| 312 | + |
| 313 | +defwrite(self,buf): |
| 314 | +self.pipe.write(buf) |
| 315 | + |
| 316 | +defclose(self): |
| 317 | +self._closed=True |
| 318 | +returnNone |
| 319 | + |
| 320 | + |
| 321 | +@unittest.skipUnless(sys.platform=="darwin","macOS specific test") |
| 322 | +@requires_subprocess() |
| 323 | +classMacOSXOSAScriptTest(unittest.TestCase): |
| 324 | +defsetUp(self): |
| 325 | +support.patch(self,os,"popen",self.mock_popen) |
| 326 | +self.browser=webbrowser.MacOSXOSAScript("default") |
| 327 | + |
| 328 | +defmock_popen(self,cmd,mode): |
| 329 | +self.popen_pipe=MockPopenPipe(cmd,mode) |
| 330 | +returnself.popen_pipe |
| 331 | + |
| 332 | +deftest_default(self): |
| 333 | +browser=webbrowser.get() |
| 334 | +assertisinstance(browser,webbrowser.MacOSXOSAScript) |
| 335 | +self.assertEqual(browser.name,"default") |
| 336 | + |
| 337 | +deftest_default_open(self): |
| 338 | +url="https://python.org" |
| 339 | +self.browser.open(url) |
| 340 | +self.assertTrue(self.popen_pipe._closed) |
| 341 | +self.assertEqual(self.popen_pipe.cmd,"osascript") |
| 342 | +script=self.popen_pipe.pipe.getvalue() |
| 343 | +self.assertEqual(script.strip(),f'open location "{url}"') |
| 344 | + |
| 345 | +deftest_url_quote(self): |
| 346 | +self.browser.open('https://python.org/"quote"') |
| 347 | +script=self.popen_pipe.pipe.getvalue() |
| 348 | +self.assertEqual( |
| 349 | +script.strip(),'open location "https://python.org/%22quote%22"' |
| 350 | + ) |
| 351 | + |
| 352 | +deftest_default_browser_lookup(self): |
| 353 | +url="file:///tmp/some-file.html" |
| 354 | +self.browser.open(url) |
| 355 | +script=self.popen_pipe.pipe.getvalue() |
| 356 | +# doesn't actually test the browser lookup works, |
| 357 | +# just that the branch is taken |
| 358 | +self.assertIn("URLForApplicationToOpenURL",script) |
| 359 | +self.assertIn(f'open location "{url}"',script) |
| 360 | + |
| 361 | +deftest_explicit_browser(self): |
| 362 | +browser=webbrowser.MacOSXOSAScript("safari") |
| 363 | +browser.open("https://python.org") |
| 364 | +script=self.popen_pipe.pipe.getvalue() |
| 365 | +self.assertIn('tell application "safari"',script) |
| 366 | +self.assertIn('open location "https://python.org"',script) |
| 367 | + |
| 368 | + |
304 | 369 | classBrowserRegistrationTest(unittest.TestCase): |
305 | 370 |
|
306 | 371 | defsetUp(self): |
|