1
0
mirror of https://github.com/django/django.git synced 2025-07-05 10:19:20 +00:00

[gsoc2009-testing] Initial tests for the Admin views based on exisiting models and fixtures. runtest.py --windmill will activate them

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/test-improvements@11087 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Kevin Kubasik 2009-06-23 07:02:54 +00:00
parent 2fd60f0016
commit e223716bd8
8 changed files with 605 additions and 92 deletions

View File

@ -398,7 +398,7 @@ TEST_DATABASE_COLLATION = None
# Specify the coverage test runner
COVERAGE_TEST_RUNNER = 'django.test.test_coverage.BaseCoverageRunner'
COVERAGE_TEST_RUNNER = 'django.test.test_coverage.ConsoleReportCoverageRunner'
# Specify regular expressions of code blocks the coverage analyzer should
# ignore as statements (e.g. ``raise NotImplemented``).

View File

@ -1,5 +1,6 @@
from django.core.management.base import BaseCommand
from windmill.authoring import djangotest
#from windmill.authoring import djangotest
from django.test import windmill_tests as djangotest
import sys, os
from time import sleep
import types
@ -18,7 +19,10 @@ def attempt_import(name, suffix):
s = name.split('.')
mod = __import__(s.pop(0))
for x in s+[suffix]:
mod = getattr(mod, x)
try:
mod = getattr(mod, x)
except Exception, e:
pass
return mod
class Command(BaseCommand):
@ -31,7 +35,7 @@ class Command(BaseCommand):
def handle(self, *labels, **options):
from windmill.conf import global_settings
from windmill.authoring.djangotest import WindmillDjangoUnitTest
from django.test.windmill_tests import WindmillDjangoUnitTest
if 'ie' in labels:
global_settings.START_IE = True
sys.argv.remove('ie')

View File

@ -63,6 +63,15 @@ class BaseCoverageRunner(object):
coverage_modules, getattr(settings, 'COVERAGE_MODULE_EXCLUDES', []),
getattr(settings, 'COVERAGE_PATH_EXCLUDES', []))
return results
class ConsoleReportCoverageRunner(BaseCoverageRunner):
def run_tests(self, *args, **kwargs):
"""docstring for run_tests"""
res = super(ConsoleReportCoverageRunner, self).run_tests( *args, **kwargs)
self.cov.report(self.modules.values(), show_missing=1)
if self.excludes:
@ -77,9 +86,7 @@ class BaseCoverageRunner(object):
for e in self.errors:
print >> sys.stderr, e,
print >> sys.stdout
return results
return res
class ReportingCoverageRunner(BaseCoverageRunner):
"""Runs coverage.py analysis, as well as generating detailed HTML reports."""

View File

