Writing Tests for Core ====================== Where tests belong ------------------ If it's a regression, it belongs in :file:`trac/tests/functional/testcases.py` for now. Module-specific tests generally already have a :file:`trac/$MOD/tests/functional.py` which you can add to. The environment is brought up as few times as possible, for speed, and your test order is guaranteed to be run in the order it's added to the suite, at the end of the file. .. _using-twill: Using Twill ----------- The definitive guide for Twill commands is the `Command Reference `_, but 90% of what you need is contained by convenience methods in :class:`~trac.tests.functional.tester.FunctionalTester`\ .\ :meth:`go_to_*`\ and the following few commands: :tc.find: Looks for a regex on the current page. If it isn't found, raise an exception. Example:: tc.find("\bPreferences\b") :tc.notfind: Like find, but raises an exception if it *is* there. Example:: tc.find(r"\bPreferences\b") :tc.follow: Find a link matching the regex, and simulate clicking it. Example:: tc.follow("Login") :tc.fv: Short for `formvalue`, fill in a field. Example:: tc.fv("searchform", "q", "ponies") :tc.submit: Submit the active form. Example:: tc.submit() Example ------- This is how you might construct a test that verifies that admin users can see detailed version information. Start with the navigation. You shouldn't rely on the browser being in any specific state, so begin with :meth:`FunctionalTester.go_to_*`. :: def test_about_page(self): self._tester.logout() # Begin by logging out. self._tester.go_to_front() # The homepage has a link we want tc.follow("About") # Follow the link with "About" in it tc.find("Trac is a web-based software") tc.notfind("Version Info") self._tester.login("admin") self._tester.go_to_front() tc.follow("About") tc.find("Trac is a web-based software") tc.find("Version Info")