public void FormatMessage_caches_reused_pattern() { var parserMock = new Mock<IPatternParser>(); var realParser = new PatternParser(new LiteralParser()); parserMock.Setup(x => x.Parse(It.IsAny<StringBuilder>())) .Returns((StringBuilder sb) => realParser.Parse(sb)); var library = new FormatterLibrary(); var subject = new MessageFormatter(patternParser: parserMock.Object, library: library, useCache: true); var pattern = "Hi {gender, select, male {Sir} female {Ma'am}}!"; var actual = subject.FormatMessage(pattern, new { gender = "male" }); Assert.Equal("Hi Sir!", actual); // '2' because it did not format "Ma'am" yet. parserMock.Verify(x => x.Parse(It.IsAny<StringBuilder>()), Times.Exactly(2)); actual = subject.FormatMessage(pattern, new { gender = "female" }); Assert.Equal("Hi Ma'am!", actual); parserMock.Verify(x => x.Parse(It.IsAny<StringBuilder>()), Times.Exactly(3)); // '3' because it has cached all options actual = subject.FormatMessage(pattern, new { gender = "female" }); Assert.Equal("Hi Ma'am!", actual); parserMock.Verify(x => x.Parse(It.IsAny<StringBuilder>()), Times.Exactly(3)); }
public void FormatMessage_caches_reused_pattern() { var parserMock = new Mock <IPatternParser>(); var realParser = new PatternParser(new LiteralParser()); parserMock.Setup(x => x.Parse(It.IsAny <StringBuilder>())) .Returns((StringBuilder sb) => realParser.Parse(sb)); var library = new FormatterLibrary(); var subject = new MessageFormatter(patternParser: parserMock.Object, library: library, useCache: true); var pattern = "Hi {gender, select, male {Sir} female {Ma'am}}!"; var actual = subject.FormatMessage(pattern, new { gender = "male" }); Assert.Equal("Hi Sir!", actual); // '2' because it did not format "Ma'am" yet. parserMock.Verify(x => x.Parse(It.IsAny <StringBuilder>()), Times.Exactly(2)); actual = subject.FormatMessage(pattern, new { gender = "female" }); Assert.Equal("Hi Ma'am!", actual); parserMock.Verify(x => x.Parse(It.IsAny <StringBuilder>()), Times.Exactly(3)); // '3' because it has cached all options actual = subject.FormatMessage(pattern, new { gender = "female" }); Assert.Equal("Hi Ma'am!", actual); parserMock.Verify(x => x.Parse(It.IsAny <StringBuilder>()), Times.Exactly(3)); }
public void GetFormatter() { var subject = new FormatterLibrary(); var mock1 = new Mock<IFormatter>(); var mock2 = new Mock<IFormatter>(); var req = new FormatterRequest(new Literal(1, 1, 1, 1, new StringBuilder()), "test", "dawg", null); subject.Add(mock1.Object); subject.Add(mock2.Object); Assert.Throws<FormatterNotFoundException>(() => subject.GetFormatter(req)); mock2.Setup(x => x.CanFormat(req)).Returns(true); var actual = subject.GetFormatter(req); Assert.Same(mock2.Object, actual); mock1.Setup(x => x.CanFormat(req)).Returns(true); actual = subject.GetFormatter(req); Assert.Same(mock1.Object, actual); }
public void GetFormatter() { var subject = new FormatterLibrary(); var mock1 = new Mock <IFormatter>(); var mock2 = new Mock <IFormatter>(); var req = new FormatterRequest(new Literal(1, 1, 1, 1, new StringBuilder()), "test", "dawg", null); subject.Add(mock1.Object); subject.Add(mock2.Object); Assert.Throws <FormatterNotFoundException>(() => subject.GetFormatter(req)); mock2.Setup(x => x.CanFormat(req)).Returns(true); var actual = subject.GetFormatter(req); Assert.Same(mock2.Object, actual); mock1.Setup(x => x.CanFormat(req)).Returns(true); actual = subject.GetFormatter(req); Assert.Same(mock1.Object, actual); }