public void LoadFromEmbeddedResourceOk() { //Act var loadResult = ISBNRangeMessage.LoadFromEmbeddedResource(); //Assert loadResult.Unwrap(); }
public void LoadXmlInTreeSmokeTest() { var isbnRangeMessage = ISBNRangeMessage.LoadFromFile(TestContext.CurrentContext.TestDirectory + "\\ISBNRangeMessage.xml"); var ruleTrees = PrefixTreeBuilder.BuildFromISBNRangeMessage(isbnRangeMessage); ruleTrees.Count.Should().Be(2); }
public void ISBN13Examples() { //Validate and get metadata from an ISBN-13 var loadResult = ISBNRangeMessage.LoadFromEmbeddedResource(); var isbn13Parser = new ISBN13Parser(loadResult.Unwrap()); var parseResult = isbn13Parser.Parse("9780671704278"); //Unwrap (throws exception when result is an error) ISBN13.Metadata isbn13Metadata = parseResult.Unwrap(); Console.WriteLine(isbn13Metadata.ToString()); //: 978-0-671-70427-8 //match: handle Err or Ok case parseResult.Match( err => { //This is executed when the result is an error switch (err.ErrorKind) { case ISBNParseErrorKind.InvalidEan: break; case ISBNParseErrorKind.NoMetadataFound: break; case ISBNParseErrorKind.InvalidISBN13: break; case ISBNParseErrorKind.InvalidISBN10: break; default: throw new ArgumentOutOfRangeException(); } return(err.Message); }, metadata => { //This is executed when the result is Ok Console.WriteLine($"ISBN13: {metadata.ToString()}, Country: {metadata.CountryAgency}"); //: ISBN13: 978-0-671-70427-8, Country: English language //An isbn13 is a valid EAN13 var ean13 = metadata.Ean; Console.WriteLine($"Code: {ean13.Ean13Code} Checksum: {ean13.Checksum}"); //: Code: 9780671704278 Checksum: 8 return(metadata.ToString()); }); //See: ISBN13MetaDataInfoTests for more examples }
public void ISBN13FromISBN10Examples() { var loadResult = ISBNRangeMessage.LoadFromEmbeddedResource(); var isbn13Parser = new ISBN13Parser(loadResult.Unwrap()); var isbn10Str = "0306406152"; Console.WriteLine(isbn13Parser.Parse(isbn10Str).Unwrap()); //: 978-0-306-40615-7 //Invalid ISBN10 isbn13Parser.Parse("0306406199").MapErr(err => { Console.WriteLine($"{err.Message}, {err.ErrorKind}"); //: Input 0306406199 is not a valid ISBN10 number: InvalidChecksum, InvalidISBN10 return(false); }); }
public ISBN13Parser(ISBNRangeMessage rangeMessage) { _prefixTrees = PrefixTreeBuilder.BuildFromISBNRangeMessage(rangeMessage); }
public ISBN13ParserTests() { var loadResult = ISBNRangeMessage.LoadFromEmbeddedResource(); _parser = new ISBN13Parser(loadResult.Unwrap()); }
public ISBN13MetaDataInfoTests() { var isbnRangeMessage = ISBNRangeMessage.LoadFromFile(TestContext.CurrentContext.TestDirectory + "\\ISBNRangeMessage.xml"); _ruleTrees = PrefixTreeBuilder.BuildFromISBNRangeMessage(isbnRangeMessage); }
public static IReadOnlyDictionary <string, PrefixTree> BuildFromISBNRangeMessage(ISBNRangeMessage isbnRangeMessage) { if (isbnRangeMessage == null) { throw new ArgumentNullException(nameof(isbnRangeMessage)); } if (isbnRangeMessage.EAN_UCCPrefixes?.EAN_UCC == null) { throw new ArgumentException("EAN_UCC is null in message.", nameof(isbnRangeMessage)); } var rootPrefixTrees = new Dictionary <string, PrefixTree>(2, StringComparer.Ordinal); foreach (var eanUcc in isbnRangeMessage.EAN_UCCPrefixes.EAN_UCC) { if (eanUcc.Rules?.Rule == null) { continue; } var mainRangeRules = new List <RangeRule>(eanUcc.Rules.Rule.Count); foreach (var rule in eanUcc.Rules.Rule) { var numberOfDigits = rule.Length; if (numberOfDigits > 0) { var ranges = rule.Range.Split('-', StringSplitOptions.RemoveEmptyEntries); var from = int.Parse(ranges[0].Substring(0, numberOfDigits)); var to = int.Parse(ranges[1].Substring(0, numberOfDigits)); mainRangeRules.Add(new RangeRule(@from, to, numberOfDigits)); } } var mainPrefix = eanUcc.Prefix; var prefixTree = new PrefixTree( mainPrefix, eanUcc.Prefix.Length, eanUcc.Agency, mainRangeRules); rootPrefixTrees.Add(mainPrefix, prefixTree); } if (rootPrefixTrees.Count == 0) { throw new ArgumentException("Invalid data, the message does not contain any UCCPrefixes.", nameof(isbnRangeMessage)); } var allGroups = isbnRangeMessage.RegistrationGroups?.Group; if (allGroups == null) { return(rootPrefixTrees); } for (var i = 0; i < allGroups.Count; i++) { var currentGroup = allGroups[i]; var groupPrefixes = currentGroup.Prefix.Split('-', StringSplitOptions.RemoveEmptyEntries); var parentPrefixStr = groupPrefixes[0]; var groupPrefixStr = groupPrefixes[1]; if (currentGroup.Rules?.Rule == null) { continue; } var groupRules = new List <RangeRule>(currentGroup.Rules.Rule.Count); foreach (var rule in currentGroup.Rules.Rule) { var numberOfDigits = rule.Length; if (numberOfDigits > 0) { var ranges = rule.Range.Split('-', StringSplitOptions.RemoveEmptyEntries); var from = int.Parse(ranges[0].Substring(0, numberOfDigits)); var to = int.Parse(ranges[1].Substring(0, numberOfDigits)); var rangeRule = new RangeRule(@from, to, numberOfDigits); groupRules.Add(rangeRule); } } if (groupRules.Count > 0) { if (!rootPrefixTrees[parentPrefixStr].AddChild(groupPrefixStr, groupPrefixStr.Length, currentGroup.Agency, groupRules)) { throw new InvalidDataException( $"Could not add child {groupPrefixStr} to root {parentPrefixStr}."); } } } return(rootPrefixTrees); }