static void Main() { var daybreakEventMessage = new BusMessage("daybreak", null); var birthdayEventMessage = new BusMessage("birthday", null); var mogginsPrevious = new Pet("old moggins", "cat", remainingLimbs: 4); var mogginsCurrent = new Pet("old moggins", "cat", remainingLimbs: 3); var robinPrevious = new Person("Robin", age: 35) { HairColour = "brown", Pets = new[] { mogginsPrevious } }; var robinCurrent = new Person("Robin", age: 36) { HairColour = "grey", Pets = new[] { mogginsPrevious } }; IEventLogger eventLogger = new EventLogger(); eventLogger.LogEvent(daybreakEventMessage); var childLogger = eventLogger.LogThat(birthdayEventMessage).WasReceived().GetChildLogger(); childLogger.LogThat(robinPrevious).Became(robinCurrent); eventLogger.LogEvent("accident") .AndThus(mogginsPrevious) .Became(mogginsCurrent); var objectDescriber = new ObjectDescriber(); var eventDescriber = new EventDescriber(objectDescriber); objectDescriber.AddDescriber <Person>(p => new Noun($"{p.Name}")); objectDescriber.AddDescriber <Pet>(p => new Noun($"{p.Name} the {p.Species} with {p.RemainingLimbs} leg{(p.RemainingLimbs == 1 ? "" : "s")}")); objectDescriber.AddDescriber <IEnumerable <Pet> >(pets => "'" + string.Join(", ", pets.Select(p => objectDescriber.GetNoun(p))) + "'"); objectDescriber.AddPronoun <Person>(p => Pronouns.Male); objectDescriber.AddDescriber <BusMessage>(m => new Noun($"Message of type {m.Type}")); eventDescriber.Describe(eventLogger.EventItems()).ToList().ForEach(e => e.PrintToConsole()); Console.ReadLine(); }
public void TestGetNameForStaticProperty() { Assert.AreEqual("SomeStaticProperty", ObjectDescriber.GetName(() => Test.SomeStaticProperty)); }
public void TestGetNameForStaticFunction() { Assert.AreEqual("SomeStaticFunction", ObjectDescriber.GetName(() => Test.SomeStaticFunction())); }
public void TestGetNameForProperty() { Assert.AreEqual("SomeProperty", ObjectDescriber.GetName((Test _) => _.SomeProperty)); }
public void TestGetNameForFunction() { Assert.AreEqual("SomeFunction", ObjectDescriber.GetName((Test _) => _.SomeFunction())); }
public void TestGetNameForComplexExpressionFailsProperly() { Assert.Throws <NotSupportedException>( () => ObjectDescriber.GetName(() => Test.SomeStaticProperty + "Hello")); }
/// <summary> /// Describes the state of an object in plain text /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string Describe(this object obj) { var od = new ObjectDescriber(); return(od.Describe(obj)); }