Пример #1
0
        public void Weave_AllByLabelWithMixedTypesAndCustomSerializerToSpreadingValue_ResultAsExpected()
        {
            TestClassArgumentSerializer serializer = new TestClassArgumentSerializer();

            this.options.Serializer = serializer;

            this.tokens = new List <BaseToken>()
            {
                new HoleToken(0, 0, new StringBuilder("{@fmt1}")),
                new TextToken(0, new StringBuilder("txtA")),
                new HoleToken(0, 1, new StringBuilder("{@fmt2}")),
                new TextToken(0, new StringBuilder("txtB")),
                new HoleToken(0, 2, new StringBuilder("{@fmt3}")),
                new TextToken(0, new StringBuilder("txtC")),
                new HoleToken(0, 3, new StringBuilder("{@fmt4}")),
                new TextToken(0, new StringBuilder("txtD")),
            };

            List <Object> helper = new List <Object>();

            helper.Add(111111);
            helper.Add(new TestClassUnformattable(222222));
            helper.Add(333333);
            helper.Add(new TestClassUnformattable(444444));
            this.arguments = helper.ToArray();

            TemplateWeaver.Weave(this.options, this.tokens, this.output, this.arguments);

            Assert.That(serializer.CallCount, Is.EqualTo(2));
            Assert.That(this.output.ToString(), Is.EqualTo("111111txtAtxtB333333txtCtxtD"));
        }
Пример #2
0
        public void Weave_AllByLabelWithTestClassFormattableAndFallbackAsGivenToFormattedValue_ResultAsExpected(String flb, String fmt1, String fmt2, String fmt3, String expected, params Object[] args)
        {
            this.options.Fallback = flb;

            this.tokens = new List <BaseToken>()
            {
                new HoleToken(0, 0, new StringBuilder(fmt1)),
                new TextToken(0, new StringBuilder("txtA")),
                new HoleToken(0, 1, new StringBuilder(fmt2)),
                new TextToken(0, new StringBuilder("txtB")),
                new HoleToken(0, 2, new StringBuilder(fmt3)),
                new TextToken(0, new StringBuilder("txtC")),
            };

            List <Object> helper = new List <Object>();

            foreach (Object arg in args)
            {
                helper.Add(new TestClassFormattable(arg));
            }
            this.arguments = helper.ToArray();

            TemplateWeaver.Weave(this.options, this.tokens, this.output, this.arguments);

            Assert.That(this.output.ToString(), Is.EqualTo(expected));
        }
Пример #3
0
        public void Weave_GetFormattedValueHandlesException_ResultAsExpected()
        {
            this.tokens = new List <BaseToken>()
            {
                new HoleToken(0, 0, new StringBuilder("{label}")),
            };

            this.arguments = new Object[] { new TestClassWithException("Value") };

            TemplateWeaver.Weave(this.options, this.tokens, this.output, this.arguments);

            Assert.That(this.output.ToString(), Is.EqualTo("[{label} => FormatException: \"Value => TEST FORMAT EXCEPTION\"]"));
        }
Пример #4
0
        public void Weave_AllByLabelFallbackArgumentsLiningFormatAsGivenToStringifyValue_ResultAsExpected(String flb, String fmt1, String fmt2, String fmt3, String expected, params Object[] args)
        {
            this.options.Fallback = flb;

            this.tokens = new List <BaseToken>()
            {
                new HoleToken(0, 0, new StringBuilder(fmt1)),
                new TextToken(0, new StringBuilder("txtA")),
                new HoleToken(0, 1, new StringBuilder(fmt2)),
                new TextToken(0, new StringBuilder("txtB")),
                new HoleToken(0, 2, new StringBuilder(fmt3)),
                new TextToken(0, new StringBuilder("txtC")),
            };

            this.arguments = args;

            TemplateWeaver.Weave(this.options, this.tokens, this.output, this.arguments);

            Assert.That(this.output.ToString(), Is.EqualTo(expected));
        }
Пример #5
0
        public void Weave_AllByIndexWithTestClassCustomFormatterAndFallbackAsGivenToFormattedValue_ResultAsExpected(String flb, String fmt1, String fmt2, String fmt3, String expected, params Object[] args)
        {
            this.options.Fallback = flb;
            this.options.Provider = new TestClassCustomFormatter();

            this.tokens = new List <BaseToken>()
            {
                new HoleToken(0, -1, new StringBuilder(fmt1)),
                new TextToken(0, new StringBuilder("txtA")),
                new HoleToken(0, -1, new StringBuilder(fmt2)),
                new TextToken(0, new StringBuilder("txtB")),
                new HoleToken(0, -1, new StringBuilder(fmt3)),
                new TextToken(0, new StringBuilder("txtC")),
            };

            this.arguments = args;

            TemplateWeaver.Weave(this.options, this.tokens, this.output, this.arguments);

            Assert.That(this.output.ToString(), Is.EqualTo(expected));
        }
        /// <summary>
        /// Formats the list of <paramref name="arguments"/> into the <paramref name="format"/> string using
        /// given <paramref name="options"/>.
        /// </summary>
        /// <remarks>
        /// This method formats the list of <paramref name="arguments"/> into the <paramref name="format"/>
        /// string using given <paramref name="options"/>.
        /// </remarks>
        /// <param name="discard">
        /// This parameter is only for internal handling and tells the method to resolve relation assignments
        /// or not.
        /// </param>
        /// <param name="options">
        /// An instance of class <see cref="Options"/> with detailed formatting instructions.
        /// </param>
        /// <param name="relations">
        /// When this method returns, this parameter contains a list of Label-Value relations consisting
        /// of the labels taken from <paramref name="format"/> and the <paramref name="arguments"/> as
        /// their values.
        /// </param>
        /// <param name="format">
        /// A string containing formatting instructions, either for index-based formatting, like
        /// <c>"{0}, {1}, ..."</c>, or for template-based formatting, like <c>"{name1}, {name2}, ..."</c>).
        /// </param>
        /// <param name="arguments">
        /// The optional list of arguments to be used.
        /// </param>
        /// <returns>
        /// A copy of <paramref name="format"/> with the format elements replaced by the string representation
        /// of the corresponding objects in <paramref name="arguments"/>.
        /// </returns>
        private static String Format(Boolean discard, Options options, out IArgumentRelations relations, String format, params Object[] arguments)
        {
            relations = RelationsAssigner.Default;

            if (format == null || format.Length == 0)
            {
                return(String.Empty);
            }

            StringBuilder output = new StringBuilder(512);

            IEnumerable <BaseToken> tokens = TemplateParser.Parse(format);

            arguments = arguments.ExpandArguments();

            TemplateWeaver.Weave(options, tokens, output, arguments);

            if (!discard)
            {
                relations = RelationsAssigner.Assign(tokens, arguments);
            }

            return(Template.Truncate(options, output).ToString());
        }
Пример #7
0
 public void Weave_ArgumentsIsNull_ThrowsNothing()
 {
     Assert.That(() => TemplateWeaver.Weave(this.options, this.tokens, this.output, null), Throws.Nothing);
 }
Пример #8
0
 public void Weave_TokensIsEmpty_ThrowsNothing()
 {
     Assert.That(() => TemplateWeaver.Weave(this.options, new List <BaseToken>(), this.output, this.arguments), Throws.Nothing);
 }