import unittest

from kalliope.core.Models import Singleton


class MyClass(object):
    __metaclass__ = Singleton

    def __init__(self):
        self.value = "test"


class TestSingleton(unittest.TestCase):

    def setUp(self):
        pass

    def test_singleton(self):

        obj1 = MyClass()
        obj2 = MyClass()

        self.assertEqual(id(obj1), id(obj2))

    def test_drop_singleton(self):

        obj1 = MyClass()
        obj2 = MyClass()
        # drop the singleton instance
        Singleton._instances = {}
        obj3 = MyClass()

        self.assertEqual(id(obj1), id(obj2))
        self.assertNotEqual(id(obj1), id(obj3))