Writing Automated Tests for Processing.js

I finished up some work today on the Processing.js automated test tools.  Previously I wrote a test harness to allow JavaScript based unit tests, as well as parser tests.  However, after watching some of my students struggle through bugs during the lead up to their 0.5 release, I decided we needed a way to also be able to write them in Processing.  Right now I see a lot of tests being drawn into sketches, and then manually comparing results.  It's sub-optimal to say the least.

Having written the unit test functions already, I decided to simply load them into Processing via a library.  Processing.js, like Processing, has the capability to load "native" libraries.  In Processing.js, such libraries are JavaScript functions written like so:

(function() {  
  Processing.lib.Foo = function() {  
    this.something = function() {...};  

Then, in your Processing.js sketch code, you initialize the library by calling its constructor (e.g., Foo();), and then any function (e.g., something();) will be available to your code.

Using this technique I added the same set of _check* functions already available to JavaScript unit tests, such that I'm now able to write small unit tests in Processing like this:

// Tests for Processing str() function - http://processingjs.org/reference/str%28%29  
boolean b = false;  
byte y = -28;  
char c = 'R';  
float f = -32.6;  
int i = 1024;  
_checkEqual('false', str(b));  
_checkEqual('-28', str(y));  
_checkEqual('R', str(c));  
_checkEqual('-32.6', str(f));  
_checkEqual('1024', str(i));

I've fully documented the setup and use of the new automated testing features. All Processing.js developers (especially my students), should read through this. Beginning with the 0.6 code, we'll start using this by default for all regression and API testing.

Show Comments