More fair round-robin test bucketing.
Document bucketing algorithm
Remove extraneous newline
Merge pull request #216 from asottile/more_fair_buckets

More fair round-robin test bucketing.
Move sys.exit to outside main runner.
travis stop crashing on catbox
Merge pull request #224 from bukzor/fix_travis_re_catbox

travis stop crashing on catbox
When stripping testify frames, make sure to include all non-testify frames.

Closes #177
Reformat the multiple-exception message.
add catbox coverage
there's no reason to run instance fixtures if class setup has failed.
fix test filtering regression in more-fair-bucketing
Merge pull request #225 from bukzor/catbox_coverage

add catbox coverage
travis bling
small tweaks to get tests passing under python -m testify.test_program test
Merge pull request #228 from bukzor/travis_bling

travis bling
Adds regression test for #227 Refs #226
Merge pull request #219 from dnephin/cleanup_testify_entry_point

Allow testify to be run programmatically

Previously testify's main entry point was the constructor of the
TestProgram class. This entry point also "returned" by calling
sys.exit(). This makes it impossible to call from other code.

I've moved the main entry point to test_program.main. It still calls
sys.exit() in main, but now you could call TestProgram().run() and
handle the response.

My use case here is an acceptance test suite that sets up a sandbox. I
would like to be able to setup the sandbox in a context manager around
testify. Something like this:

  with sandbox():
      result = TestProgram().run()
Merge pull request #221 from bukzor/skip_instance_setup_if_class_setup_fail

there's no reason to run instance fixtures if class setup has failed.

Closes #220

Instrumenting the "instance" setup/teardown in the case of class setup failure reveals the issue:
The test methods are not run, but the test instance setup/teardowns are run where the methods would have run.

  ========================================================================
  test.test_case_test ExceptionDuringClassSetupTest.test_child
  ------------------------------------------------------------
  Traceback (most recent call last):
    File "./test/test_case_test.py", line 440, in test_child
      assert_equal(expected, test_case.run_methods)
  AssertionError: assertion failed: l == r
  l: ['parent class_setup', 'child class_teardown', 'parent class_teardown']
  r: ['parent class_setup', 'parent setup', 'child teardown', 'parent teardown', 'parent setup', 'child teardown', 'parent teardown', 'child class_teard
  own', 'parent class_teardown']

  Diff:
  l: ['parent class_setup', 'child class_teardown', 'parent class_teardown']
  r: ['parent class_setup', 'parent setup', 'child teardown', 'parent teardown', 'parent setup', 'child teardown', 'parent teardown', 'child class_teard
  own', 'parent class_teardown']

  ========================================================================

  ========================================================================
  test.test_case_test ExceptionDuringClassSetupTest.test_parent
  ------------------------------------------------------------
  Traceback (most recent call last):
    File "./test/test_case_test.py", line 434, in test_parent
      assert_equal(expected, test_case.run_methods)
  AssertionError: assertion failed: l == r
  l: ['parent class_setup', 'parent class_teardown']
  r: ['parent class_setup', 'parent setup', 'parent teardown', 'parent class_teardown']

  Diff:
  l: ['parent class_setup', 'parent <>class_teardown']
  r: ['parent class_setup', 'parent <setup', 'parent teardown', 'parent >class_teardown']
Merge pull request #222 from bukzor/reformat_multiple_errors

Reformat the multiple-exception message.

We added multiple-exception support to testify recently, but I don't find
the output to be very readable or understandable. This patch refomats
them to match the python3.1 nested-exception support (see
http://docs.python.org/3.1/reference/simple_stmts.html#the-raise-statement).