public void Setup() {
			this._letterOrDigit = Prims.LetterOrDigit;
			this._letterOrDigit.Act += OnLetterOrDigitParserSuccess;
			this._letter = Prims.Letter;
			this._letter.Act += OnLetterParserSuccess;
			this._symbol = Prims.Symbol;
			this._symbol.Act += OnSymbolParserSuccess;

			this._LetterOrDigitButNotLetterDifferenceParser = new DifferenceParser(this._letterOrDigit, this._letter);
			this._LetterOrDigitButNotLetterDifferenceParser.Act += OnDifferenceParserSuccess;

			this._symbolParserSuccess = false;
			this._letterParserSuccess = false;
			this._letterOrDigitParserSuccess = false;
			this._differenceParserSuccess = false;

		}
		public void InputMatchesFirstParserAndSecondParser_SecondParserShorter_Success()
		{
			IScanner letter = new StringScanner("abc");
			DifferenceParser parser = new DifferenceParser(Ops.Sequence(this._letterOrDigit, this._letterOrDigit),
																this._letterOrDigit);
			Assert.IsTrue(parser.Parse(letter).Success);
		}
		public void InputMatchesFirstParserAndSecondParser_SecondParserLonger_Fail()
		{
			IScanner letter = new StringScanner("abc");
			DifferenceParser parser = new DifferenceParser(this._letterOrDigit,
											Ops.Sequence(this._letterOrDigit, this._letterOrDigit));

			Assert.IsFalse(parser.Parse(letter).Success);
		}
		public void DifferenceParser()
		{
			DifferenceParser parser = new DifferenceParser(this._letterOrDigit, this._symbol);
			Assert.AreEqual(this._letterOrDigit, parser.FirstParser);
			Assert.AreEqual(this._symbol, parser.SecondParser);
		}
		public void InputDoesNotMatchFirstParserButMatchesSecondParser_ScanPosition_NoChange()
		{
			IScanner symbol = new StringScanner("+hello");
			DifferenceParser parser = new DifferenceParser(this._letterOrDigit, this._symbol);
			parser.Parse(symbol);
			Assert.AreEqual(0, symbol.Offset);
		}
		public void InputDoesNotMatchFirstParserButMatchesSecondParser_Actions_None()
		{
			IScanner symbol = new StringScanner("+");
			DifferenceParser parser = new DifferenceParser(this._letterOrDigit, this._symbol);
			parser.Act += OnDifferenceParserSuccess;
			parser.Parse(symbol);
			Assert.IsFalse(_differenceParserSuccess);
			Assert.IsFalse(_letterOrDigitParserSuccess);
			Assert.IsFalse(_symbolParserSuccess); // should never call since first parser doesn't match
		}
		public void InputDoesNotMatchFirstParserButMatchesSecondParser_Fail()
		{
			IScanner symbol = new StringScanner("+");
			DifferenceParser parser = new DifferenceParser(this._letterOrDigit, this._symbol);
			parser.Act += OnDifferenceParserSuccess;
			Assert.IsFalse(parser.Parse(symbol).Success);
		}