#
# Copyright (c) 2009 Testrepository Contributors
#
# Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
# license at the users choice. A copy of both licenses are available in the
# project source as Apache-2.0 and BSD. You may not use this file except in
# compliance with one of these two licences.
#
# Unless required by applicable law or agreed to in writing, software
# distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
# license you chose for the specific language governing permissions and
# limitations under that license.

"""Tests for the stubpackage test helper."""

import os.path

from testrepository.tests import ResourcedTestCase
from testrepository.tests.stubpackage import (
    StubPackageResource,
    TempDirResource,
)


class TestStubPackageResource(ResourcedTestCase):
    def test_has_tempdir(self):
        resource = StubPackageResource("foo", [])
        self.assertEqual(1, len(resource.resources))
        self.assertIsInstance(resource.resources[0][1], TempDirResource)

    def test_writes_package(self):
        resource = StubPackageResource("foo", [("bar.py", "woo")])
        pkg = resource.getResource()
        self.addCleanup(resource.finishedWith, pkg)
        self.assertEqual("", open(os.path.join(pkg.base, "foo", "__init__.py")).read())
        self.assertEqual("woo", open(os.path.join(pkg.base, "foo", "bar.py")).read())

    def test_no__init__(self):
        resource = StubPackageResource("foo", [("bar.py", "woo")], init=False)
        pkg = resource.getResource()
        self.addCleanup(resource.finishedWith, pkg)
        self.assertFalse(os.path.exists(os.path.join(pkg.base, "foo", "__init__.py")))


class TestTempDirResource(ResourcedTestCase):
    """Tests for the StubPackage resource."""

    def test_makes_a_dir(self):
        resource = TempDirResource()
        tempdir = resource.getResource()
        try:
            self.assertTrue(os.path.exists(tempdir))
        finally:
            resource.finishedWith(tempdir)
        self.assertFalse(os.path.exists(tempdir))
