public void complete(Runnable r) {
		//
		// Store Test Results
		//
		if (r instanceof Results) {
			Operation op = ((Results) r).getOperation();
			boolean submit = op.isSubmit();
			//
			if (r instanceof TestResults) {
				TestResults tr = (TestResults) r;
				if (tr.getTestResults() == null) {
					//
					// NULL tests results indicate a test that timed out
					// or raised an exception.
					//
					if (submit) {
						// Failed Submission.
						markFailed(new boolean[] { false });
					} else {
						// Failed Test.
						logEndTest(new int[] { Tester.TestResult.FAIL }, null);
					}
				} else {
					//
					// Valid test results indicate the unit tests ran as
					// expected.
					// We now need to check if the results are all good.
					//
					if (submit) {
						// Successful Submit
						if (tr.getTestResults().isOk()) {
							markSuccess(tr.getTestResults().getScore());
						} else {
							markFailed(tr.getTestResults().getScore());
						}
					} else {
						// Successful Test
						logEndTest(tr.getTestResults().getResults(), tr.getTestResults().getAnimationOutput());
					}
				}
			} else if (r instanceof CompileResults) {
				//
				// Store Compilation Results.
				//
				addCompileSuccess(((CompileResults) r).wasSuccess());
				//
				if (submit) {
					// Submission with compile error.
					markFailed(new boolean[] { false });
				}
			} else {
				//
				// Dunno what it was, but if it is a submit its wrong.
				//
				if (submit) {
					markFailed(new boolean[] { false });
				}
			}
		}
		//
		// Clear current Operation.
		//
		myCurrentOperation = null;
		//
		addLine(null, "Complete.");
	}