# -*- coding: utf8 -*-
import os
import os.path
import sys
import unittest

from pygame.tests.test_utils import example_path
import pygame, pygame.image, pygame.pkgdata
from pygame.compat import as_unicode, unicode_

imageext = sys.modules["pygame.imageext"]


class ImageextModuleTest(unittest.TestCase):
    # Most of the testing is done indirectly through image_test.py
    # This just confirms file path encoding and error handling.
    def test_save_non_string_file(self):
        im = pygame.Surface((10, 10), 0, 32)
        self.assertRaises(TypeError, imageext.save_extended, im, [])

    def test_load_non_string_file(self):
        self.assertRaises(TypeError, imageext.load_extended, [])

    @unittest.skip("SDL silently removes invalid characters")
    def test_save_bad_filename(self):
        im = pygame.Surface((10, 10), 0, 32)
        u = u"a\x00b\x00c.png"
        self.assertRaises(pygame.error, imageext.save_extended, im, u)

    @unittest.skip("SDL silently removes invalid characters")
    def test_load_bad_filename(self):
        u = u"a\x00b\x00c.png"
        self.assertRaises(pygame.error, imageext.load_extended, u)

    def test_save_unknown_extension(self):
        im = pygame.Surface((10, 10), 0, 32)
        s = "foo.bar"
        self.assertRaises(pygame.error, imageext.save_extended, im, s)
    if sys.version_info >= (3, 0):
        def test_load_unknown_extension(self):
            s = "foo.bar"
            self.assertRaises(FileNotFoundError, imageext.load_extended, s)

        def test_load_unknown_file(self):
            s = "nonexistent.png"
            self.assertRaises(FileNotFoundError, imageext.load_extended, s)
    else:
        def test_load_unknown_extension(self):
            s = "foo.bar"
            self.assertRaises(IOError, imageext.load_extended, s)

        def test_load_unknown_file(self):
            s = "nonexistent.png"
            self.assertRaises(IOError, imageext.load_extended, s)

    def test_load_unicode_path_0(self):
        u = unicode_(example_path("data/alien1.png"))
        im = imageext.load_extended(u)

    def test_load_unicode_path_1(self):
        """non-ASCII unicode"""
        import shutil

        orig = unicode_(example_path("data/alien1.png"))
        temp = os.path.join(unicode_(example_path("data")), u"你好.png")
        shutil.copy(orig, temp)
        try:
            im = imageext.load_extended(temp)
        finally:
            os.remove(temp)

    def _unicode_save(self, temp_file):
        im = pygame.Surface((10, 10), 0, 32)
        try:
            with open(temp_file, "w") as f:
                pass
            os.remove(temp_file)
        except IOError:
            raise unittest.SkipTest("the path cannot be opened")

        self.assertFalse(os.path.exists(temp_file))

        try:
            imageext.save_extended(im, temp_file)

            self.assertGreater(os.path.getsize(temp_file), 10)
        finally:
            try:
                os.remove(temp_file)
            except EnvironmentError:
                pass

    def test_save_unicode_path_0(self):
        """unicode object with ASCII chars"""
        self._unicode_save(u"temp_file.png")

    def test_save_unicode_path_1(self):
        self._unicode_save(u"你好.png")


if __name__ == "__main__":
    unittest.main()
