Remove unnecessary publish test foo
Fix after_each execution order

Execution order of after_each was not quite right. The order should be
from the inner most block outward. However, the execution was running
the inner most block first followed by the outter most block going
inward.
Fix traceback issue #286

The base output handler was not saving the trace info when it was
notified that an error/failure occurred. The error/failure handler needs
to save the trace information, otherwise the trace information of the
test call site will be used. Furthermore, we do not need to pass in
trace information for test end messages, since the trace information is
already present in the context element at creation. The output handler
formatter just needs to prioritize the passed in debug information over
the context element's trace information since the passed in debug
information will provide more precise location information.
Distinguish between test errors and test failures

A test error occurs when an error is thrown or an assert fails outside
of the test. While test failures only occur when an assert fails inside
a test.

Call setfenv on 'assert' to replace 'error' with 'fail', such that
'fail' throws a special failure table instead of a string. Hence,
assertion failures will throw a failure table and are distinct from
errors. Additionally, the failure table contains the same error string
that would have been thrown with 'error'.
Enable/Fix failing tests in cl_spec.lua

Tests in cl_spec.lua were not being executed because they were nested
inside an 'it' block. Tests need to be in a 'describe' block in order to
execute, otherwise they are silently disabled. Nesting an 'it' block
inside another 'it' block should probably be an error. After enabling the
tests, many of the tests were failing.

Tags were not being filtered correctly. Instead of running tests with
one or more tags listed in the --tags option, tests were being excluded
if any of the listed tags were not present.

Need to incorporate pull request #293 in order to fix the compile fail
test. This also addresses issue #273.

According to the tests, the return code for busted should be the number
of errors/failures. However, the return code needs to saturate at 255
since it can only occupy 8-bits.
Support 'pending' inside an 'it' block

When 'pending' is called from an 'it' block, the rest of the test should
be skipped and the test should be flagged as pending. This can be
acheived by throwing a 'pending' table when 'pending' is called from an
'it' block, then publishing a 'pending' message when the 'pending' table
is caught. This causes the remainder of the test to be skipped and the
output handler to be notified that the current test is 'pending'. Also,
make sure the --suppress-pending option is honored.
Support spec/test aliases for it

Add 'spec' and 'test' aliases for 'it' blocks.
Refactor descriptor executor registration

Currently a debug trace is saved for registered descriptors that do not
match 'file'. However, since the 'file' executor is only called by the
test file loader directly, via busted.executors, before any files are run,
it is sufficient to check that the current context does not have a
parent instead of checking that the descriptor is not 'file'.
Remove file function from environment
Error when unsupported functions called from test

Calling randomize/describe/it/setup/before_each/after_each/teardown
functions from inside an 'it' block is not valid, so throw an error when
any of these functions are called inside an 'it'. In addition, pending
is not valid inside a 'finally' block. Ensure that the error string
reflects the error level of the caller.
Unregister functions inside support functions

Calling any of the busted registered functions from a support function
is not valid, so throw an error if they are called from setup/teardown
or before_each/after_each.
Add commandline option to specify a random seed
Add support for setup/teardown in file context
Add support for randomize in file context
Add commandline flag to force randomization
Refactor format of error descriptions

Format error descriptions to be the same as failure descriptions
whenever possible. The only time this is not possible is when trace
information is not present for the error. In such a case just output
error description without using any trace information.
Skip tests if setup fails

If setup fails, then do not run any tests in the current context block.
Skip test if before_each fails

Do not run current test if before_each fails. In addition, a failure in
before_each or after_each should cause the current test to also fail.
When this happens, add to error message that before_each and/or
after_each failed. When a before_each fails, stop running before_each's
in child context blocks, and run after_each's starting from the last
executed context block.
Refactor how test phase status results are merged

Use a status object to store the result of a context block execution.
The result of each execution can then be used to update the status
object instance, which makes failures/errors sticky.