Add unit test
This commit is contained in:
14
.travis.yml
Normal file
14
.travis.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
language: python
|
||||||
|
|
||||||
|
python:
|
||||||
|
- "2.7"
|
||||||
|
|
||||||
|
install:
|
||||||
|
- pip install -r requirements.txt --use-mirrors
|
||||||
|
- pip install coverage coveralls
|
||||||
|
|
||||||
|
script:
|
||||||
|
- coverage run --source=bootstrapform setup.py test
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- coveralls
|
4
setup.py
4
setup.py
@@ -16,6 +16,10 @@ setup(
|
|||||||
author_email='tzangms@gmail.com',
|
author_email='tzangms@gmail.com',
|
||||||
url='http://github.com/tzangms/django-bootstrap-form',
|
url='http://github.com/tzangms/django-bootstrap-form',
|
||||||
license='BSD',
|
license='BSD',
|
||||||
|
test_suite='tests',
|
||||||
|
install_requires = [
|
||||||
|
"django>=1.3",
|
||||||
|
],
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
|
54
tests/__init__.py
Normal file
54
tests/__init__.py
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings'
|
||||||
|
|
||||||
|
parent = os.path.dirname(os.path.dirname(
|
||||||
|
os.path.abspath(__file__)))
|
||||||
|
|
||||||
|
sys.path.insert(0, parent)
|
||||||
|
|
||||||
|
from unittest import TestCase
|
||||||
|
from django.template import Template, Context
|
||||||
|
from django.core.management import call_command
|
||||||
|
from django import forms
|
||||||
|
|
||||||
|
|
||||||
|
TEST_DIR = os.path.abspath(os.path.join(__file__, '..'))
|
||||||
|
|
||||||
|
|
||||||
|
CHOICES = (
|
||||||
|
(0, 'Zero'),
|
||||||
|
(1, 'One'),
|
||||||
|
(2, 'Two'),
|
||||||
|
)
|
||||||
|
|
||||||
|
class ExampleForm(forms.Form):
|
||||||
|
char_field = forms.CharField()
|
||||||
|
choice_field = forms.ChoiceField(choices=CHOICES)
|
||||||
|
radio_choice = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect)
|
||||||
|
multiple_choice = forms.MultipleChoiceField(choices=CHOICES)
|
||||||
|
multiple_checkbox = forms.MultipleChoiceField(choices=CHOICES, widget=forms.CheckboxSelectMultiple)
|
||||||
|
file_fied = forms.FileField()
|
||||||
|
password_field = forms.CharField(widget=forms.PasswordInput)
|
||||||
|
textarea = forms.CharField(widget=forms.Textarea)
|
||||||
|
boolean_field = forms.BooleanField()
|
||||||
|
|
||||||
|
|
||||||
|
class BootstrapTemplateTagTests(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
call_command('syncdb', interactive=False)
|
||||||
|
|
||||||
|
def test_bootstrap_tag(self):
|
||||||
|
form = ExampleForm()
|
||||||
|
|
||||||
|
html = Template("{% load bootstrap %}{{ form|bootstrap }}").render(Context({'form': form}))
|
||||||
|
|
||||||
|
with open('/tmp/basic.html', 'w+') as f:
|
||||||
|
f.write(html)
|
||||||
|
|
||||||
|
image = os.path.join('fixtures', 'basic.html')
|
||||||
|
with open(os.path.join(TEST_DIR, image)) as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
self.assertEqual(html, content)
|
210
tests/fixtures/basic.html
vendored
Normal file
210
tests/fixtures/basic.html
vendored
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label " for="id_char_field">Char field</label>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=" ">
|
||||||
|
<input id="id_char_field" type="text" class=" form-control" name="char_field" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label " for="id_choice_field">Choice field</label>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=" ">
|
||||||
|
<select id="id_choice_field" class=" form-control" name="choice_field">
|
||||||
|
<option value="0">Zero</option>
|
||||||
|
<option value="1">One</option>
|
||||||
|
<option value="2">Two</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label ">Radio choice</label>
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="radio_choice" value="0" />
|
||||||
|
Zero
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="radio_choice" value="1" />
|
||||||
|
One
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="radio">
|
||||||
|
<label>
|
||||||
|
<input type="radio" name="radio_choice" value="2" />
|
||||||
|
Two
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label " for="id_multiple_choice">Multiple choice</label>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=" ">
|
||||||
|
<select multiple="multiple" id="id_multiple_choice" class=" form-control" name="multiple_choice">
|
||||||
|
<option value="0">Zero</option>
|
||||||
|
<option value="1">One</option>
|
||||||
|
<option value="2">Two</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label " for="id_multiple_checkbox">Multiple checkbox</label>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=" multiple-checkbox">
|
||||||
|
<ul>
|
||||||
|
<li><label for="id_multiple_checkbox_0"><input type="checkbox" name="multiple_checkbox" value="0" id="id_multiple_checkbox_0" /> Zero</label></li>
|
||||||
|
<li><label for="id_multiple_checkbox_1"><input type="checkbox" name="multiple_checkbox" value="1" id="id_multiple_checkbox_1" /> One</label></li>
|
||||||
|
<li><label for="id_multiple_checkbox_2"><input type="checkbox" name="multiple_checkbox" value="2" id="id_multiple_checkbox_2" /> Two</label></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label " for="id_file_fied">File fied</label>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=" ">
|
||||||
|
<input type="file" name="file_fied" id="id_file_fied" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label " for="id_password_field">Password field</label>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=" ">
|
||||||
|
<input id="id_password_field" type="password" class=" form-control" name="password_field" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
|
||||||
|
<label class="control-label " for="id_textarea">Textarea</label>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=" ">
|
||||||
|
<textarea id="id_textarea" rows="10" cols="40" name="textarea" class=" form-control"></textarea>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<div class="checkbox">
|
||||||
|
|
||||||
|
<label >
|
||||||
|
<input type="checkbox" name="boolean_field" id="id_boolean_field" /> <span>Boolean field</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
40
tests/test_settings.py
Normal file
40
tests/test_settings.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import os
|
||||||
|
local_path = lambda path: os.path.join(os.path.dirname(__file__), path)
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
'NAME': ':memory:'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SITE_ID = 1
|
||||||
|
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sites',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.staticfiles',
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.admin',
|
||||||
|
'bootstrapform',
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'tests.urls'
|
||||||
|
|
||||||
|
MEDIA_URL = '/media/'
|
||||||
|
|
||||||
|
MEDIA_ROOT = local_path('media')
|
||||||
|
|
||||||
|
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'
|
||||||
|
STATIC_ROOT = local_path('static/')
|
||||||
|
STATIC_URL = '/static/'
|
||||||
|
STATICFILES_FINDERS = (
|
||||||
|
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||||
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder'
|
||||||
|
)
|
||||||
|
|
||||||
|
TEMPLATE_DIRS = (
|
||||||
|
local_path('templates'),
|
||||||
|
)
|
||||||
|
|
Reference in New Issue
Block a user