public void GivenValidInput_ThenParseSucceeds() { var parser = new PersonFormatter(); var person = parser.ParsePerson("BAKER, THEODORE"); Assert.AreEqual("THEODORE", person.FirstName); Assert.AreEqual("BAKER", person.LastName); }
public void GivenValidInputWithWhitespace_ThenWhitespaceIsStripped() { var parser = new PersonFormatter(); var person = parser.ParsePerson(" BAKER , THEODORE "); Assert.AreEqual("THEODORE", person.FirstName); Assert.AreEqual("BAKER", person.LastName); }
public void GivenValidInputWithNoLastName_LastNameIsEmpty() { var parser = new PersonFormatter(); var person = parser.ParsePerson("BAKER, "); Assert.AreEqual("", person.FirstName); Assert.AreEqual("BAKER", person.LastName); }
public void GivenValidInputWithNoFirstName_FirstNameIsEmpty() { var parser = new PersonFormatter(); var person = parser.ParsePerson(", THEODORE"); Assert.AreEqual("THEODORE", person.FirstName); Assert.AreEqual("", person.LastName); }
/* * Don't Repeat Yourself * * "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system" * * Good examples: Work flows, Objects/exceptions formatting, utility methods, Template methods/LINQ * */ public static string CheckEligibilityAndFormatEmailHeader(Person person) { if (person.BirthDate.Date == DateTime.Now.AddYears(-18).Date) { return(MarkEligibility(person)); } return(PersonFormatter.Format(person)); }
public void Format_PersonWithFirstAndLastName_StringFirstAndLastNameWithDashBetween() { Person person = new Person { FirstName = "Bob", LastName = "Martin" }; PersonFormatter formatter = new PersonFormatter(); var result = formatter.Format(person); Assert.AreEqual(s); }
// Functions assigned to delegates // Declared in /WithDelegates/Person.cs public void AssignFormatter() { if (rdBtn_Default.IsChecked.Value) { formatter = NameFormatter.Default; } else if (rdBtn_LastNameFirst.IsChecked.Value) { formatter = NameFormatter.LastNameFirst; } else if (rdBtn_FirstNameOnly.IsChecked.Value) { formatter = NameFormatter.FirstNameOnly; } else if (rdBtn_LastNameOnly.IsChecked.Value) { formatter = NameFormatter.LastNameOnly; } }
// Lambda expressions as delegates public void AssignFormatterLamdaExpression() { // Anonymous functions as delegates if (rdBtn_Default.IsChecked.Value) { formatter = delegate(Person person) { return($"{person.FirstName} {person.LastName}"); } } ; // Removed delegate keyword // Using lamdba operator else if (rdBtn_LastNameFirst.IsChecked.Value) { formatter = (Person person) => { return($"{person.LastName} {person.FirstName}"); } } ; // C#'s Type Inference in action // Removed explicit type naming for person parameter else if (rdBtn_FirstNameOnly.IsChecked.Value) { formatter = (person) => { return(person.FirstName); } } ; // Single parameter - No brackets required // Expression function - Single statement, No curly brackets required else if (rdBtn_LastNameOnly.IsChecked.Value) { formatter = person => person.LastName; } }
private static string MarkEligibility(Person person) { // TODO: Mark Eligibility in some db or system return(PersonFormatter.Format(person.ToString())); }
public string ToString(PersonFormatter formatter) { // formatter delegate - 1. Accepts a person object, 2. Returns a string return(formatter.Invoke(this)); }
public void InvalidInput_SinglePart_Fails() { var parser = new PersonFormatter(); var person = parser.ParsePerson("BAKER"); Assert.IsNull(person); }
public void InvalidInput_NullInput_Fails() { var parser = new PersonFormatter(); var person = parser.ParsePerson(null); Assert.IsNull(person); }
public void InvalidInput_MultipleParts_Fails() { var parser = new PersonFormatter(); var person = parser.ParsePerson("BAKER, THEODORE, MORE"); Assert.IsNull(person); }