Ejemplo n.º 1
0
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"%ä%"
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
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"
Ejemplo n.º 6
0
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]
Ejemplo n.º 7
0
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