Example #1
0
 def test_colon_handling_windows(self):
     assert filesystem.sanitize_filename("test:aftertest") == "test-aftertest"
     assert filesystem.sanitize_filename(":") == "-"
     assert filesystem.sanitize_filename("test:") == "test-"
     assert filesystem.sanitize_filename("test: ") == "test-"
     # They should act the same
     assert filesystem.sanitize_filename("test:aftertest") == filesystem.sanitize_foldername("test:aftertest")
Example #2
0
 def test_win_devices_not_win(self):
     # Linux and Darwin are the same for this
     assert filesystem.sanitize_filename(None) is None
     assert filesystem.sanitize_filename("aux.txt") == "aux.txt"
     assert filesystem.sanitize_filename("txt.aux") == "txt.aux"
     assert filesystem.sanitize_filename("$mft") == "$mft"
     assert filesystem.sanitize_filename("a$mft") == "a$mft"
Example #3
0
 def test_legal_chars_linux(self):
     # Illegal on Windows but not on Linux, unless sanitize_safe is active.
     # Don't bother with '/' which is illegal in filenames on all platforms.
     char_ill = filesystem.CH_ILLEGAL_WIN.replace("/", "")
     assert filesystem.sanitize_filename("test" + char_ill + "aftertest") == ("test" + char_ill + "aftertest")
     for char in char_ill:
         # Try at start, middle, and end of a filename.
         assert filesystem.sanitize_filename("test" + char * 2 + "aftertest") == ("test" + char * 2 + "aftertest")
         assert filesystem.sanitize_filename("test" + char * 2) == ("test" + char * 2).strip()
         assert filesystem.sanitize_filename(char * 2 + "test") == (char * 2 + "test").strip()
Example #4
0
    def test_filename_too_long(self):

        # Note: some filesystem can handle up to 255 UTF chars (which is more than 255 bytes) in the filename,
        # but we stay on the safe side: max DEF_FILE_MAX bytes

        # PART 1: Base cases: Nothing should happen:

        # normal filename
        name = "a" * 200 + ".ext"
        sanitizedname = filesystem.sanitize_filename(name)
        assert sanitizedname == name

        # Unicode / UTF8 is OK ... as total filename length is not too long
        name = "BASE" + "你" * 50 + "blabla.ext"
        sanitizedname = filesystem.sanitize_filename(name)
        assert sanitizedname == name

        # filename with very long extension, but total filename is no problem, so no change
        name = "hello.ext" + "e" * 200
        sanitizedname = filesystem.sanitize_filename(name)
        assert sanitizedname == name  # no change

        # PART 2: base truncating

        name = "BASE" + "a" * 300 + ".mylongext"
        sanitizedname = filesystem.sanitize_filename(name)
        assert len(sanitizedname) <= DEF_FILE_MAX
        assert sanitizedname.startswith("BASEaaaaaaaaaaaaaaa")
        assert sanitizedname.endswith(".mylongext")

        # too long filename, so truncate keeping the start of name and ext should stay the same
        name = "BASE" + "a" * 200 + ".EXT" + "e" * 200
        sanitizedname = filesystem.sanitize_filename(name)
        assert len(sanitizedname) <= DEF_FILE_MAX
        newname, newext = os.path.splitext(sanitizedname)
        assert newname.startswith("BASEaaaaa")
        assert newext.startswith(".EXTeeeee")

        # PART 3: more exotic cases

        # insert NON-ASCII chars, which should stay in place because overall length is no problem
        name = "aaaa" + 10 * chr(188) + 10 * chr(222) + "bbbb.ext"
        sanitizedname = filesystem.sanitize_filename(name)
        assert sanitizedname == name

        # insert NON-ASCII chars, which should get removed because overall length is too long
        name = "aaaa" + 200 * chr(188) + 200 * chr(222) + "bbbb.ext"
        sanitizedname = filesystem.sanitize_filename(name)
        assert sanitizedname == "aaaabbbb.ext"

        # Unicode / UTF8 ... total filename length might be too long for certain filesystems
        name = "BASE" + "你" * 200 + ".ext"
        sanitizedname = filesystem.sanitize_filename(name)
        assert sanitizedname.startswith("BASE")
        assert sanitizedname.endswith(".ext")

        # Linux / POSIX: a hidden file (no extension), with size 200, so do not truncate at all
        name = "." + "a" * 200
        sanitizedname = filesystem.sanitize_filename(name)
        assert sanitizedname == name  # no change
