# -*- coding: utf-8 -*-
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

import libear as sut
import unittest
import os.path


class TemporaryDirectoryTest(unittest.TestCase):
    def test_creates_directory(self):
        dirname = None
        with sut.TemporaryDirectory() as tmpdir:
            self.assertTrue(os.path.isdir(tmpdir))
            dirname = tmpdir
        self.assertIsNotNone(dirname)
        self.assertFalse(os.path.exists(dirname))

    def test_removes_directory_when_exception(self):
        dirname = None
        try:
            with sut.TemporaryDirectory() as tmpdir:
                self.assertTrue(os.path.isdir(tmpdir))
                dirname = tmpdir
                raise RuntimeError('message')
        except:
            self.assertIsNotNone(dirname)
            self.assertFalse(os.path.exists(dirname))
