Skip to content

Commit

Permalink
Adding tests. Added tests for Singleton.
Browse files Browse the repository at this point in the history
  • Loading branch information
chronossc committed Oct 9, 2012
1 parent 10961e2 commit 9630ea3
Show file tree
Hide file tree
Showing 6 changed files with 194 additions and 14 deletions.
41 changes: 27 additions & 14 deletions breadcrumbs/breadcrumbs.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,33 @@


class Singleton(object):
"""
We use a simple singleton pattern in Breadcrumbs.
Example from http://svn.ademar.org/code/trunk/junk-code/singleton_vs_borg.py
"""
def __new__(cls, *args, **kwds):
it = cls.__dict__.get("__it__")
if it is not None:
return it
cls.__it__ = it = object.__new__(cls)
it._1st_init(*args, **kwds)
return it

def _1st_init(self, *args, **kwds):
pass

__instance__ = None

def __new__(cls, *a, **kw):
if Singleton.__instance__ is None:
Singleton.__instance__ = object.__new__(cls, *a, **kw)
cls._Singleton__instance = Singleton.__instance__
return Singleton.__instance__

def _drop_it(self):
Singleton.__instance__ = None

# class Singleton(object):
# """
# We use a simple singleton pattern in Breadcrumbs.
# Example from http://svn.ademar.org/code/trunk/junk-code/singleton_vs_borg.py
# """
# def __new__(cls, *args, **kwds):
# it = cls.__dict__.get("__it__")
# if it is not None:
# return it
# cls.__it__ = it = object.__new__(cls)
# it._1st_init(*args, **kwds)
# return it

# def _1st_init(self, *args, **kwds):
# pass


class BreadcrumbsInvalidFormat(Exception):
Expand Down
4 changes: 4 additions & 0 deletions breadcrumbs/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# coding: utf-8
from singleton_tests import *
from breadcrumbs_tests import *
from flatpages_tests import *
54 changes: 54 additions & 0 deletions breadcrumbs/tests/breadcrumbs_tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# # coding: utf-8

# import os
# from django.conf import settings
# from django.test import TestCase

# from breadcrumbs.breadcrumbs import (Breadcrumb, Breadcrumbs,
# BreadcrumbsInvalidFormat, BreadcrumbsNotSet)

# class BreadcrumbsTest(TestCase):

# def setUp(self):
# self.old_MIDDLEWARE_CLASSES = settings.MIDDLEWARE_CLASSES
# breadcrumbs_middleware_class = 'breadcrumbs.middleware.BreadcrumbsMiddleware'
# if breadcrumbs_middleware_class not in settings.MIDDLEWARE_CLASSES:
# settings.MIDDLEWARE_CLASSES += (breadcrumbs_middleware_class,)
# self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
# settings.TEMPLATE_DIRS = (
# os.path.join(
# os.path.dirname(__file__),
# 'templates'
# ),
# )
# # self.old_LOGIN_URL = settings.LOGIN_URL
# # settings.LOGIN_URL = '/accounts/login/'

# # now we start singleton
# self.breadcrumbs = Breadcrumbs()

# def tearDown(self):
# settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
# settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
# # settings.LOGIN_URL = self.old_LOGIN_URL

# # kill singleton
# Breadcrumbs('a','/a')
# Breadcrumbs('b','/b')
# print Breadcrumbs()
# self.breadcrumbs._drop_it()
# del(self.breadcrumbs)
# Breadcrumbs('c','/c')
# print Breadcrumbs()

# def test_breadcrumb_class(self):
# b = Breadcrumb("Home", "/")
# self.assertEqual(b.name, "Home")
# self.assertEqual(b.url, "/")

# def test_breadcrumbs_singleton(self):
# brd = Breadcrumbs()
# brd('a', '/a/')
# brd('b', '/b/')


Empty file.
50 changes: 50 additions & 0 deletions breadcrumbs/tests/singleton_tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# coding: utf-8

from django.test import TestCase

from breadcrumbs.breadcrumbs import Singleton


class Foo(Singleton):
"""
Class used in singleton tests
"""
pass


class SingletonTest(TestCase):

def test_singleton(self):
"""
Test singleton implementation with values
"""
a = Foo()
a.attr_1 = 1

b = Foo()

self.assertEqual(b.attr_1, 1)
self.assertTrue(a is b, "'a' isn't 'b', Singleton not works")

def test_singleton_destruction(self):
"""
Test singleton imsinplementation with values and than destroy it
"""
a = Foo()
id_a = id(a)
a.attr_1 = 1

b = Foo()
id_b = id(b)

self.assertEqual(id_a, id_b)
self.assertEqual(b.attr_1, 1)
self.assertTrue(a is b, "'a' isn't 'b', Singleton not works")

a._drop_it()

c = Foo()
id_c = id(c)
self.assertNotEqual(id_a, id_c)
self.assertNotEqual(getattr(c,'attr_1',None), 1)

59 changes: 59 additions & 0 deletions runtests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/usr/bin/env python

import os, sys

from django.conf import settings


if not settings.configured:
settings_dict = dict(
INSTALLED_APPS=(
'django.contrib.contenttypes',
'django.contrib.sites',
'django.contrib.flatpages',
'breadcrumbs',
),
DATABASES={
"default": {
"ENGINE": "django.db.backends.sqlite3"
}
},
)

settings.configure(**settings_dict)


def runtests(*test_args):

if not test_args:
test_args = ['breadcrumbs']

# try to set more used args to django test
test_kwargs = {
'verbosity': 1,
'noinput': False,
'failfast': False,
}
for i,arg in enumerate(sys.argv):
if arg.startswith('-v'):
_value = arg.replace('-v','')
if len(_value):
test_kwargs['verbosity'] = int(_value)
else:
test_kwargs['verbosity'] = int(sys.argv[i+1])
if arg == '--noinput':
test_kwargs['noinput'] = True
if arg == '--failfast':
test_kwargs['failfast'] =True

parent = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, parent)

from django.test.simple import DjangoTestSuiteRunner
failures = DjangoTestSuiteRunner(
interactive=True, **test_kwargs).run_tests(test_args)
sys.exit(failures)


if __name__ == '__main__':
runtests()

0 comments on commit 9630ea3

Please sign in to comment.