public static void Test_adding_lines( ) { var randomProvider = new Random( ); var newRecords = new List <PersonColorPreferenceModel> { PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider) }.ToSafeList( ); const char DelimiterChar = '|'; var asLines = newRecords.Select(newRecord => UnitTestHelpers.GenerateLine(newRecord, DelimiterChar)).ToSafeList( ); var model = new PreferencesModel( ); model.Add(asLines, DelimiterChar); // check records were added var added = model.PersonColorPreferences.ToSafeList( ); var knownIds = new Dictionary <int, IPersonColorPreferenceModel> ( ); foreach (var newRecord in newRecords) { var singleRecord = Assert.Single(added, r => r.NotNull( ).LastName == newRecord.LastName).NotNull( ); UnitTestHelpers.AssertRecordIdentical(newRecord.NotNull( ), singleRecord); knownIds [singleRecord.Id] = singleRecord; } Assert.NotEmpty(knownIds); }
public static void Test_that_an_unknown_file_is_associated_with_char_minValue( ) { var fileInfo = new FileInfo("something.bin"); var actual = PreferencesHelpers.AssociatedDelimiter(fileInfo); Assert.Equal(char.MinValue, actual); }
public static void Test_add_IEnumerable_records( ) { var randomProvider = new Random( ); var newRecords = new List <PersonColorPreferenceModel> { PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider) }.ToSafeList( ); var model = new PreferencesModel( ); model.Add(newRecords); // check records were added var added = model.PersonColorPreferences.ToSafeList( ); var knownIds = new Dictionary <int, IPersonColorPreferenceModel> ( ); foreach (var newRecord in newRecords) { var singleRecord = Assert.Single(added, r => r.NotNull( ).LastName == newRecord.LastName).NotNull( ); UnitTestHelpers.AssertRecordIdentical(newRecord.NotNull( ), singleRecord); knownIds [singleRecord.Id] = singleRecord; } Assert.NotEmpty(knownIds); #endregion }
public static void Test_that_pipe_is_associated_delimiter_for_pipe_files( ) { var fileInfo = new FileInfo("something.pIpE"); var actual = PreferencesHelpers.AssociatedDelimiter(fileInfo); Assert.Equal('|', actual); }
public static void Test_generation_of_random_records( ) { var records = PreferencesHelpers.GenerateRandomRecords(10, new Random( ), 7); var asDictionary = records.ToDictionary(r => r.ToString( ), r => r); Assert.Equal(10, asDictionary.Count); }
public static void Test_that_comma_is_associated_delimiter_for_csv_files( ) { var fileInfo = new FileInfo("something.csv"); var actual = PreferencesHelpers.AssociatedDelimiter(fileInfo); Assert.Equal(',', actual); }
public static void Test_that_blank_is_associated_delimiter_for_txt_files( ) { var fileInfo = new FileInfo("something.tXt"); var actual = PreferencesHelpers.AssociatedDelimiter(fileInfo); Assert.Equal(' ', actual); }
public void Test_id_is_determined_during_add( ) { // Set the second last bit to ensure not 0 or 1; var id = Guid.NewGuid( ).GetHashCode( ) | 0x02; var target = PreferencesHelpers.GenerateRandomRecord(new Random( )); target.Id = id; var model = new PreferencesModel( ); model.Add(target); // Check that target.Id was not modified Assert.Equal(id, target.Id); var records = model.PersonColorPreferences.ToSafeList( ); var notAdded = records.FirstOrDefault(r => r.Id == id); Assert.Null(notAdded); var added = records.Single(r => r.Id == 1); UnitTestHelpers.AssertRecordIsShallowCopy(target, added); Assert.True(ReferenceEquals(added, records.Single(r => r.DateOfBirth == target.DateOfBirth))); Assert.True(ReferenceEquals(added, records.Single(r => r.FavoriteColor == target.FavoriteColor))); Assert.True(ReferenceEquals(added, records.Single(r => r.FirstName == target.FirstName))); Assert.True(ReferenceEquals(added, records.Single(r => r.Gender == target.Gender))); Assert.True(ReferenceEquals(added, records.Single(r => r.LastName == target.LastName))); }
/// <summary> /// Initializes static members of the <see cref="RecordsApiModel" /> class. /// </summary> /// <autogeneratedoc /> /// TODO Edit XML Comment Template for #ctor static RecordsApiModel( ) { CurrentModel = new PreferencesModel( ); // Add some random records var generatedRecords = PreferencesHelpers.GenerateRandomRecords(10, new Random( ), 7); CurrentModel.Add(generatedRecords); }
/// <summary> /// Initializes static members of the <see cref="RecordsModel" /> class. /// </summary> /// <autogeneratedoc /> /// TODO Edit XML Comment Template for #ctor static RecordsModel( ) { // we are not persisting data for now, otherwise this would use a connection CurrentModel = new PreferencesModel( ); // Add some random records var generatedRecords = PreferencesHelpers.GenerateRandomRecords(10, new Random( ), 7); CurrentModel.Add(generatedRecords); }
public static void Test_that_an_exception_is_thrown_if_multiple_nonblank_delimiters_present( ) { var multipleSeparator = new string ( PreferencesHelpers.SupportedDelimiters.ToArray( )); var line = string.Join(multipleSeparator, Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( )); var exception = Record.Exception(() => PreferencesHelpers.DecideDelimiterFromLine(line)); Assert.NotNull(exception); Assert.IsType <InvalidOperationException> (exception); }
public static void Test_populates_from( ) { var original = PreferencesHelpers.GenerateRandomRecord(new Random( )); var copy = new GetPersonColorPreferenceModelDto( ).PopulateFrom(original); UnitTestHelpers.AssertRecordIsShallowCopy(original, copy); Assert.Equal(0, copy.Id); // cross-checks Assert.Equal("", copy.FirstNameUpper); Assert.Equal("", copy.LastNameUpper); Assert.Equal(DateTime.MinValue, copy.DateTimeBirth); }
public static void Test_mapping_to_enumerable( ) { var randomProvider = new Random( ); var original = new List <IPersonColorPreferenceModel> { PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider) }; var dtos = original.To <GetPersonColorPreferenceModelDto> ( ).ToSafeList( ); Assert.Equal(original.Count, dtos.Count); }
public static void Test_mapping_to( ) { var original = PreferencesHelpers.GenerateRandomRecord(new Random( )); var dto = original.To <GetPersonColorPreferenceModelDto> ( ); UnitTestHelpers.AssertRecordIsShallowCopy(original, dto); Assert.Equal(0, dto.Id); // cross-checks Assert.Equal("", dto.FirstNameUpper); Assert.Equal("", dto.LastNameUpper); Assert.Equal(DateTime.MinValue, dto.DateTimeBirth); }
public static void Test_to_string_reflects_size( ) { var random = new Random( ); var model1 = new PreferencesModel( ); var model2 = new PreferencesModel( ); for (var i = 0; i < 5; i += 1) { Assert.Equal(i, model1.RecordsAdded); Assert.Equal(0, model2.RecordsAdded); Assert.Equal($"{model1.PersonColorPreferences.Count ( )} entries", model1.ToString( )); Assert.Equal($"{model2.PersonColorPreferences.Count ( )} entries", model2.ToString( )); model1.Add(PreferencesHelpers.GenerateRandomRecord(random)); } }
public static void Test_that_a_single_delimiter_with_blanks_also_is_properly_recognized( ) { foreach (var delimiter in PreferencesHelpers.SupportedDelimiters) { var separator = new string ( new [] { delimiter, ' ' } ); var line = string.Join(separator, Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( )); var actual = PreferencesHelpers.DecideDelimiterFromLine(line); Assert.Equal(delimiter, actual); } }
public static void Test_generated_random_record( ) { var random1 = new Random(1); var record1 = PreferencesHelpers.GenerateRandomRecord(random1); var random2 = new Random(1); var record2 = PreferencesHelpers.GenerateRandomRecord(random2); UnitTestHelpers.AssertRecordIdentical(record1, record2); Assert.Equal(0, record1.Id); // cross-checks Assert.Equal(record1.FirstName.ToUpperInvariant( ), record2.FirstNameUpper); Assert.Equal(record2.LastName.ToUpperInvariant( ), record1.LastNameUpper); Assert.NotEqual(DateTime.MinValue, record1.DateTimeBirth); }
public static void Test_parse_line_bad( ) { var record = PreferencesHelpers.GenerateRandomRecord(new Random( )); const char SeparatorChar = '|'; var asLine = UnitTestHelpers.GenerateLine(record, SeparatorChar); var goodParse = PreferencesHelpers.Parse(asLine, SeparatorChar); UnitTestHelpers.AssertRecordIdentical(goodParse, record); var exception = Record.Exception(() => { var substring = asLine.Substring(asLine.Length / 2); return(PreferencesHelpers.Parse(substring, SeparatorChar)); }); Assert.NotNull(exception); }
public static void Test_add_with_just_line_properly_adds_record( ) { var newRecord = PreferencesHelpers.GenerateRandomRecord(new Random( )); foreach (var separatorChar in PreferencesHelpers.SupportedDelimiters) { //LastName | FirstName | Gender | FavoriteColor | DateOfBirth //LastName, FirstName, Gender, FavoriteColor, DateOfBirth //LastName FirstName Gender FavoriteColor DateOfBirth var asLine = UnitTestHelpers.GenerateLine(newRecord, separatorChar); var model = new PreferencesModel( ); model.Add(asLine); var added = model.PersonColorPreferences.Single( ).NotNull( ); UnitTestHelpers.AssertRecordIdentical(newRecord, added); } }
public static void Test_that_ordering_is_correct() { var randomProvider = new Random(); var person1 = PreferencesHelpers.GenerateRandomRecord(randomProvider); var person1A = new PersonColorPreferenceModel().PopulateFrom(person1); person1A.LastName = "person1A"; var person2 = PreferencesHelpers.GenerateRandomRecord(randomProvider); var person3 = PreferencesHelpers.GenerateRandomRecord(randomProvider); var person3A = new PersonColorPreferenceModel().PopulateFrom(person3); person3A.LastName = "person3A"; var newRecords = new List <PersonColorPreferenceModel> { person1, PreferencesHelpers.GenerateRandomRecord(randomProvider), person1, PreferencesHelpers.GenerateRandomRecord(randomProvider), person2, PreferencesHelpers.GenerateRandomRecord(randomProvider), person2, PreferencesHelpers.GenerateRandomRecord(randomProvider), PreferencesHelpers.GenerateRandomRecord(randomProvider), person3, PreferencesHelpers.GenerateRandomRecord(randomProvider), person3 }.ToSafeList(); var apiModel = new RecordsApiModel( ); var model = RecordsApiModel.CurrentModel; newRecords.ForEach(newRecord => apiModel.Create(UnitTestHelpers.GenerateLine(newRecord, '|'))); model.Add(newRecords); var added = model.PersonColorPreferences.ToSafeList(); var byBirthDate = apiModel.ByBirthDate().ToSafeList(); var byGenderLastName = apiModel.ByGender().ToSafeList(); var byLastNameDescending = apiModel.ByLastNameDescending().ToSafeList(); var byName = apiModel.ByName().ToSafeList(); var byIndex = apiModel.ByIndex( ).ToSafeList( ); added.Aggregate((arg1, arg2) => { Assert.True(arg1.Id < arg2.Id); return(arg2); }); byBirthDate.Aggregate((arg1, arg2) => { Assert.True(arg1.DateTimeBirth <= arg2.DateTimeBirth); return(arg2); }); byGenderLastName.Aggregate((arg1, arg2) => { var order = string.Compare(arg1.Gender, arg2.Gender, StringComparison.InvariantCulture); Assert.True(order <= 0); if (order == 0) { var order2 = string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture); Assert.True(order2 <= 0); } return(arg2); }); byLastNameDescending.Aggregate((arg1, arg2) => { Assert.True(string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture) >= 0); return(arg2); }); byName.Aggregate((arg1, arg2) => { var order = string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture); Assert.True(order <= 0); if (order == 0) { var order2 = string.Compare(arg1.FirstNameUpper, arg2.FirstNameUpper, StringComparison.InvariantCulture); Assert.True(order2 <= 0); } return(arg2); }); }
/// <summary> /// Defines the entry point of the application. /// </summary> /// <param name="args">The arguments.</param> static void Main([NotNull][ItemNotNull] string [] args) { var programName = Process.GetCurrentProcess( ).ProcessName; if (args.Length == 1) { var fileName = args [0]; var fileInfo = new FileInfo(fileName); if (!fileInfo.Exists) { Console.WriteLine($"File '{fileInfo.FullName} does not exist"); } var preferencesModel = new PreferencesModel( ); PreferencesHelpers.Load(preferencesModel, fileInfo); var byGender = preferencesModel.ByGenderLastName( ); WriteRecords("By gender, then last name ascending", byGender); var byBirthDate = preferencesModel.ByBirthDate( ); WriteRecords("By birth date", byBirthDate); var byLastNameDescending = preferencesModel.ByLastNameDescending( ); WriteRecords("By last name descending", byLastNameDescending); var byName = preferencesModel.ByName( ); WriteRecords("By name", byName); } else if (args.Length == 2) { if (!int.TryParse(args [1], out var recordsToGenerate)) { throw new InvalidOperationException( ); } var fileName = args [0]; var fileInfo = new FileInfo(fileName); var format = fileInfo.Extension.ToUpperInvariant( ); if (fileInfo.Exists) { Console.WriteLine($"File '{fileInfo.FullName} already exists, you must remove it manually"); } var randomRecords = PreferencesHelpers.GenerateRandomRecords(recordsToGenerate, new Random( ), 7); using (var writer = new StreamWriter(fileInfo.FullName, false)) { var delimiterChar = PreferencesHelpers.AssociatedDelimiter(fileInfo); var delimiterString = delimiterChar.ToString( ); randomRecords.ForEach(r => { var strings = new [] { r.LastName, r.FirstName, r.Gender, r.FavoriteColor, r.DateOfBirth }.ToList( ); var line = string.Join(delimiterString, strings); writer.WriteLine(line); }); } } else { WriteUsageInfo( ); } }