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);
        }
Esempio n. 4
0
        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);
        }