Skip to content

Commit 60db2f0

Browse files
committed
More tests
1 parent bdcbc34 commit 60db2f0

File tree

5 files changed

+89
-6
lines changed

5 files changed

+89
-6
lines changed

Diff for: djangojs/settings.py

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Django settings for Django JS project.
2+
import sys
23
DEBUG = True
34
TEMPLATE_DEBUG = DEBUG
5+
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
46

57
ADMINS = (
68
# ('Your Name', '[email protected]'),

Diff for: djangojs/tests.py

+70-5
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ def phantomjs(self, *args, **kwargs):
2525

2626

2727
class JasmineTests(JsTestCase):
28+
urls = 'djangojs.urls'
2829

2930
def test_jasmine_suite(self):
30-
'''It shoudl run its its own Jasmine test suite'''
31+
'''It should run its its own Jasmine test suite'''
3132
jasmine_runner_url = ''.join([self.live_server_url, reverse('jasmine_runner')])
3233
phantomjs_jasmine_runner = join(dirname(__file__), 'phantomjs', 'run-jasmine.js')
3334

@@ -37,9 +38,73 @@ def test_jasmine_suite(self):
3738

3839

3940
class DjangoJsJsonTest(TestCase):
41+
urls = 'djangojs.urls'
4042

41-
def test_should_render(self):
43+
def setUp(self):
44+
self.response = self.client.get(reverse('django_js_json'))
45+
self.json = json.loads(self.response.content)
46+
47+
def test_render(self):
4248
'''It should render a JSON URLs descriptor'''
43-
response = self.client.get(reverse('django_js_json'))
44-
self.assertEqual(response.status_code, 200)
45-
self.assertEqual(response['Content-Type'], 'application/json')
49+
self.assertIsNotNone(self.response)
50+
self.assertEqual(self.response.status_code, 200)
51+
self.assertEqual(self.response['Content-Type'], 'application/json')
52+
self.assertIsNotNone(self.json)
53+
54+
def test_simple_url(self):
55+
'''It should serialize a simple URL without parameters'''
56+
self.assertTrue('django_js_json' in self.json)
57+
self.assertEqual(self.json['django_js_json'], '/urls')
58+
59+
def test_url_an_arg(self):
60+
'''It should serialize an URL with a single anonymous parameter'''
61+
self.assertTrue('test_arg' in self.json)
62+
self.assertEqual(self.json['test_arg'], '/tests/arg/<>')
63+
64+
def test_url_many_args(self):
65+
'''It should serialize an URL with many anonymous parameters'''
66+
self.assertTrue('test_arg_multi' in self.json)
67+
self.assertEqual(self.json['test_arg_multi'], '/tests/arg/<>/<>')
68+
69+
def test_url_a_kwarg(self):
70+
'''It should serialize an URL with a single named parameter'''
71+
self.assertTrue('test_named' in self.json)
72+
self.assertEqual(self.json['test_named'], '/tests/named/<test>')
73+
74+
def test_url_many_kwargs(self):
75+
'''It should serialize an URL with many named parameters'''
76+
self.assertTrue('test_named_multi' in self.json)
77+
self.assertEqual(self.json['test_named_multi'], '/tests/named/<str>/<num>')
78+
79+
def test_unnamed_url(self):
80+
'''It should not serialize unnamed URLs'''
81+
self.assertFalse('' in self.json)
82+
for key, value in self.json.iteritems():
83+
self.assertNotEqual(value, '/tests/anonymous')
84+
85+
def test_optionnal_chars(self):
86+
'''It should not serialize optionnal characters (take the shortest)'''
87+
self.assertTrue('opt' in self.json)
88+
url = self.json['opt']
89+
self.assertFalse('?' in url)
90+
self.assertEqual(url, '/tests/optionnal')
91+
92+
self.assertTrue('opt_multi' in self.json)
93+
url = self.json['opt_multi']
94+
self.assertFalse('?' in url)
95+
self.assertEqual(url, '/tests/man/optionnal')
96+
97+
def test_optionnal_groups(self):
98+
'''It should not serialize optionnal non capturing groups'''
99+
self.assertTrue('opt_grp' in self.json)
100+
url = self.json['opt_grp']
101+
self.assertFalse('?' in url)
102+
self.assertEqual(url, '/tests/optionnal/group')
103+
104+
105+
class VerbatimTagTest(TestCase):
106+
urls = 'djangojs.urls'
107+
108+
109+
class DjangoJsTagTest(TestCase):
110+
urls = 'djangojs.urls'

Diff for: djangojs/urls.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@
2525

2626
if settings.DEBUG or settings.TESTING:
2727
urlpatterns += patterns('',
28+
url(r'^tests/jasmine$', TemplateView.as_view(template_name='djangojs/test/jasmine-runner.html'), name='jasmine_runner'),
2829
url(r'^tests/arg/(\d+)$', TemplateView.as_view(template_name='djangojs/test/test1.html'), name='test_arg'),
2930
url(r'^tests/arg/(\d+)/(\w)$', TemplateView.as_view(template_name='djangojs/test/test1.html'), name='test_arg_multi'),
3031
url(r'^tests/named/(?P<test>\w+)$', TemplateView.as_view(template_name='djangojs/test/test1.html'), name='test_named'),
3132
url(r'^tests/named/(?P<str>\w+)/(?P<num>\d+)$', TemplateView.as_view(template_name='djangojs/test/test1.html'), name='test_named_multi'),
32-
url(r'^tests/jasmine$', TemplateView.as_view(template_name='djangojs/test/jasmine-runner.html'), name='jasmine_runner'),
33+
url(r'^tests/optionnals?$', TemplateView.as_view(template_name='djangojs/test/test1.html'), name="opt"),
34+
url(r'^tests/many?/optionnals?$', TemplateView.as_view(template_name='djangojs/test/test1.html'), name="opt_multi"),
35+
url(r'^tests/optionnal/(?:capturing)?group$', TemplateView.as_view(template_name='djangojs/test/test1.html'), name="opt_grp"),
36+
url(r'^tests/anonymous$', TemplateView.as_view(template_name='djangojs/test/test1.html')),
3337
)

Diff for: djangojs/views.py

+12
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
RE_KWARG = re.compile(r"(\(\?P\<(.*?)\>.*?\))") # Pattern for recongnizing named parameters in urls
2323
RE_ARG = re.compile(r"(\(.*?\))") # Pattern for recognizing unnamed url parameters
24+
RE_OPT = re.compile(r"\w\?") # Pattern for recognizing optionnal character
25+
RE_OPT_GRP = re.compile(r"\(\?\:.*\)\?") # Pattern for recognizing optionnal group
2426

2527

2628
class DjangoJsJsonView(View):
@@ -49,6 +51,16 @@ def get_urls(self, module, prefix=''):
4951
full_url = prefix + pattern.regex.pattern
5052
for chr in ['^', '$']:
5153
full_url = full_url.replace(chr, '')
54+
# remove optionnal non capturing groups
55+
opt_grp_matches = RE_OPT_GRP.findall(full_url)
56+
if opt_grp_matches:
57+
for match in opt_grp_matches:
58+
full_url = full_url.replace(match, '')
59+
# remove optionnal characters
60+
opt_matches = RE_OPT.findall(full_url)
61+
if opt_matches:
62+
for match in opt_matches:
63+
full_url = full_url.replace(match, '')
5264
# handle kwargs, args
5365
kwarg_matches = RE_KWARG.findall(full_url)
5466
if kwarg_matches:

Diff for: manage.py

100644100755
File mode changed.

0 commit comments

Comments
 (0)