def test_expandvars(): with preserve_environ(): environ["foo"] = "bar" environ["nope b"] = "xxx" environ["f/oo"] = "bar" environ.pop("nope", "") assert expandvars("$foo") == "bar" assert expandvars("$nope b") == "$nope b" assert expandvars("/$foo/") == "/bar/" assert expandvars("$f/oo") == "$f/oo" assert expandvars("$nope") == "$nope" assert expandvars("$foo_") == "$foo_" assert expandvars("${f/oo}") == "bar" assert expandvars("${nope b}") == "xxx" assert expandvars("${nope}") == "${nope}" assert isinstance(expandvars("$foo"), fsnative) with preserve_environ(): if os.name == "nt": environ[u"ö"] = u"ä" environ.pop(u"ä", "") assert isinstance(expandvars("$ö"), fsnative) assert expandvars(u"$ö") == u"ä" assert expandvars(u"${ö}") == u"ä" assert expandvars(u"${ä}") == u"${ä}" assert expandvars(u"$ä") == u"$ä" assert expandvars(u"%ö") == u"%ö" assert expandvars(u"ö%") == u"ö%" assert expandvars(u"%ö%") == u"ä" assert expandvars(u"%ä%") == u"%ä%"
def init_test_environ(): """This needs to be called before any test can be run. Before exiting the process call exit_test_environ() to clean up any resources created. """ global _TEMP_DIR, _BUS_INFO, _VDISPLAY, _faulthandler_fobj # create a user dir in /tmp and set env vars _TEMP_DIR = tempfile.mkdtemp(prefix=fsnative(u"QL-TEST-")) # needed for dbus/dconf runtime_dir = tempfile.mkdtemp(prefix=fsnative(u"RUNTIME-"), dir=_TEMP_DIR) os.chmod(runtime_dir, 0o700) environ["XDG_RUNTIME_DIR"] = runtime_dir # force the old cache dir so that GStreamer can re-use the GstRegistry # cache file environ["XDG_CACHE_HOME"] = xdg_get_cache_home() # GStreamer will update the cache if the environment has changed # (in Gst.init()). Since it takes 0.5s here and doesn't add much, # disable it. If the registry cache is missing it will be created # despite this setting. environ["GST_REGISTRY_UPDATE"] = fsnative(u"no") # set HOME and remove all XDG vars that default to it if not set home_dir = tempfile.mkdtemp(prefix=fsnative(u"HOME-"), dir=_TEMP_DIR) environ["HOME"] = home_dir # set to new default environ.pop("XDG_DATA_HOME", None) if xvfbwrapper is not None: _VDISPLAY = xvfbwrapper.Xvfb() _VDISPLAY.start() _BUS_INFO = None if os.name != "nt" and "DBUS_SESSION_BUS_ADDRESS" in environ: _BUS_INFO = dbus_launch_user() environ.update(_BUS_INFO) quodlibet.init(no_translations=True, no_excepthook=True) quodlibet.app.name = "QL Tests" # to get around pytest silencing _faulthandler_fobj = os.fdopen(os.dup(sys.__stderr__.fileno()), "w") faulthandler.enable(_faulthandler_fobj) # try to make things the same in case a different locale is active. # LANG for gettext, setlocale for number formatting etc. # Note: setlocale has to be called after Gtk.init() try: if os.name != "nt": environ["LANG"] = locale.setlocale(locale.LC_ALL, "en_US.UTF-8") else: environ["LANG"] = "en_US.utf8" locale.setlocale(locale.LC_ALL, "english") except locale.Error: pass
def init_test_environ(): """This needs to be called before any test can be run. Before exiting the process call exit_test_environ() to clean up any resources created. """ global _TEMP_DIR, _BUS_INFO, _VDISPLAY # create a user dir in /tmp and set env vars _TEMP_DIR = tempfile.mkdtemp(prefix=fsnative(u"QL-TEST-")) # needed for dbus/dconf runtime_dir = tempfile.mkdtemp(prefix=fsnative(u"RUNTIME-"), dir=_TEMP_DIR) os.chmod(runtime_dir, 0o700) environ["XDG_RUNTIME_DIR"] = runtime_dir # force the old cache dir so that GStreamer can re-use the GstRegistry # cache file environ["XDG_CACHE_HOME"] = xdg_get_cache_home() # GStreamer will update the cache if the environment has changed # (in Gst.init()). Since it takes 0.5s here and doesn't add much, # disable it. If the registry cache is missing it will be created # despite this setting. environ["GST_REGISTRY_UPDATE"] = fsnative(u"no") # set HOME and remove all XDG vars that default to it if not set home_dir = tempfile.mkdtemp(prefix=fsnative(u"HOME-"), dir=_TEMP_DIR) environ["HOME"] = home_dir # set to new default environ.pop("XDG_DATA_HOME", None) if xvfbwrapper is not None: _VDISPLAY = xvfbwrapper.Xvfb() _VDISPLAY.start() _BUS_INFO = None if os.name != "nt" and sys.platform != "darwin": _BUS_INFO = dbus_launch_user() environ.update(_BUS_INFO) quodlibet.init(no_translations=True, no_excepthook=True) quodlibet.app.name = "QL Tests" # try to make things the same in case a different locale is active. # LANG for gettext, setlocale for number formatting etc. # Note: setlocale has to be called after Gtk.init() try: if os.name != "nt": environ["LANG"] = locale.setlocale(locale.LC_ALL, "en_US.UTF-8") else: environ["LANG"] = "en_US.utf8" locale.setlocale(locale.LC_ALL, "english") except locale.Error: pass
def test_environ_case(): if not environ_case_sensitive: with preserve_environ(): environ.pop("foo", None) environ["FoO"] = "bla" assert environ["foo"] == "bla" assert sorted(os.environ.keys()) == sorted(environ.keys()) else: with preserve_environ(): environ["foo"] = "1" environ["FOO"] = "2" assert environ["foo"] != environ["FOO"] assert sorted(os.environ.keys()) == sorted(environ.keys())
def test_expandvars_case(): if not environ_case_sensitive: with preserve_environ(): environ.pop("foo", None) environ["FOO"] = "bar" assert expandvars("$foo") == "bar" environ["FOo"] = "baz" assert expandvars("$fOO") == "baz" else: with preserve_environ(): environ.pop("foo", None) environ["FOO"] = "bar" assert expandvars("$foo") == "$foo"
def test_environ_case(): if not environ_case_sensitive: with preserve_environ(): environ.pop("foo", None) environ["FoO"] = "bla" assert environ["foo"] == "bla" for key in ["foo", "FoO"]: assert os.environ[key] == environ[key] else: with preserve_environ(): environ["foo"] = "1" environ["FOO"] = "2" assert environ["foo"] != environ["FOO"] for key in ["foo", "FOO"]: assert os.environ[key] == environ[key]
def test_getuserdir(): userdir = _get_userdir() assert isinstance(userdir, fsnative) with pytest.raises(TypeError): _get_userdir(notfsnative(u"foo")) if os.name == "nt": otherdir = _get_userdir(u"foo") assert otherdir == os.path.join(os.path.dirname(userdir), u"foo") else: user = os.path.basename(userdir) assert _get_userdir() == _get_userdir(user) with preserve_environ(): environ["HOME"] = "bla" assert _get_userdir() == "bla" with preserve_environ(): environ.pop("HOME", None) if os.name != "nt": assert _get_userdir() else: environ["USERPROFILE"] = "uprof" assert _get_userdir() == "uprof" with preserve_environ(): environ.pop("HOME", None) environ.pop("USERPROFILE", None) if os.name == "nt": environ["HOMEPATH"] = "hpath" environ["HOMEDRIVE"] = "C:\\" assert _get_userdir() == "C:\\hpath" assert _get_userdir(u"bla") == "C:\\bla" with preserve_environ(): environ.pop("HOME", None) environ.pop("USERPROFILE", None) environ.pop("HOMEPATH", None) if os.name == "nt": assert _get_userdir() is None