@ -0,0 +1,123 @@
# Code from django_live_server_r8458.diff @ http://code.djangoproject.com/ticket/2879#comment:41
# Editing to monkey patch django rather than be in trunk
import socket
import threading
from django.core.handlers.wsgi import WSGIHandler
from django.core.servers import basehttp
from django.test.testcases import call_command
#from django.core.management import call_command
# support both django 1.0 and 1.1
try:
from django.test.testcases import TransactionTestCase as TestCase
except ImportError:
from django.test.testcases import TestCase
class StoppableWSGIServer(basehttp.WSGIServer):
"""WSGIServer with short timeout, so that server thread can stop this server."""
def server_bind(self):
"""Sets timeout to 1 second."""
basehttp.WSGIServer.server_bind(self)
self.socket.settimeout(1)
def get_request(self):
"""Checks for timeout when getting request."""
try:
sock, address = self.socket.accept()
sock.settimeout(None)
return (sock, address)
except socket.timeout:
raise
class TestServerThread(threading.Thread):
"""Thread for running a http server while tests are running."""
def __init__(self, address, port):
self.address = address
self.port = port
self._stopevent = threading.Event()
self.started = threading.Event()
self.error = None
super(TestServerThread, self).__init__()
def run(self):
"""Sets up test server and database and loops over handling http requests."""
try:
handler = basehttp.AdminMediaHandler(WSGIHandler())
httpd = None
while httpd is None:
try:
server_address = (self.address, self.port)
httpd = StoppableWSGIServer(server_address, basehttp.WSGIRequestHandler)
except basehttp.WSGIServerException, e:
if "Address already in use" in str(e):
self.port +=1
else:
raise e
httpd.set_app(handler)
self.started.set()
except basehttp.WSGIServerException, e:
self.error = e
self.started.set()
return
# Must do database stuff in this new thread if database in memory.
from django.conf import settings
if settings.DATABASE_ENGINE == 'sqlite3' \
and (not settings.TEST_DATABASE_NAME or settings.TEST_DATABASE_NAME == ':memory:'):
from django.db import connection
db_name = connection.creation.create_test_db(0)
# Import the fixture data into the test database.
if hasattr(self, 'fixtures'):
# We have to use this slightly awkward syntax due to the fact
# that we're using *args and **kwargs together.
call_command('loaddata', *self.fixtures, **{'verbosity': 0})
# Loop until we get a stop event.
while not self._stopevent.isSet():
httpd.handle_request()
httpd.server_close()
def join(self, timeout=None):
"""Stop the thread and wait for it to finish."""
self._stopevent.set()
threading.Thread.join(self, timeout)
def start_test_server(self, address='localhost', port=8000):
"""Creates a live test server object (instance of WSGIServer)."""
self.server_thread = TestServerThread(address, port)
if hasattr(self, 'fixtures'):
self.server_thread.__setattr__('fixtures', self.fixtures)
self.server_thread.start()
self.server_thread.started.wait()
if self.server_thread.error:
raise self.server_thread.error
def stop_test_server(self):
if self.server_thread:
self.server_thread.join()
## New Code
TestCase.start_test_server = classmethod(start_test_server)
TestCase.stop_test_server = classmethod(stop_test_server)
from windmill.authoring import unit
class WindmillDjangoUnitTest(TestCase, unit.WindmillUnitTestCase):
test_port = 8000
def setUp(self):
self.start_test_server('localhost', self.test_port)
self.test_url = 'http://localhost:%d' % self.server_thread.port
unit.WindmillUnitTestCase.setUp(self)
def tearDown(self):
unit.WindmillUnitTestCase.tearDown(self)
self.stop_test_server()
WindmillDjangoTransactionUnitTest = WindmillDjangoUnitTest

View File

