Manual:Pre-commit checklist

From MediaWiki.org
Jump to: navigation, search

This is an attempt to create a checklist to use before making a commit. Some of this duplicates what is in the coding conventions, but is in the form of quick checks. This checklist is in the same vein as The Checklist Manifesto. Some of these may seem silly (like asking a doctor “did you wash your hands?”) but they're meant to avoid problems that may be overlooked.

Back-end[edit]

  • Did your code run without errors under E_STRICT?[1]
  • Did your code break any of the unit tests? See Manual:PHP unit testing
  • Have you tested all exit points from your code?
  • Did you use tabs instead of spaces to indent?
  • Did you remove extraneous, commented-out debug code? (e.g. #var_dump( $array ); and/or #die();)
  • If you've created a new function, did you document the function parameters and what it returns using Doxygen?
  • Have you run stylize.php on any new PHP file you've added to fix your whitespace?
  • Have you created any identifiers that didn't use camelCase (ie. underscores)?
  • Is every exception tested?
  • If you have multiple return points, are they tested?
  • Does each message you've created exist in languages/i18n/en.json, have message documentation in languages/i18n/qqq.json?
  • Is each use of fopen(), fread(), etc. checked for errors or problems?
  • Did you use t or b flags for fopen() to ensure Windows compatibility?
  • Have you used the proper output functions? echo should almost never be used.
  • Have you used the proper termination functions? exit should almost never be used.
  • Where appropriate, have you used the MediaWiki wrapper functions instead of their PHP equivalents?
  • If you added a new test to parserTests.txt, did you give it a new name?
  • If you added a new hook, did you document it?

Testing[edit]

When adding features, it's vital to verify you didn't break existing functionality. We have three kinds of tests you can be required to write for backend code:

  • Parser tests: Test the parser output for wikitext (see tests/parser/parserTests.php). Try running php tests/parser/parserTests.php --quick --quiet to see how those work. Everything should pass, in theory. You can add new tests or fix existing ones by editing tests/parser/parserTests.txt.
  • Unit tests (PHPUnit): Located in the tests/phpunit directory. They are typically run through the phpunit.php script invoked from the aforementioned directory. These tests also include ordinary parser tests, though parserTests.php probably works faster. Read Manual:PHP unit testing for more information about how to setup PHPUnit and further details on how it is used inside MediaWiki.
  • Selenium: tests are in directory tests/selenium.

Anyway, if you can't write an automatic test, do manual testing. If you cause breakage too often, people will get annoyed at you.

Front-end[edit]

  • Tested in an actual browser? The smallest changes could break things that aren't obvious. Kick that browser open, navigate around, perhaps make an edit, log-in, add a page to your watchlist.
  • Did your code break any of the unit tests? See Manual:JavaScript unit testing
  • Will it work at least in the browsers we support for A-grade functionality (check Compatibility#Browsers)?
  • Are there any implied globals other than jQuery or mediaWiki? There should not be, (not $ either)

Automatic testing[edit]

Jenkins runs some tests on most repositories when changes are submitted to gerrit and approved. You should run these tests locally before committing a patch. Many extensions implement the standard Continuous integration/Entry points and so you can run npm test and grunt test before committing.

Realistically, you won't always manually test every change. It depends on how big failure can be and whether there are good unit tests for the change.

  • Does it validate (or did you at least run it through) JSHint or JSLint ? (check recommended settings)
  • Unit tests (QUnit): Located in the tests/qunit directory. They are typically run from the browser via Special:JavaScriptTest/qunit. Read Manual:JavaScript unit testing for more information on how to enable it, how it works and the various options that are available.


References[edit]

  1. Put error_reporting(-1); in the entry file. See also Manual:How to debug.
Coding conventionsManual:Coding conventions
General All languagesManual:Coding conventions#Code structure · Development policyDevelopment policy · Security for developersSecurity for developers · Pre-commit checklistManual:Pre-commit checklist · Performance guidelinesPerformance guidelines(draft) · Style guideDesign/Living style guide · Accessibility guide for developersAccessibility guide for developers(draft)
PHP Code conventionsManual:Coding conventions/PHP · PHPUnit test conventionsManual:PHP unit testing/Writing unit tests#Test_conventions · Security checklist for developersSecurity checklist for developers
JavaScript Code conventionsManual:Coding conventions/JavaScript · Learning JavaScriptLearning JavaScript
CSS Code conventionsManual:Coding conventions/CSS
Database Code conventionsManual:Coding conventions/Database · Database policyDevelopment policy#Database policy
Python Code conventionsManual:Coding conventions/Python
Ruby Code conventionsManual:Coding conventions/Ruby
Selenium/Cucumber Code conventionsManual:Coding conventions/Selenium
Java Code conventionsManual:Coding conventions/Java
API client code Standards for API client librariesAPI:Client code/Gold standard