From ad615941a28e0a382c93bebc2852c1812ce12c07 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 8 Jul 2017 11:12:43 +0200 Subject: [PATCH] Replace OS X with macOS --- CHANGELOG.asciidoc | 18 +++++++++--------- CONTRIBUTING.asciidoc | 2 +- INSTALL.asciidoc | 6 +++--- doc/quickstart.asciidoc | 2 +- doc/userscripts.asciidoc | 2 +- pytest.ini | 6 +++--- qutebrowser/mainwindow/tabwidget.py | 2 +- qutebrowser/misc/ipc.py | 8 ++++---- qutebrowser/utils/standarddir.py | 2 +- qutebrowser/utils/utils.py | 2 +- scripts/dev/build_release.py | 12 ++++++------ tests/conftest.py | 4 ++-- tests/end2end/conftest.py | 2 +- tests/end2end/features/conftest.py | 2 +- tests/end2end/features/hints.feature | 2 +- tests/end2end/features/misc.feature | 2 +- tests/end2end/features/prompts.feature | 4 ++-- tests/end2end/features/yankpaste.feature | 2 +- tests/end2end/fixtures/testprocess.py | 2 +- tests/unit/misc/test_ipc.py | 14 +++++++------- tests/unit/utils/test_qtutils.py | 2 +- tests/unit/utils/test_standarddir.py | 4 ++-- tests/unit/utils/test_version.py | 10 +++++----- 23 files changed, 56 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index d8e21c629..897afabf7 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -220,7 +220,7 @@ Added - Open tabs are now auto-saved on each successful load and restored in case of a crash - `:jseval` now has a `--file` flag so you can pass a javascript file - `:session-save` now has a `--only-active-window` flag to only save the active window -- OS X builds are back, and built with QtWebEngine +- macOS builds are back, and built with QtWebEngine Changed ~~~~~~~ @@ -522,7 +522,7 @@ Fixed - Fix crash when pressing enter without a command - Adjust error message to point out QtWebEngine is unsupported with the OS X .app currently. -- Hide Harfbuzz warning with the OS X .app +- Hide Harfbuzz warning with the macOS .app v0.8.0 ------ @@ -885,7 +885,7 @@ Fixed - Fixed scrolling to the very left/right with `:scroll-perc`. - Using an external editor should now work correctly with some funny chars (U+2028/U+2029/BOM). -- Movements in caret mode now should work correctly on OS X and Windows. +- Movements in caret mode now should work correctly on macOS and Windows. - Fixed upgrade from earlier config versions. - Fixed crash when killing a running userscript. - Fixed characters being passed through when shifted with @@ -960,7 +960,7 @@ Changed - The completion widget doesn't show a border anymore. - The tabbar doesn't display ugly arrows anymore if there isn't enough space for all tabs. -- Some insignificant Qt warnings which were printed on OS X are now hidden. +- Some insignificant Qt warnings which were printed on macOS are now hidden. - Better support for Qt 5.5 and Python 3.5. Fixed @@ -1071,7 +1071,7 @@ Fixed - Fixed AssertionError when closing many windows quickly. - Various fixes for deprecated key bindings and auto-migrations. - Workaround for qutebrowser not starting when there are NUL-bytes in the history (because of a currently unknown bug). -- Fixed handling of keybindings containing Ctrl/Meta on OS X. +- Fixed handling of keybindings containing Ctrl/Meta on macOS. - Fixed crash when downloading a URL without filename (e.g. magnet links) via "Save as...". - Fixed exception when starting qutebrowser with `:set` as argument. - Fixed horrible completion performance when the `shrink` option was set. @@ -1169,7 +1169,7 @@ Changed - Add a `:search` command in addition to `/foo` so it's more visible and can be used from scripts. - Various improvements to documentation, logging, and the crash reporter. - Expand `~` to the users home directory with `:run-userscript`. -- Improve the userscript runner on Linux/OS X by using `QSocketNotifier`. +- Improve the userscript runner on Linux/macOS by using `QSocketNotifier`. - Add luakit-like `gt`/`gT` keybindings to cycle through tabs. - Show default value for config values in the completion. - Clone tab icon, tab text and zoom level when cloning tabs. @@ -1189,7 +1189,7 @@ Changed * `init_venv.py` and `run_checks.py` have been replaced by http://tox.readthedocs.org/[tox]. Install tox and run `tox -e mkvenv` instead. * The tests now use http://pytest.org/[pytest] * Many new tests added - * Mac Mini buildbot to run the tests on OS X. + * Mac Mini buildbot to run the tests on macOS. * Coverage recording via http://nedbatchelder.com/code/coverage/[coverage.py]. * New `--pdb-postmortem argument` to drop into the pdb debugger on exceptions. * Use https://github.com/ionelmc/python-hunter[hunter] for line tracing instead of a selfmade solution. @@ -1325,7 +1325,7 @@ Fixed * Fix rare exception when a key is pressed shortly after opening a window * Fix exception with certain invalid URLs like `http:foo:0` -* Work around Qt bug which renders checkboxes on OS X unusable +* Work around Qt bug which renders checkboxes on macOS unusable * Fix exception when a local files can't be read in `:adblock-update` * Hide 2 more Qt warnings. * Add `!important` to hint CSS so websites don't override the hint look @@ -1361,7 +1361,7 @@ Changes * Set zoom to default instead of 100% with `:zoom`/`=`. * Adjust page zoom if default zoom changed. * Force tabs to be focused on `:undo`. -* Replace manual installation instructions on OS X with homebrew/macports. +* Replace manual installation instructions on macOS with homebrew/macports. * Allow min-/maximizing of print preview on Windows. * Various documentation improvements. * Various other small improvements and cleanups. diff --git a/CONTRIBUTING.asciidoc b/CONTRIBUTING.asciidoc index 2ac99804e..b7a13eaf8 100644 --- a/CONTRIBUTING.asciidoc +++ b/CONTRIBUTING.asciidoc @@ -700,7 +700,7 @@ as closed. * Linux: Run `python3 scripts/dev/build_release.py --upload v0.$x.$y` * Windows: Run `C:\Python36-32\python scripts\dev\build_release.py --asciidoc C:\Python27\python C:\asciidoc-8.6.9\asciidoc.py --upload v0.X.Y` (replace X/Y by hand) -* OS X: Run `python3 scripts/dev/build_release.py --upload v0.X.Y` (replace X/Y by hand) +* macOS: Run `python3 scripts/dev/build_release.py --upload v0.X.Y` (replace X/Y by hand) * On server: Run `python3 scripts/dev/download_release.py v0.X.Y` (replace X/Y by hand) * Update `qutebrowser-git` PKGBUILD if dependencies/install changed * Announce to qutebrowser and qutebrowser-announce mailinglist diff --git a/INSTALL.asciidoc b/INSTALL.asciidoc index 425bf738c..7f197d408 100644 --- a/INSTALL.asciidoc +++ b/INSTALL.asciidoc @@ -277,13 +277,13 @@ $ pip install tox Then <>. -On OS X -------- +On macOS +-------- Prebuilt binary ~~~~~~~~~~~~~~~ -The easiest way to install qutebrowser on OS X is to use the prebuilt `.app` +The easiest way to install qutebrowser on macOS is to use the prebuilt `.app` files from the https://github.com/qutebrowser/qutebrowser/releases[release page]. diff --git a/doc/quickstart.asciidoc b/doc/quickstart.asciidoc index 7d597ed2e..4881cca62 100644 --- a/doc/quickstart.asciidoc +++ b/doc/quickstart.asciidoc @@ -31,7 +31,7 @@ image:http://qutebrowser.org/img/cheatsheet-small.png["qutebrowser key binding c * Run `:adblock-update` to download adblock lists and activate adblocking. * If you just cloned the repository, you'll need to run `scripts/asciidoc2html.py` to generate the documentation. -* Go to the link:qute://settings[settings page] to set up qutebrowser the way you want it. (Currently not available with the QtWebEngine backend and on the OS X build - use the `:set` command instead) +* Go to the link:qute://settings[settings page] to set up qutebrowser the way you want it. (Currently not available with the QtWebEngine backend and on the macOS build - use the `:set` command instead) * Subscribe to https://lists.schokokeks.org/mailman/listinfo.cgi/qutebrowser[the mailinglist] or https://lists.schokokeks.org/mailman/listinfo.cgi/qutebrowser-announce[the announce-only mailinglist]. diff --git a/doc/userscripts.asciidoc b/doc/userscripts.asciidoc index b44a6b8ff..85811266d 100644 --- a/doc/userscripts.asciidoc +++ b/doc/userscripts.asciidoc @@ -60,7 +60,7 @@ Sending commands Normal qutebrowser commands can be written to `$QUTE_FIFO` and will be executed. -On Unix/OS X, this is a named pipe and commands written to it will get executed +On Unix/macOS, this is a named pipe and commands written to it will get executed immediately. On Windows, this is a regular file, and the commands in it will be executed as diff --git a/pytest.ini b/pytest.ini index ab437801b..ad1a56086 100644 --- a/pytest.ini +++ b/pytest.ini @@ -5,8 +5,8 @@ markers = posix: Tests which only can run on a POSIX OS. windows: Tests which only can run on Windows. linux: Tests which only can run on Linux. - osx: Tests which only can run on OS X. - not_osx: Tests which can not run on OS X. + mac: Tests which only can run on macOS. + not_mac: Tests which can not run on macOS. not_frozen: Tests which can't be run if sys.frozen is True. no_xvfb: Tests which can't be run with Xvfb. frozen: Tests which can only be run if sys.frozen is True. @@ -20,7 +20,7 @@ markers = qtwebkit_ng_xfail: Tests failing with QtWebKit-NG qtwebkit_ng_skip: Tests skipped with QtWebKit-NG qtwebengine_flaky: Tests which are flaky (and currently skipped) with QtWebEngine - qtwebengine_osx_xfail: Tests which fail on OS X with QtWebEngine + qtwebengine_mac_xfail: Tests which fail on macOS with QtWebEngine js_prompt: Tests needing to display a javascript prompt this: Used to mark tests during development no_invalid_lines: Don't fail on unparseable lines in end2end tests diff --git a/qutebrowser/mainwindow/tabwidget.py b/qutebrowser/mainwindow/tabwidget.py index eeee223aa..86fefaeb3 100644 --- a/qutebrowser/mainwindow/tabwidget.py +++ b/qutebrowser/mainwindow/tabwidget.py @@ -499,7 +499,7 @@ class TabBar(QTabBar): width = int(confwidth) size = QSize(max(minimum_size.width(), width), height) elif self.count() == 0: - # This happens on startup on OS X. + # This happens on startup on macOS. # We return it directly rather than setting `size' because we don't # want to ensure it's valid in this special case. return QSize() diff --git a/qutebrowser/misc/ipc.py b/qutebrowser/misc/ipc.py index eb9aa4a3b..de22162be 100644 --- a/qutebrowser/misc/ipc.py +++ b/qutebrowser/misc/ipc.py @@ -434,12 +434,12 @@ def _has_legacy_server(name): log.ipc.debug("Socket error: {} ({})".format( socket.errorString(), err)) - os_x_fail = (sys.platform == 'darwin' and - socket.errorString() == 'QLocalSocket::connectToServer: ' - 'Unknown error 38') + mac_fail = (sys.platform == 'darwin' and + socket.errorString() == 'QLocalSocket::connectToServer: ' + 'Unknown error 38') if err not in [QLocalSocket.ServerNotFoundError, - QLocalSocket.ConnectionRefusedError] and not os_x_fail: + QLocalSocket.ConnectionRefusedError] and not mac_fail: return True socket.disconnectFromServer() diff --git a/qutebrowser/utils/standarddir.py b/qutebrowser/utils/standarddir.py index a1cedddd0..28d84764f 100644 --- a/qutebrowser/utils/standarddir.py +++ b/qutebrowser/utils/standarddir.py @@ -107,7 +107,7 @@ def runtime(): if sys.platform.startswith('linux'): typ = QStandardPaths.RuntimeLocation else: # pragma: no cover - # RuntimeLocation is a weird path on OS X and Windows. + # RuntimeLocation is a weird path on macOS and Windows. typ = QStandardPaths.TempLocation overridden, path = _from_args(typ, _args) diff --git a/qutebrowser/utils/utils.py b/qutebrowser/utils/utils.py index 0b527637e..833744d9b 100644 --- a/qutebrowser/utils/utils.py +++ b/qutebrowser/utils/utils.py @@ -373,7 +373,7 @@ def keyevent_to_string(e): None if only modifiers are pressed.. """ if sys.platform == 'darwin': - # Qt swaps Ctrl/Meta on OS X, so we switch it back here so the user can + # Qt swaps Ctrl/Meta on macOS, so we switch it back here so the user can # use it in the config as expected. See: # https://github.com/qutebrowser/qutebrowser/issues/110 # http://doc.qt.io/qt-5.4/osx-issues.html#special-keys diff --git a/scripts/dev/build_release.py b/scripts/dev/build_release.py index bb5733cad..d5c03ad02 100755 --- a/scripts/dev/build_release.py +++ b/scripts/dev/build_release.py @@ -92,7 +92,7 @@ def smoke_test(executable): '--temp-basedir', 'about:blank', ':later 500 quit']) -def patch_osx_app(): +def patch_mac_app(): """Patch .app to copy missing data and link some libs. See https://github.com/pyinstaller/pyinstaller/issues/2276 @@ -125,8 +125,8 @@ def patch_osx_app(): os.path.join(dest, lib)) -def build_osx(): - """Build OS X .dmg/.app.""" +def build_mac(): + """Build macOS .dmg/.app.""" utils.print_title("Cleaning up...") for f in ['wc.dmg', 'template.dmg']: try: @@ -141,7 +141,7 @@ def build_osx(): utils.print_title("Building .app via pyinstaller") call_tox('pyinstaller', '-r') utils.print_title("Patching .app") - patch_osx_app() + patch_mac_app() utils.print_title("Building .dmg") subprocess.check_call(['make', '-f', 'scripts/dev/Makefile-dmg']) @@ -163,7 +163,7 @@ def build_osx(): except PermissionError as e: print("Failed to remove tempdir: {}".format(e)) - return [(dmg_name, 'application/x-apple-diskimage', 'OS X .dmg')] + return [(dmg_name, 'application/x-apple-diskimage', 'macOS .dmg')] def patch_windows(out_dir): @@ -366,7 +366,7 @@ def main(): artifacts = build_windows() elif sys.platform == 'darwin': run_asciidoc2html(args) - artifacts = build_osx() + artifacts = build_mac() else: artifacts = build_sdist() upload_to_pypi = True diff --git a/tests/conftest.py b/tests/conftest.py index 6ac9515ce..f2d6da8ff 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -50,8 +50,8 @@ def _apply_platform_markers(config, item): ('posix', os.name != 'posix', "Requires a POSIX os"), ('windows', os.name != 'nt', "Requires Windows"), ('linux', not sys.platform.startswith('linux'), "Requires Linux"), - ('osx', sys.platform != 'darwin', "Requires OS X"), - ('not_osx', sys.platform == 'darwin', "Skipped on OS X"), + ('mac', sys.platform != 'darwin', "Requires macOS"), + ('not_mac', sys.platform == 'darwin', "Skipped on macOS"), ('not_frozen', getattr(sys, 'frozen', False), "Can't be run when frozen"), ('frozen', not getattr(sys, 'frozen', False), diff --git a/tests/end2end/conftest.py b/tests/end2end/conftest.py index 8dac6a41d..75c6845f4 100644 --- a/tests/end2end/conftest.py +++ b/tests/end2end/conftest.py @@ -149,7 +149,7 @@ def pytest_collection_modifyitems(config, items): not config.webengine and qtutils.is_qtwebkit_ng()), ('qtwebengine_flaky', 'Flaky with QtWebEngine', pytest.mark.skipif, config.webengine), - ('qtwebengine_osx_xfail', 'Fails on OS X with QtWebEngine', + ('qtwebengine_mac_xfail', 'Fails on macOS with QtWebEngine', pytest.mark.xfail, config.webengine and sys.platform == 'darwin'), ] diff --git a/tests/end2end/features/conftest.py b/tests/end2end/features/conftest.py index 3b4652efc..b67f69418 100644 --- a/tests/end2end/features/conftest.py +++ b/tests/end2end/features/conftest.py @@ -61,7 +61,7 @@ def pytest_runtest_makereport(item, call): if (not hasattr(report.longrepr, 'addsection') or not hasattr(report, 'scenario')): - # In some conditions (on OS X and Windows it seems), report.longrepr is + # In some conditions (on macOS and Windows it seems), report.longrepr is # actually a tuple. This is handled similarily in pytest-qt too. # # Since this hook is invoked for any test, we also need to skip it for diff --git a/tests/end2end/features/hints.feature b/tests/end2end/features/hints.feature index a5e073d8a..4fbd17720 100644 --- a/tests/end2end/features/hints.feature +++ b/tests/end2end/features/hints.feature @@ -243,7 +243,7 @@ Feature: Using hints ### hints -> auto-follow-timeout - @not_osx + @not_mac Scenario: Ignoring key presses after auto-following hints When I set hints -> auto-follow-timeout to 1000 And I set hints -> mode to number diff --git a/tests/end2end/features/misc.feature b/tests/end2end/features/misc.feature index 279df7808..ca4fe5a3d 100644 --- a/tests/end2end/features/misc.feature +++ b/tests/end2end/features/misc.feature @@ -392,7 +392,7 @@ Feature: Various utility commands. And I run :debug-pyeval QApplication.instance().activeModalWidget().close() Then no crash should happen - # On Windows/OS X, we get a "QPrintDialog: Cannot be used on non-native + # On Windows/macOS, we get a "QPrintDialog: Cannot be used on non-native # printers" qWarning. # # Disabled because it causes weird segfaults and QPainter warnings in Qt... diff --git a/tests/end2end/features/prompts.feature b/tests/end2end/features/prompts.feature index 9b5d7aae5..e733d69b1 100644 --- a/tests/end2end/features/prompts.feature +++ b/tests/end2end/features/prompts.feature @@ -219,14 +219,14 @@ Feature: Prompts And I run :click-element id button Then the javascript message "geolocation permission denied" should be logged - @ci @not_osx @qt!=5.8 + @ci @not_mac @qt!=5.8 Scenario: Always accepting geolocation When I set content -> geolocation to true And I open data/prompt/geolocation.html in a new tab And I run :click-element id button Then the javascript message "geolocation permission denied" should not be logged - @ci @not_osx @qt!=5.8 + @ci @not_mac @qt!=5.8 Scenario: geolocation with ask -> true When I set content -> geolocation to ask And I open data/prompt/geolocation.html in a new tab diff --git a/tests/end2end/features/yankpaste.feature b/tests/end2end/features/yankpaste.feature index 9cf917c2c..ba5b56ca7 100644 --- a/tests/end2end/features/yankpaste.feature +++ b/tests/end2end/features/yankpaste.feature @@ -291,7 +291,7 @@ Feature: Yanking and pasting. # Compare Then the javascript message "textarea contents: onHello worlde two three four" should be logged - @qtwebengine_osx_xfail + @qtwebengine_mac_xfail Scenario: Inserting text into a text field with undo When I set general -> log-javascript-console to info And I open data/paste_primary.html diff --git a/tests/end2end/fixtures/testprocess.py b/tests/end2end/fixtures/testprocess.py index f94ec4e22..c0fc372cc 100644 --- a/tests/end2end/fixtures/testprocess.py +++ b/tests/end2end/fixtures/testprocess.py @@ -103,7 +103,7 @@ def pytest_runtest_makereport(item, call): httpbin_log = getattr(item, '_httpbin_log', None) if not hasattr(report.longrepr, 'addsection'): - # In some conditions (on OS X and Windows it seems), report.longrepr is + # In some conditions (on macOS and Windows it seems), report.longrepr is # actually a tuple. This is handled similarily in pytest-qt too. return diff --git a/tests/unit/misc/test_ipc.py b/tests/unit/misc/test_ipc.py index e364d6cc6..5249a9d55 100644 --- a/tests/unit/misc/test_ipc.py +++ b/tests/unit/misc/test_ipc.py @@ -207,9 +207,9 @@ class TestSocketName: socketname = ipc._get_socketname(basedir) assert socketname == expected - @pytest.mark.osx + @pytest.mark.mac @pytest.mark.parametrize('basedir, expected', POSIX_TESTS) - def test_os_x(self, basedir, expected): + def test_mac(self, basedir, expected): socketname = ipc._get_socketname(basedir) parts = socketname.split(os.sep) assert parts[-2] == 'qute_test' @@ -223,7 +223,7 @@ class TestSocketName: assert socketname == expected_path def test_other_unix(self): - """Fake test for POSIX systems which aren't Linux/OS X. + """Fake test for POSIX systems which aren't Linux/macOS. We probably would adjust the code first to make it work on that platform. @@ -512,7 +512,7 @@ class TestSendToRunningInstance: assert msg == "No existing instance present (error 2)" @pytest.mark.parametrize('has_cwd', [True, False]) - @pytest.mark.linux(reason="Causes random trouble on Windows and OS X") + @pytest.mark.linux(reason="Causes random trouble on Windows and macOS") def test_normal(self, qtbot, tmpdir, ipc_server, mocker, has_cwd): ipc_server.listen() @@ -562,7 +562,7 @@ class TestSendToRunningInstance: ipc.send_to_running_instance('qute-test', [], None, socket=socket) -@pytest.mark.not_osx(reason="https://github.com/qutebrowser/qutebrowser/" +@pytest.mark.not_mac(reason="https://github.com/qutebrowser/qutebrowser/" "issues/975") def test_timeout(qtbot, caplog, qlocalsocket, ipc_server): ipc_server._timer.setInterval(100) @@ -637,7 +637,7 @@ class TestSendOrListen: yield legacy_server legacy_server.shutdown() - @pytest.mark.linux(reason="Flaky on Windows and OS X") + @pytest.mark.linux(reason="Flaky on Windows and macOS") def test_normal_connection(self, caplog, qtbot, args): ret_server = ipc.send_or_listen(args) assert isinstance(ret_server, ipc.IPCServer) @@ -812,7 +812,7 @@ class TestSendOrListen: @pytest.mark.windows -@pytest.mark.osx +@pytest.mark.mac def test_long_username(monkeypatch): """See https://github.com/qutebrowser/qutebrowser/issues/888.""" username = 'alexandercogneau' diff --git a/tests/unit/utils/test_qtutils.py b/tests/unit/utils/test_qtutils.py index 99e1091b4..ff8b81c9a 100644 --- a/tests/unit/utils/test_qtutils.py +++ b/tests/unit/utils/test_qtutils.py @@ -550,7 +550,7 @@ if test_file is not None and sys.platform != 'darwin': # here which defines unittest TestCases to run the python tests over # PyQIODevice. - # Those are not run on OS X because that seems to cause a hang sometimes. + # Those are not run on macOS because that seems to cause a hang sometimes. @pytest.fixture(scope='session', autouse=True) def clean_up_python_testfile(): diff --git a/tests/unit/utils/test_standarddir.py b/tests/unit/utils/test_standarddir.py index c21ff7416..ea3368862 100644 --- a/tests/unit/utils/test_standarddir.py +++ b/tests/unit/utils/test_standarddir.py @@ -167,8 +167,8 @@ class TestStandardDir: (standarddir.cache, 2, ['Caches', 'qute_test']), (standarddir.download, 1, ['Downloads']), ]) - @pytest.mark.osx - def test_os_x(self, func, elems, expected): + @pytest.mark.mac + def test_mac(self, func, elems, expected): assert func().split(os.sep)[-elems:] == expected diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index 6717cf75b..4c9baf6eb 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -668,8 +668,8 @@ class TestOsInfo: (('', ('', '', ''), ''), ''), (('x', ('1', '2', '3'), 'y'), 'x, 1.2.3, y'), ]) - def test_os_x_fake(self, monkeypatch, mac_ver, mac_ver_str): - """Test with a fake OS X. + def test_mac_fake(self, monkeypatch, mac_ver, mac_ver_str): + """Test with a fake macOS. Args: mac_ver: The tuple to set platform.mac_ver() to. @@ -698,9 +698,9 @@ class TestOsInfo: """Make sure there are no exceptions with a real Windows.""" version._os_info() - @pytest.mark.osx - def test_os_x_real(self): - """Make sure there are no exceptions with a real OS X.""" + @pytest.mark.mac + def test_mac_real(self): + """Make sure there are no exceptions with a real macOS.""" version._os_info()