public void FormatterChoosesTheBestRuleAndCachesLookups()
 {
     var mockRule1 = MockRepository.GenerateMock<IFormattingRule>();
     var mockRule2 = MockRepository.GenerateMock<IFormattingRule>();
     mockRule1.Expect(x => x.GetPriority(typeof(int))).Return(0);
     mockRule2.Expect(x => x.GetPriority(typeof(int))).Return(1);
     mockRule2.Expect(x => x.Format(null, null)).IgnoreArguments().Repeat.Once().Return("42");
     mockRule2.Expect(x => x.Format(null, null)).IgnoreArguments().Repeat.Once().Return("53");
     var formatter = new RuleBasedFormatter(new DefaultExtensionPoints(), new[] { mockRule1, mockRule2 });
     Assert.AreEqual("42", formatter.Format(42));
     Assert.AreEqual("53", formatter.Format(53));
     mockRule1.VerifyAllExpectations();
     mockRule2.VerifyAllExpectations();
 }
 public void FormatterSubstitutesNameOfTypeIfRuleThrows()
 {
     var mockRule = MockRepository.GenerateMock<IFormattingRule>();
     mockRule.Expect(x => x.GetPriority(typeof(int))).Return(0);
     mockRule.Expect(x => x.Format(null, null)).IgnoreArguments().Throw(new ApplicationException("Boom!"));
     var formatter = new RuleBasedFormatter(new DefaultExtensionPoints(), new[] { mockRule });
     Assert.AreEqual("{System.Int32}", formatter.Format(42));
     mockRule.VerifyAllExpectations();
 }
 public void FormatterSubstitutesNameOfTypeIfRuleReturnsNullOrEmpty(bool useNull)
 {
     var mockRule = MockRepository.GenerateMock<IFormattingRule>();
     mockRule.Expect(x => x.GetPriority(typeof(int))).Return(0);
     mockRule.Expect(x => x.Format(null, null)).IgnoreArguments().Return(useNull ? null : String.Empty);
     var formatter = new RuleBasedFormatter(new DefaultExtensionPoints(), new[] { mockRule });
     Assert.AreEqual("{System.Int32}", formatter.Format(42));
     mockRule.VerifyAllExpectations();
 }
 public void NullValueProducesStringContainingNull()
 {
     var mockExtensionPoints = MockRepository.GenerateStub<IExtensionPoints>();
     var formatter = new RuleBasedFormatter(mockExtensionPoints, EmptyArray<IFormattingRule>.Instance);
     Assert.AreEqual("null", formatter.Format(null));
 }
 public void Custom_formatting()
 {
     var extentionPoints = new DefaultExtensionPoints();
     var formatter = new RuleBasedFormatter(extentionPoints, EmptyArray<IFormattingRule>.Instance);
     extentionPoints.CustomFormatters.Register<Foo>(x => String.Format("Foo's value is {0}.", x.Value));
     string output = formatter.Format(new Foo(123));
     Assert.AreEqual("Foo's value is 123.", output);
 }