Example #5
0
 def test_file_illegal_chars_linux(self):
     assert filesystem.sanitize_filename("test/aftertest") == "test+aftertest"
     assert filesystem.sanitize_filename("/test") == "+test"
     assert filesystem.sanitize_filename("test/") == "test+"
     assert filesystem.sanitize_filename(r"/test\/aftertest/") == r"+test\+aftertest+"
     assert filesystem.sanitize_filename("/") == "+"
     assert filesystem.sanitize_filename("///") == "+++"
     assert filesystem.sanitize_filename("../") == "..+"
     assert filesystem.sanitize_filename("../test") == "..+test"
Example #6
0
 def test_sanitize_safe_linux(self):
     # Set sanitize_safe to on, simulating Windows-style restrictions.
     assert filesystem.sanitize_filename("test" + filesystem.CH_ILLEGAL_WIN + "aftertest") == (
         "test" + filesystem.CH_LEGAL_WIN + "aftertest"
     )
     for index in range(0, len(filesystem.CH_ILLEGAL_WIN)):
         char_leg = filesystem.CH_LEGAL_WIN[index]
         char_ill = filesystem.CH_ILLEGAL_WIN[index]
         assert filesystem.sanitize_filename("test" + char_ill * 2 + "aftertest") == (
             "test" + char_leg * 2 + "aftertest"
         )
         # Illegal chars that also get caught by strip() never make it far
         # enough to be replaced by their legal equivalents if they appear
         # on either end of the filename.
         if char_ill.strip():
             assert filesystem.sanitize_filename("test" + char_ill * 2) == ("test" + char_leg * 2)
             assert filesystem.sanitize_filename(char_ill * 2 + "test") == (char_leg * 2 + "test")
Example #7
0
 def test_filename_dot(self):
     # All dots should survive in filenames
     assert filesystem.sanitize_filename(".test") == ".test"
     assert filesystem.sanitize_filename("..test") == "..test"
     assert filesystem.sanitize_filename("test.") == "test."
     assert filesystem.sanitize_filename("test..") == "test.."
     assert filesystem.sanitize_filename("test.aftertest") == "test.aftertest"
     assert filesystem.sanitize_filename("test..aftertest") == "test..aftertest"
     assert filesystem.sanitize_filename("test.aftertest.") == "test.aftertest."
     assert filesystem.sanitize_filename("test.aftertest..") == "test.aftertest.."
Example #8
0
 def test_colon_handling_darwin(self):
     assert filesystem.sanitize_filename("test:aftertest") == "aftertest"
     assert filesystem.sanitize_filename(":aftertest") == "aftertest"
     assert filesystem.sanitize_filename("::aftertest") == "aftertest"
     assert filesystem.sanitize_filename(":after:test") == "test"
     # Empty after sanitising with darwin colon handling
     assert filesystem.sanitize_filename(":") == "unknown"
     assert filesystem.sanitize_filename("test:") == "unknown"
     assert filesystem.sanitize_filename("test: ") == "unknown"
Example #9
0
 def test_filename_empty_result(self):
     # Nothing remains after sanitizing the filename
     assert filesystem.sanitize_filename("\n") == "unknown"
     assert filesystem.sanitize_filename("\r\n") == "unknown"
     assert filesystem.sanitize_filename("\n\r") == "unknown"
     assert filesystem.sanitize_filename("\t\t\t") == "unknown"
     assert filesystem.sanitize_filename(" ") == "unknown"
     assert filesystem.sanitize_filename("  ") == "unknown"
Example #10
0
 def test_win_devices_on_win(self):
     assert filesystem.sanitize_filename(None) is None
     assert filesystem.sanitize_filename("aux.txt") == "_aux.txt"
     assert filesystem.sanitize_filename("txt.aux") == "txt.aux"
     assert filesystem.sanitize_filename("$mft") == "Smft"
     assert filesystem.sanitize_filename("a$mft") == "a$mft"
Example #11
0
 def test_colon_handling_other(self):
     assert filesystem.sanitize_filename("test:aftertest") == "test:aftertest"
     assert filesystem.sanitize_filename(":") == ":"
     assert filesystem.sanitize_filename("test:") == "test:"
     assert filesystem.sanitize_filename("test: ") == "test:"
Example #12
0
 def test_empty(self):
     assert filesystem.sanitize_filename(None) is None
     assert filesystem.sanitize_foldername(None) is None