@ -1,19 +1,3 @@
"""
Copyright 2009 55 Minutes (http://www.55minutes.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
from module_loader import *
from module_walker import *

View File

@ -1419,3 +1419,24 @@ class AdminInlineTests(TestCase):
self.failUnlessEqual(response.status_code, 302)
self.failUnlessEqual(FancyDoodad.objects.count(), 1)
self.failUnlessEqual(FancyDoodad.objects.all()[0].name, "Fancy Doodad 1 Updated")
import os
from django.test import windmill_tests as djangotest
#from windmill.authoring import djangotest
from windmill.conf import global_settings
# class TestProjectWindmillTest(djangotest.WindmillDjangoUnitTest):
# fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml', 'admin-views-unicode.xml',
# 'multiple-child-classes', 'admin-views-actions.xml', 'string-primary-key.xml', 'admin-views-person.xml']
# test_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'windmilltests')
# #test_dir = os.path.dirname(os.path.abspath(__file__))
# #test_dir = os.path.dirname(os.path.abspath(__file__))
# browser = 'firefox'
# test_url = 'http://localhost:8000/test_admin/admin/'
# global_settings.TEST_URL = test_url
# def test_tryout(self):
# pass

View File

@ -0,0 +1,346 @@
# import os
# from django.test import windmill_tests as djangotest
# #from windmill.authoring import djangotest
# from windmill.conf import global_settings
#
# class TestProjectWindmillTest(djangotest.WindmillDjangoUnitTest):
# fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml', 'admin-views-unicode.xml',
# 'multiple-child-classes', 'admin-views-actions.xml', 'string-primary-key.xml', 'admin-views-person.xml']
# #test_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'windmilltests')
# test_dir = os.path.dirname(os.path.abspath(__file__))
# #test_dir = os.path.dirname(os.path.abspath(__file__))
# browser = 'firefox'
# test_url = 'http://localhost:8000/test_admin/admin/'
# global_settings.TEST_URL = test_url
#
# # def test_tryout(self):
# # pass
#
# Generated by the windmill services transformer
from windmill.authoring import WindmillTestClient
# def test_recordingSuite0():
# client = WindmillTestClient(__name__)
# client.open("http://localhost:8000/test_admin/admin")
# client.type(text="Hello", name='q')
# client.click(xpath=u"//span[@id='body']/center/form/table[2]/tbody/tr[8]/td")
# client.waits.forPageLoad(timeout=u'20000')
# client.asserts.assertNode(xpath=u"//div[@id='res']/div/ol/li/h3[1]/a/em")
# client.asserts.assertNode(link=u'How do you say hello in Japanese ? - Yahoo! Answers')
# client.asserts.assertNode(link=u'hello')
# client.asserts.assertNode(link=u'japanese')
#
def test_recordingSuite1():
'''Mostly just a proof of concept to test working order of tests.'''
client = WindmillTestClient(__name__)
# print dir(client)
# print dir(client.open)
# print dir(client.commands)
# print client.commands()
client.open(url="http://localhost:8000/test_admin/admin")
client.type(text=u'super', id=u'id_username')
client.type(text=u'secret', id=u'id_password')
client.click(value=u'Log in')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertNode(xpath=u"//div[@id='content-main']/div/table/tbody/tr[1]/th")
client.asserts.assertNode(link=u'Articles')
client.asserts.assertNode(link=u'Add')
client.asserts.assertNode(link=u'Change')
client.asserts.assertNode(link=u'Admin_Views')
client.asserts.assertNode(xpath=u"//div[@id='user-tools']/strong")
client.click(xpath=u"//div[@id='content-main']/div/table/tbody/tr[22]/td/a")
client.waits.forPageLoad(timeout=u'20000')
client.type(text=u'Test Section', id=u'id_name')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertNode(link=u'Section object')
client.click(link=u' Admin_views ')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Add', timeout=u'8000')
client.click(link=u'Add')
client.waits.forPageLoad(timeout=u'20000')
client.type(text=u'Test 1', id=u'id_title')
client.type(text=u'This is test content.', id=u'id_content')
client.click(link=u'Today')
client.click(link=u'Now')
client.click(id=u'id_section')
client.select(option=u'Section object', id=u'id_section')
client.click(value=u'1')
#client.asserts.assertValue(validator=u'2009-06-16', id=u'id_date_0')
#client.asserts.assertValue(validator=u'13:31:21', id=u'id_date_1')
client.asserts.assertNode(id=u'id_section')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertNode(link=u'This is test content.')
client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[2]")
client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[3]")
client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]")
client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[5]")
client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th")
client.click(link=u'Today')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertNode(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th")
client.click(link=u' Home ')
client.waits.forPageLoad(timeout=u'20000')
def test_recordingSuite2():
'''Creating a Model with strings for pk, and checking history.'''
client = WindmillTestClient(__name__)
client.open(url="http://localhost:8000/test_admin/admin")
client.waits.forPageLoad(timeout=u'20000')
# client.open(url="http://localhost:8000/test_admin/admin")
# client.type(text=u'super', id=u'id_username')
# client.type(text=u'secret', id=u'id_password')
# client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Model with string primary keys', timeout=u'8000')
client.click(link=u'Model with string primary keys')
client.waits.forPageLoad(timeout=u'20000')
client.click(link=u' Add model with string primary key ')
client.waits.forPageLoad(timeout=u'20000')
client.type(text=u'hello', id=u'id_id')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
#client.asserts.assertNode(link=u'hello')
client.click(link=u'hello')
client.waits.forPageLoad(timeout=u'20000')
client.click(link=u'History')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertNode(xpath=u"//table[@id='change-history']/tbody/tr/td")
client.click(link=u'hello')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertValue(validator=u'hello', id=u'id_id')
client.click(link=u'Delete')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertNode(xpath=u"//div[@id='content']/ul/li")
client.asserts.assertNode(link=u'hello')
client.click(value=u"Yes, I'm sure")
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertText(xpath=u"//div[@id='changelist']/form/p", validator=u'\n\n1 model with string primary key\n\n\n')
client.click(link=u' Home ')
def test_recordingSuite3():
'''Testing Updates and Filters/Search on Person Models'''
client = WindmillTestClient(__name__)
client.open(url="http://localhost:8000/test_admin/admin")
client.waits.forPageLoad(timeout=u'20000')
client.click(link=u'Persons')
client.asserts.assertNode(link=u'John Mauchly')
client.asserts.assertNode(link=u'Grace Hooper')
client.asserts.assertNode(link=u'Guido van Rossum')
client.asserts.assertSelected(validator=u'Male', id=u'id_form-0-gender')
client.asserts.assertValue(validator=u'1', id=u'id_form-1-gender')
client.asserts.assertSelected(validator=u'Male', id=u'id_form-2-gender')
client.asserts.assertValue(validator=u'on', id=u'id_form-0-alive')
client.asserts.assertValue(validator=u'on', id=u'id_form-1-alive')
client.asserts.assertValue(validator=u'on', id=u'id_form-2-alive')
client.click(link=u'John Mauchly')
client.asserts.assertValue(validator=u'John Mauchly', id=u'id_name')
client.asserts.assertSelected(validator=u'Male', id=u'id_gender')
client.asserts.assertValue(validator=u'on', id=u'id_alive')
client.check(id=u'id_alive')
client.click(xpath=u"//form[@id='person_form']/div/fieldset/div[2]")
client.click(id=u'id_gender')
client.select(option=u'Female', id=u'id_gender')
client.click(value=u'2')
client.click(id=u'id_name')
client.type(text=u'John Mauchly Updated', id=u'id_name')
client.click(name=u'_save')
client.asserts.assertSelected(validator=u'Female', id=u'id_form-0-gender')
client.asserts.assertValue(validator=u'on', id=u'id_form-0-alive')
client.asserts.assertNode(link=u'John Mauchly Updated')
client.click(id=u'searchbar')
client.type(text=u'John', id=u'searchbar')
client.click(value=u'Search')
client.asserts.assertNode(link=u'John Mauchly Updated')
client.click(link=u'3 total')
client.type(text=u'Grace', id=u'searchbar')
client.click(value=u'Search')
client.asserts.assertNode(link=u'Grace Hooper')
client.click(link=u'3 total')
client.asserts.assertNode(link=u'Guido van Rossum')
client.click(link=u'Female')
client.asserts.assertNode(link=u'John Mauchly Updated')
client.click(link=u'All')
client.asserts.assertNode(link=u'Guido van Rossum')
client.click(link=u' Home ')
def test_recordingSuite4():
'''Admin Actions test. Test the default delete action.'''
client = WindmillTestClient(__name__)
client.open(url="http://localhost:8000/test_admin/admin")
client.waits.forPageLoad(timeout=u'20000')
client.click(link=u'Fabrics')
client.check(name=u'_selected_action')
client.click(name=u'action')
client.select(option=u'Delete selected fabrics', name=u'action')
client.click(value=u'delete_selected')
client.click(name=u'index')
client.click(value=u"Yes, I'm sure")
client.asserts.assertNode(link=u'Vertical')
client.asserts.assertNode(link=u'Horizontal')
def test_recordingSuite5():
client = WindmillTestClient(__name__)
client.open(url="http://localhost:8000/test_admin/admin")
client.waits.forPageLoad(timeout=u'20000')
client.click(link=u'Articles')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Date', timeout=u'8000')
client.click(link=u'Date')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[2]", validator=u'March 18, 2000, 11:54 a.m.')
client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[2]", validator=u'March 18, 2008, 11:54 a.m.')
client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]", validator=u'2000')
client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[4]", validator=u'2008')
client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr[3]/td[4]", validator=u'2009')
client.click(link=u'Modeladmin year')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Content', timeout=u'8000')
client.click(link=u'Content')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertText(xpath=u"//div[@id='changelist']/form/table/tbody/tr/td[4]", validator=u'2008')
client.click(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a")
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(xpath=u"//a[@id='calendarlink0']/img", timeout=u'8000')
client.click(xpath=u"//a[@id='calendarlink0']/img")
client.click(link=u'Cancel')
client.click(xpath=u"//a[@id='clocklink0']/img")
client.click(link=u'Midnight')
client.click(id=u'id_date_1')
client.asserts.assertValue(validator=u'00:00:00', id=u'id_date_1')
client.click(xpath=u"//a[@id='clocklink0']/img")
client.click(link=u'6 a.m.')
client.asserts.assertValue(validator=u'06:00:00', id=u'id_date_1')
client.click(xpath=u"//a[@id='clocklink0']/img")
client.click(link=u'Noon')
client.click(id=u'id_date_1')
client.asserts.assertValue(validator=u'12:00:00', id=u'id_date_1')
client.click(link=u'Articles')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u' Add article ', timeout=u'8000')
client.click(link=u' Add article ')
client.waits.forPageLoad(timeout=u'20000')
client.type(text=u'Test Art', id=u'id_title')
client.type(text=u'<p> Test </p>', id=u'id_content')
client.click(xpath=u"//a[@id='calendarlink0']/img")
client.click(link=u'17')
client.click(xpath=u"//a[@id='clocklink0']/img")
client.click(link=u'6 a.m.')
client.click(id=u'id_section')
client.select(option=u'Section object', id=u'id_section')
client.click(value=u'1')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a", timeout=u'8000')
client.click(xpath=u"//div[@id='changelist']/form/table/tbody/tr/th/a")
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', id=u'id_content')
client.click(id=u'id_content')
client.type(text=u'<p> Test This </p>', id=u'id_content')
client.click(name=u'_continue')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertValue(validator=u'<p> Test This </p>', id=u'id_content')
client.click(link=u'Articles')
client.waits.forPageLoad(timeout=u'20000')
client.check(name=u'_selected_action')
client.click(name=u'action')
client.check(name=u'_selected_action')
client.click(link=u' Home ')
client.waits.forPageLoad(timeout=u'20000')
def test_recordingSuite6():
client = WindmillTestClient(__name__)
client.open(url="http://localhost:8000/test_admin/admin")
client.waits.forPageLoad(timeout=u'20000')
client.click(link=u'Parents')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u' Add parent ', timeout=u'8000')
client.click(link=u' Add parent ')
client.waits.forPageLoad(timeout=u'20000')
client.type(text=u'Papa', id=u'id_name')
client.type(text=u'Billy', id=u'id_child_set-0-name')
client.type(text=u'Bobby', id=u'id_child_set-1-name')
client.type(text=u'Betty', id=u'id_child_set-2-name')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Parent object', timeout=u'8000')
client.click(link=u'Parent object')
client.waits.forPageLoad(timeout=u'20000')
client.asserts.assertValue(validator=u'Billy', id=u'id_child_set-0-name')
client.asserts.assertValue(validator=u'Bobby', id=u'id_child_set-1-name')
client.asserts.assertValue(validator=u'Betty', id=u'id_child_set-2-name')
client.click(link=u'Home')
client.waits.forPageLoad(timeout=u'20000')
def test_recordingSuite7():
client = WindmillTestClient(__name__)
client.open(url="http://localhost:8000/test_admin/admin")
client.waits.forPageLoad(timeout=u'20000')
client.click(link=u'Empty models')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u' Add empty model ', timeout=u'8000')
client.click(link=u' Add empty model ')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', name=u'_save')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u' Add empty model ', timeout=u'8000')
client.click(link=u' Add empty model ')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', name=u'_continue')
client.click(name=u'_continue')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Empty models', timeout=u'8000')
client.click(link=u'Empty models')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Primary key = 2', timeout=u'8000')
client.click(link=u'Primary key = 2')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', name=u'_addanother')
client.click(name=u'_addanother')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', name=u'_save')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Primary key = 3', timeout=u'8000')
client.click(link=u'Primary key = 3')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', name=u'_addanother')
client.click(name=u'_addanother')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', name=u'_save')
client.click(name=u'_save')
client.waits.forPageLoad(timeout=u'20000')
client.check(xpath=u"//div[@id='changelist']/form/table/tbody/tr[2]/td[1]/input")
client.check(name=u'_selected_action')
client.click(name=u'action')
client.select(option=u'Delete selected empty models', name=u'action')
client.click(value=u'delete_selected')
client.click(name=u'index')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', value=u"Yes, I'm sure")
client.click(value=u"Yes, I'm sure")
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Primary key = 2', timeout=u'8000')
client.click(link=u'Primary key = 2')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u'Delete', timeout=u'8000')
client.click(link=u'Delete')
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(timeout=u'8000', value=u"Yes, I'm sure")
client.click(value=u"Yes, I'm sure")
client.waits.forPageLoad(timeout=u'20000')
client.waits.forElement(link=u' Home ', timeout=u'8000')
client.click(link=u' Home ')
client.waits.forPageLoad(timeout=u'20000')

View File

@ -4,7 +4,9 @@ import os, sys, traceback
import unittest
import coverage
import django.contrib as contrib
from django.core.servers import basehttp
import django
try:
set
except NameError:
@ -30,9 +32,11 @@ ALWAYS_INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.comments',
'django.contrib.admin',
'windmill',
]
ALWAYS_INSTALLED_APPS.extend(('%s.%s' % (REGRESSION_TESTS_DIR_NAME,a) for a in os.listdir(REGRESSION_TEST_DIR) if not('.py' in a or '.svn' in a) ))
def get_test_models():
models = []
for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR), (CONTRIB_DIR_NAME, CONTRIB_DIR):
@ -89,6 +93,7 @@ class InvalidModelTestCase(unittest.TestCase):
def django_tests(verbosity, interactive, test_labels):
from django.conf import settings
old_installed_apps = settings.INSTALLED_APPS
old_test_database_name = settings.TEST_DATABASE_NAME
old_root_urlconf = getattr(settings, "ROOT_URLCONF", "")
@ -100,6 +105,8 @@ def django_tests(verbosity, interactive, test_labels):
# Redirect some settings for the duration of these tests.
settings.INSTALLED_APPS = ALWAYS_INSTALLED_APPS
if do_windmill:
settings.INSTALLED_APPS.append('windmill')
settings.ROOT_URLCONF = 'urls'
settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), TEST_TEMPLATE_DIR), )
settings.USE_I18N = True
@ -165,83 +172,100 @@ def django_tests(verbosity, interactive, test_labels):
test_runner = get_runner(settings, coverage=True, reports=True)
tr = test_runner()
failures = tr.run_tests(test_labels, verbosity=verbosity, interactive=interactive, extra_tests=extra_tests)
from django.core.management.commands.test_windmill import ServerContainer, attempt_import
# as testwm_cmd
# windmill_runner = testwm_cmd()
# windmill_runner.handle()
#from windmill.authoring import djangotest
from time import sleep
if do_windmill:
from windmill.conf import global_settings
from windmill.authoring.djangotest import WindmillDjangoUnitTest
# if 'ie' in labels:
# global_settings.START_IE = True
# sys.argv.remove('ie')
# elif 'safari' in labels:
# global_settings.START_SAFARI = True
# sys.argv.remove('safari')
# elif 'chrome' in labels:
# global_settings.START_CHROME = True
# sys.argv.remove('chrome')
# else:
global_settings.START_FIREFOX = True
# if 'firefox' in labels:
# sys.argv.remove('firefox')
#from django.test import windmill_tests as djangotest
import types
import logging
from windmill.conf import global_settings
from django.test.windmill_tests import WindmillDjangoUnitTest
from django.core.management.commands.test_windmill import ServerContainer, attempt_import
#from django.test import windmill_tests
# as testwm_cmd
# windmill_runner = testwm_cmd()
# windmill_runner.handle()
# if 'manage.py' in sys.argv:
# sys.argv.remove('manage.py')
# if 'test_windmill' in sys.argv:
# sys.argv.remove('test_windmill')
server_container = ServerContainer()
server_container.start_test_server()
global_settings.TEST_URL = 'http://localhost:%d' % server_container.server_thread.port
# import windmill
# windmill.stdout, windmill.stdin = sys.stdout, sys.stdin
from windmill.authoring import setup_module, teardown_module
# from windmill.authoring.djangotest import WindmillDjangoUnitTest
# if 'ie' in labels:
# global_settings.START_IE = True
# sys.argv.remove('ie')
# elif 'safari' in labels:
# global_settings.START_SAFARI = True
# sys.argv.remove('safari')
# elif 'chrome' in labels:
# global_settings.START_CHROME = True
# sys.argv.remove('chrome')
# else:
global_settings.START_FIREFOX = True
# if 'firefox' in labels:
# sys.argv.remove('firefox')
# from django.conf import settings
tests = []
for name in settings.INSTALLED_APPS:
for suffix in ['tests', 'wmtests', 'windmilltests']:
x = attempt_import(name, suffix)
if x is not None: tests.append((suffix,x,));
# if 'manage.py' in sys.argv:
# sys.argv.remove('manage.py')
# if 'test_windmill' in sys.argv:
# sys.argv.remove('test_windmill')
server_container = ServerContainer()
server_container.fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml', 'admin-views-unicode.xml',
'multiple-child-classes', 'admin-views-actions.xml', 'string-primary-key.xml', 'admin-views-person.xml']
server_container.start_test_server()
wmtests = []
for (ttype, mod,) in tests:
if ttype == 'tests':
for ucls in [getattr(mod, x) for x in dir(mod)
if ( type(getattr(mod, x, None)) in (types.ClassType,
types.TypeType) ) and
issubclass(getattr(mod, x), WindmillDjangoUnitTest)
]:
wmtests.append(ucls.test_dir)
global_settings.TEST_URL = 'http://localhost:%d' % server_container.server_thread.port
# import windmill
# windmill.stdout, windmill.stdin = sys.stdout, sys.stdin
from windmill.authoring import setup_module, teardown_module
# from django.conf import settings
tests = []
for name in settings.INSTALLED_APPS:
for suffix in ['tests', 'wmtests', 'windmilltests']:
x = attempt_import(name, suffix)
if x is not None: tests.append((suffix,x,));
wmtests = []
for (ttype, mod,) in tests:
if ttype == 'tests':
for ucls in [getattr(mod, x) for x in dir(mod)
if ( type(getattr(mod, x, None)) in (types.ClassType,
types.TypeType) ) and
issubclass(getattr(mod, x), WindmillDjangoUnitTest)
]:
wmtests.append(ucls.test_dir)
else:
if mod.__file__.endswith('__init__.py') or mod.__file__.endswith('__init__.pyc'):
wmtests.append(os.path.join(*os.path.split(os.path.abspath(mod.__file__))[:-1]))
else:
wmtests.append(os.path.abspath(mod.__file__))
if mod.__file__.endswith('__init__.py') or mod.__file__.endswith('__init__.pyc'):
wmtests.append(os.path.join(*os.path.split(os.path.abspath(mod.__file__))[:-1]))
else:
wmtests.append(os.path.abspath(mod.__file__))
if len(wmtests) is 0:
print 'Sorry, no windmill tests found.'
else:
testtotals = {}
x = logging.getLogger()
x.setLevel(0)
from windmill.server.proxy import logger
from functest import bin
from functest import runner
runner.CLIRunner.final = classmethod(lambda self, totals: testtotals.update(totals) )
import windmill
setup_module(tests[0][1])
#sys.argv = sys.argv + wmtests
sys.argv = wmtests
bin.cli()
teardown_module(tests[0][1])
if testtotals['fail'] is not 0:
sleep(.5)
sys.exit(1)
if failures:
sleep(.5)
sys.exit(failures)
if len(wmtests) is 0:
print 'Sorry, no windmill tests found.'
else:
testtotals = {}
x = logging.getLogger()
x.setLevel(0)
from windmill.server.proxy import logger
from functest import bin
from functest import runner
runner.CLIRunner.final = classmethod(lambda self, totals: testtotals.update(totals) )
import windmill
setup_module(tests[0][1])
sys.argv = sys.argv + wmtests
bin.cli()
teardown_module(tests[0][1])
# if testtotals['fail'] is not 0:
# sleep(.5)
# sys.exit(1)
if failures or testtotals['fail'] is not 0:
sys.exit(failures + testtotals['fail'])
# Restore the old settings.
settings.INSTALLED_APPS = old_installed_apps
settings.ROOT_URLCONF = old_root_urlconf
@ -251,6 +275,7 @@ def django_tests(verbosity, interactive, test_labels):
settings.LOGIN_URL = old_login_url
settings.MIDDLEWARE_CLASSES = old_middleware_classes
global do_windmill
if __name__ == "__main__":
from optparse import OptionParser
usage = "%prog [options] [model model model ...]"
@ -260,6 +285,8 @@ if __name__ == "__main__":
help='Verbosity level; 0=minimal output, 1=normal output, 2=all output')
parser.add_option('--noinput', action='store_false', dest='interactive', default=True,
help='Tells Django to NOT prompt the user for input of any kind.')
parser.add_option('--windmill', action='store_true', dest='windmill', default=False,
help='Tells Django to run the Windmill functional tests as well.')
parser.add_option('--settings',
help='Python path to settings module, e.g. "myproject.settings". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.')
options, args = parser.parse_args()
@ -268,4 +295,5 @@ if __name__ == "__main__":
elif "DJANGO_SETTINGS_MODULE" not in os.environ:
parser.error("DJANGO_SETTINGS_MODULE is not set in the environment. "
"Set it or use --settings.")
do_windmill = options.windmill
django_tests(int(options.verbosity), options.interactive, args)