private bool decode(BinaryBitmap source, float rotation, String expectedText, IDictionary <string, string> expectedMetadata, bool tryHarder) { String suffix = String.Format(" ({0}rotation: {1})", tryHarder ? "try harder, " : "", (int)rotation); IDictionary <DecodeHintType, Object> hints = new Dictionary <DecodeHintType, Object>(this.hints); if (tryHarder) { hints[DecodeHintType.TRY_HARDER] = true; } // Try in 'pure' mode mostly to exercise PURE_BARCODE code paths for exceptions; // not expected to pass, generally Result result = null; try { var pureHints = new Dictionary <DecodeHintType, object>(); pureHints[DecodeHintType.PURE_BARCODE] = true; result = barcodeReader.decode(source, pureHints); } catch (ReaderException) { // continue } var multiReader = barcodeReader as MultipleBarcodeReader; if (multiReader != null) { var expectedResults = expectedText.Split(new[] { Environment.NewLine }, StringSplitOptions.None); var results = multiReader.decodeMultiple(source, hints); if (results == null) { throw new ReaderException(); } if (expectedResults.Length != results.Length) { Log.InfoFormat("Count mismatch: expected '{0}' results but got '{1}'", expectedResults.Length, results.Length); throw new ReaderException(); } foreach (var oneResult in results) { if (expectedFormat != oneResult.BarcodeFormat) { Log.InfoFormat("Format mismatch: expected '{0}' but got '{1}'{2}", expectedFormat, oneResult.BarcodeFormat, suffix); return(false); } String resultText = oneResult.Text; bool found = false; foreach (var expectedResult in expectedResults) { if (expectedResult.Equals(resultText)) { found = true; break; } } if (!found) { Log.InfoFormat("Content was not expected: '{0}'", resultText); return(false); } } foreach (var expectedResult in expectedResults) { bool found = false; foreach (var oneResult in results) { String resultText = oneResult.Text; if (expectedResult.Equals(resultText)) { found = true; break; } } if (!found) { Log.InfoFormat("Content was expected but not found: '{0}'", expectedResult); return(false); } } } else { if (result == null) { result = barcodeReader.decode(source, hints); } if (result == null) { throw new ReaderException(); } if (expectedFormat != result.BarcodeFormat) { Log.InfoFormat("Format mismatch: expected '{0}' but got '{1}'{2}", expectedFormat, result.BarcodeFormat, suffix); return(false); } String resultText = result.Text; if (!expectedText.Equals(resultText)) { Log.InfoFormat("Content mismatch: expected '{0}' but got '{1}'{2}", expectedText, resultText, suffix); return(false); } IDictionary <ResultMetadataType, object> resultMetadata = result.ResultMetadata; foreach (var metadatum in expectedMetadata) { ResultMetadataType key; ResultMetadataType.TryParse(metadatum.Key, out key); Object expectedValue = metadatum.Value; Object actualValue = resultMetadata == null ? null : resultMetadata[key]; if (!expectedValue.Equals(actualValue)) { Log.InfoFormat("Metadata mismatch for key '{0}': expected '{1}' but got '{2}'", key, expectedValue, actualValue); return(false); } } } return(true); }
private bool decode(BinaryBitmap source, float rotation, String expectedText, IDictionary <string, string> expectedMetadata, bool tryHarder) { String suffix = String.Format(" ({0}rotation: {1})", tryHarder ? "try harder, " : "", (int)rotation); IDictionary <DecodeHintType, Object> hints = new Dictionary <DecodeHintType, Object>(); if (tryHarder) { hints[DecodeHintType.TRY_HARDER] = true; } var multiReader = barcodeReader as MultipleBarcodeReader; if (multiReader != null) { var expectedResults = expectedText.Split(new [] { Environment.NewLine }, StringSplitOptions.None); var results = multiReader.decodeMultiple(source, hints); if (results == null) { throw ReaderException.Instance; } if (expectedResults.Length != results.Length) { Console.WriteLine("Count mismatch: expected '{0}' results but got '{1}'\n", expectedResults.Length, results.Length); throw ReaderException.Instance; } foreach (var result in results) { if (expectedFormat != result.BarcodeFormat) { Console.WriteLine("Format mismatch: expected '{0}' but got '{1}'{2}\n", expectedFormat, result.BarcodeFormat, suffix); return(false); } String resultText = result.Text; bool found = false; foreach (var expectedResult in expectedResults) { if (expectedResult.Equals(resultText)) { found = true; break; } } if (!found) { Console.WriteLine("Content was not expected: '{0}'\n", resultText); return(false); } } foreach (var expectedResult in expectedResults) { bool found = false; foreach (var result in results) { String resultText = result.Text; if (expectedResult.Equals(resultText)) { found = true; break; } } if (!found) { Console.WriteLine("Content was expected but not found: '{0}'\n", expectedResult); return(false); } } } else { Result result = barcodeReader.decode(source, hints); if (result == null) { throw ReaderException.Instance; } if (expectedFormat != result.BarcodeFormat) { Console.WriteLine("Format mismatch: expected '{0}' but got '{1}'{2}\n", expectedFormat, result.BarcodeFormat, suffix); return(false); } String resultText = result.Text; if (!expectedText.Equals(resultText)) { Console.WriteLine("Content mismatch: expected '{0}' but got '{1}'{2}\n", expectedText, resultText, suffix); return(false); } IDictionary <ResultMetadataType, object> resultMetadata = result.ResultMetadata; foreach (var metadatum in expectedMetadata) { ResultMetadataType key; ResultMetadataType.TryParse(metadatum.Key, out key); Object expectedValue = metadatum.Value; Object actualValue = resultMetadata == null ? null : resultMetadata[key]; if (!expectedValue.Equals(actualValue)) { Console.WriteLine("Metadata mismatch for key '{0}': expected '{1}' but got '{2}'\n", key, expectedValue, actualValue); return(false); } } } return(true); }