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 parse_xdg_user_dirs(data): """Parses xdg-user-dirs and returns a dict of keys and paths. The paths depend on the content of environ while calling this function. See http://www.freedesktop.org/wiki/Software/xdg-user-dirs/ Args: data (bytes) Can't fail (but might return garbage). """ assert isinstance(data, bytes) paths = {} for line in data.splitlines(): if line.startswith(b"#"): continue parts = line.split(b"=", 1) if len(parts) <= 1: continue key = parts[0] try: values = shlex.split(bytes2fsn(parts[1], "utf-8")) except ValueError: continue if len(values) != 1: continue paths[key] = os.path.normpath(expandvars(values[0])) return paths
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"%ä%"