exception handling & EOF...
... Introduce basic exception handling (need to check
"end of input exception" when I can get online).
When user enters EOF by ctrl-D on Linux cleanly shutdown
with Goodbye.
Start with a usage message.    Example output->

Example output (termination with ctrlD:)

$ java -ea FractionCalculator
Simple text-based calculator to compute with fractions.
	Author: Oliver S. Smart

	Usage: introduce space deliminated commands like:
	  5/7 * 31/11 - 2 neg
	you can use fractions or whole numbers or one of the commands:
	  abs neg clear quit               (abbreviations allowed).
	The result of the fraction is held in memory and can be used as the start of the next calculation.
	To stop the program enter quit or Ctrl-D.

Enter command: 1 + 2
Result is 3
Enter command: Goodbye
$
Introduce simpleTestsNoVerbose()... Test output->
... to be clearer for assert test invokation.

Test output->

$ java -ea FractionTest
FractionTest tests verbose output:
test "Divide by zero: that 1/0 should throw an IllegalArgumentException exception" passes.

test ".equal method: that 1/2 .equals 1/2" passes.

test ".equal method: that 1/2 equals 3/6" passes.

test ".equal method: that -1/2 equals 1/-2" passes.

test ".equal method: that -1/-2 equals 1/2" passes.

test ".equal method: that 4/-8 does not equal 1/2" passes.

test "Multiply: that multiplying 1/2 by 3/5 gives 3/10" passes.

test "Divide: that (2/9) / (3/5) gives 10/27" passes.

test "Divide by zero: that (1/1) / (0/1) should throw an IllegalArgumentException exception" passes.

test "Add: that 1/2 + 1/4 gives 3/4" passes.

test "Add: that 2/9 + 3/5 gives 37/45" passes.

test "Subtract: that 2/9 - 3/5 gives -17/45" passes.

test "absValue: that absValue(-7/9) = 7/9" passes.

test "negate: that negate(7/9) = -7/9" passes.

test ".toString(): that (6/5).toString() is equal to "6/5" " passes.

test ".toString(): that (6/1).toString() is equal to "6" " passes.

test ".toString(): that (-1/4).toString() is equal to "-1/4" " passes.

test ".toString(): that (1/-4).toString() is equal to "-1/4" " passes.

FractionTest: All tests pass
assert-type test Fraction class at start of main.
Rename FractionTest method assert. Output->
$ java -ea FracCalcOliverTest
FracCalcOliverTest tests verbose output:
test "Simple parsing and operation: input of '1/2 * 3/4' should give '3/8'. " passes.

test "Simple parsing and operation: input of '1/2 / 3/4' should give '2/3'. " passes.

test "Simple parsing and operation: input of ' 1/2   +  -1/4 ' should give '1/4'. " passes.

test "Simple parsing and operation: input of '1/2 - 3/4' should give '-1/4'. " passes.

test "Handling fractions with -ve denominator: input of '-2/-3' should give '2/3'. " passes.

test "Whole numbers: input of '3 * 9' should give '27'. " passes.

test "Abs: input of '-3 * 2/3 aB' should give '2'. " passes.

test "Neg: input of '3/7 N' should give '-3/7'. " passes.

test "Clear: input of '1/2 - Cl  9 * 7' should give '63'. " passes.

test "Quit: input of '1/2 - quit 30 + 10' should result in quitProgram() true. " passes.

test "Invalid input no space: input of '1/2+1/2' should produce an ERROR. Actually '
ERROR unrecognized input '1/2+1/2' cannot process this
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

test "Invalid input two operators : input of '1/2 + - 3/4' should produce an ERROR. Actually '
ERROR you have input two operators: + and -.
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

test "Entering an invalid fraction input of '1/0' should produce an ERROR. Actually '
ERROR you have specified a fraction 1/0 with a zero denominator.
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

test "Try to divide by zero '1/2 / 0/3' should produce an ERROR. Actually '
ERROR you cannot divide by zero.
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

FracCalcOliverTest: All tests pass
assert FractionCalculatorTest when starting...
... FractionCalculator
Test FracCalcOliver as part of..    Test output->
FractionCalculatorTest rather than separately.

Test output for the combined tests of everything:

$ java -ea FractionCalculatorTest
$ java -ea FractionCalculatorTest
FractionCalculator Tests verbose output:

First run tests of FracCalcOliver:
test "Simple parsing and operation: input of '1/2 * 3/4' should give '3/8'. " passes.

test "Simple parsing and operation: input of '1/2 / 3/4' should give '2/3'. " passes.

test "Simple parsing and operation: input of ' 1/2   +  -1/4 ' should give '1/4'. " passes.

test "Simple parsing and operation: input of '1/2 - 3/4' should give '-1/4'. " passes.

test "Handling fractions with -ve denominator: input of '-2/-3' should give '2/3'. " passes.

test "Whole numbers: input of '3 * 9' should give '27'. " passes.

test "Abs: input of '-3 * 2/3 aB' should give '2'. " passes.

test "Neg: input of '3/7 N' should give '-3/7'. " passes.

test "Clear: input of '1/2 - Cl  9 * 7' should give '63'. " passes.

test "Quit: input of '1/2 - quit 30 + 10' should result in quitProgram() true. " passes.

test "Invalid input no space: input of '1/2+1/2' should produce an ERROR. Actually '
ERROR unrecognized input '1/2+1/2' cannot process this
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

test "Invalid input two operators : input of '1/2 + - 3/4' should produce an ERROR. Actually '
ERROR you have input two operators: + and -.
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

test "Entering an invalid fraction input of '1/0' should produce an ERROR. Actually '
ERROR you have specified a fraction 1/0 with a zero denominator.
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

test "Try to divide by zero '1/2 / 0/3' should produce an ERROR. Actually '
ERROR you cannot divide by zero.
	Resetting calculator to its initial state (no operator and 0 as value)' is output." passes.

FracCalcOliverTest: All tests pass
Now test FractionCalculator:
test "Coursework 2 sheet 'Extended example' table 1st line start from 0/1 '1/2 - 3/4 * abs ' should give Fraction.equals 1/4. " passes.

test "Test giving previous result as the input fraction '* 8 neg' should give Fraction.equals -2/1 " passes.

test "Test entry of quit in mixed case  '+ 4 abs qUiT  neg' should give .quitProgram()==true" passes.

Now start test 'Entering two operations: '1 - - 1' should result in...
 	 (a) foundError() providing true to caller
	 (b) direct print out of an appropriate error message. So the next message
	     should be an ERROR message! (This check must be by "eye".)'

ERROR you have input two operators: - and -.
	Resetting calculator to its initial state (no operator and 0 as value)
test "Entering two operations: '1 - - 1' foundError()==true" passes.

Summary: All tests pass
allow my preferred calculator to be run...
using command line option -a.
Only do the '1 -- 1' test if in verbose mode...
... as it involves direct output to user.

This makes test work properly if invoked by assert.
Make advanced calculator respond to EOF & ...
catch errors like basic.