def test_valid(self):
        perms = '0 1 2 3 4 5 6 7'.split()

        perms = itertools.product(perms, perms, perms, perms)
        for item in perms:
            item = ''.join(item)
            assert len(item) == 4

            perm = Permissions.from_octal(item)

            assert isinstance(perm, Permissions)
            assert perm.to_octal() == item

            item = item[1:]

            perm = Permissions.from_octal(item)

            assert isinstance(perm, Permissions)
            assert perm.to_octal() == '0' + item
    def test_bad_input(self):
        perms_org = '0777'
        for i, _ in enumerate(perms_org):
            perms = perms_org[0:i] + 'a' + perms_org[i+1:]
            with pytest.raises(ValueError):
                Permissions.from_octal(perms)

        with pytest.raises(ValueError):
            Permissions.from_octal(perms_org[:-2])

        with pytest.raises(ValueError):
            Permissions.from_octal(perms_org + 'x')

        with pytest.raises(ValueError):
            Permissions.from_octal('')
    def test(self):
        perms = '0 1 2 3 4 5 6 7'.split()
        path = tempfile.mkstemp()[1]

        try:
            perms = itertools.product(perms, perms, perms, perms)
            for item in perms:
                item = ''.join(item)
                assert len(item) == 4

                prm = Permissions.from_octal(item)
                os.lchmod(path, prm)

                assert stat.filemode(os.lstat(path).st_mode)[1:] == prm.to_filemode()
        finally:
            os.unlink(path)
    def test_valid(self):
        perms = '0 1 2 3 4 5 6 7'.split()

        perms = itertools.permutations(perms, 4)
        for item in perms:
            item = ''.join(item)
            assert len(item) == 4

            item_int = int(item, 8)

            perm = Permissions.from_int(item_int)

            assert isinstance(perm, Permissions)
            assert perm.to_octal() == item

            item = item[1:]

            perm = Permissions.from_octal(item)

            assert isinstance(perm, Permissions)
            assert perm.to_octal() == '0' + item
 def test_invalid_types(self):
     for value in ('a', 123, object(), b'rwxrwxrwx', True, None):
         with pytest.raises((TypeError, ValueError)):
             Permissions.from_octal(value)