Ejemplo n.º 1
0
        private static void AppendStringDictValue(ParsedAttribute attribute, CodeObjectCreateExpression newKeyValueExpression)
        {
            var expressionStringParser = new ExpressionStringParser(attribute.Value);

            expressionStringParser.Parse();
            var values = expressionStringParser.ExpressionStringTokens;

            if (values.Count == 1)
            {
                var expressionStringToken = values[0];
                if (expressionStringToken.IsExpression)
                {
                    newKeyValueExpression.Parameters.Add(new CodeSnippetExpression
                    {
                        Value = expressionStringToken.Value
                    });
                }
                else
                {
                    newKeyValueExpression.Parameters.Add(new CodePrimitiveExpression
                    {
                        Value = expressionStringToken.Value
                    });
                }
            }
            else
            {
                var concatExpression = CodeDomClassBuilder.GetConcatExpression(values);
                newKeyValueExpression.Parameters.Add(concatExpression);
            }
        }
Ejemplo n.º 2
0
        public void AppendAttributeNameValuePair_XHtml4_CompilesValidTemplate()
        {
            var classBuilder   = new CodeDomClassBuilder();
            var valueFragments = new List <HamlNode>
            {
                new HamlNodeTextLiteral(-1, "value"),
                new HamlNodeTextVariable(-1, "#{Variable}"),
                new HamlNodeTextLiteral(-1, "value")
            };

            classBuilder.AppendAttributeNameValuePair("name",
                                                      valueFragments, '\"');
            string templateSource = classBuilder.Build(ClassName);
            var    result         = GenerateTemplateFromSource(templateSource);

            var dictionary = new Dictionary <string, object>
            {
                { "Variable", "Result" }
            };

            var writer = new StringWriter();

            result.Render(writer, HtmlVersion.XHtml, dictionary);
            Assert.That(writer.ToString(), Is.EqualTo(" name=\"valueResultvalue\""));
        }
Ejemplo n.º 3
0
        private object BuildEmptyClass()
        {
            var classBuilder = new CodeDomClassBuilder();

            return(classBuilder.Build(ClassName, typeof(Template),
                                      new List <string> {
                "System", "System.IO"
            }));
        }
Ejemplo n.º 4
0
        public void AppendCode_ValidCodeFragment_AppendsFragment()
        {
            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendCodeToString("1+1");
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining("textWriter.Write(Convert.ToString(1+1));"));
        }
Ejemplo n.º 5
0
        public void AppendSelfClosingTagSuffix_AppendsCorrectOutput()
        {
            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendSelfClosingTagSuffix();
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining("base.AppendSelfClosingTagSuffix()"));
        }
Ejemplo n.º 6
0
        public void AppendNewLine_NormalUse_GeneratesWriteStatement()
        {
            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendNewLine();
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining("textWriter.WriteLine(\"\");"));
        }
Ejemplo n.º 7
0
        public void Append_SingleLine_GeneratesWriteStatement()
        {
            string lineToWrite  = "Test";
            var    classBuilder = new CodeDomClassBuilder();

            classBuilder.Append(lineToWrite);
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining("textWriter.Write(\"" + lineToWrite + "\");"));
        }
Ejemplo n.º 8
0
        public void AppendAttributeNameValuePair_NoValueNode_AppendsRenderAttributeNameValuePair()
        {
            var classBuilder = new CodeDomClassBuilder();
            var valueNodes   = new List <HamlNode>();

            classBuilder.AppendAttributeNameValuePair("Name", valueNodes, '\"');
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining("textWriter.Write(\" Name\");"));
        }
Ejemplo n.º 9
0
        public void AppendCodeSnippet_NoChildNodes_BuildsValueCorrectly()
        {
            string codeStatement = "int c = 1";

            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendCodeSnippet(codeStatement, false);
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining(codeStatement + ";"));
        }
Ejemplo n.º 10
0
        public void AppendVariable_ValidVariableName_AppendsRenderValueOrKeyAsString()
        {
            const string variableName = "key";
            var          classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendVariable(variableName);

            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining("textWriter.Write(RenderValueOrKeyAsString(\"" + variableName + "\"));"));
        }
Ejemplo n.º 11
0
        public void AppendCodeSnippet_ChildNode_OpensCodeBlockCorrectly()
        {
            string codeStatement = "for (int c = 0; c < 10; c++)";

            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendCodeSnippet(codeStatement, true);
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining(codeStatement + "//;"));
        }
Ejemplo n.º 12
0
        public void AppendDocType_CallsTemplateMethodCorrectly()
        {
            const string docTypeId = "Transitional";

            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendDocType(docTypeId);
            string result = classBuilder.Build(ClassName);

            const string expectedCodeStatement = "Write(GetDocType(\"" + docTypeId + "\"))";

            Assert.That(result, Is.StringContaining(expectedCodeStatement));
        }
Ejemplo n.º 13
0
        public void AppendAttributeNameValuePair_ObjectReferenceHamlNode_BuildsValueCorrectly()
        {
            var classBuilder   = new CodeDomClassBuilder();
            var valueFragments = new List <HamlNode>
            {
                new HamlNodeTextVariable(-1, "#{Model.Property}")
            };

            classBuilder.AppendAttributeNameValuePair("Name", valueFragments, '\"');
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining(".Append(Convert.ToString(Model.Property));"));
        }
Ejemplo n.º 14
0
        public void AppendAttributeNameValuePair_TextLiteralHamlNode_AppendsRenderAttributeNameValuePair()
        {
            var classBuilder = new CodeDomClassBuilder();
            var valueNodes   = new List <HamlNode> {
                new HamlNodeTextLiteral(-1, "value")
            };

            classBuilder.AppendAttributeNameValuePair("Name", valueNodes, '\"');
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining("= new System.Text.StringBuilder();"));
            Assert.That(result, Is.StringContaining("base.RenderAttributeNameValuePair(\"Name\", value_0.ToString(), '\\\"')"));
        }
Ejemplo n.º 15
0
        public void AppendSelfClosingTagSuffix_XHtml4_CompilesValidTemplate()
        {
            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendSelfClosingTagSuffix();
            string templateSource = classBuilder.Build(ClassName);
            var    result         = GenerateTemplateFromSource(templateSource);

            var writer = new StringWriter();

            result.Render(writer);
            Assert.That(writer.ToString(), Is.EqualTo(" />"));
        }
Ejemplo n.º 16
0
        public void WriteNewLineIfRepeated_RepeatedCode_AppendsNewline()
        {
            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendCodeSnippet("for (int c = 0; c < 3; c++)", true);
            classBuilder.Append("Test");
            classBuilder.RenderEndBlock();
            string templateSource = classBuilder.Build(ClassName);
            var    result         = GenerateTemplateFromSource(templateSource);

            var writer = new StringWriter();

            result.Render(writer, HtmlVersion.XHtml);
            Assert.That(writer.ToString(), Is.EqualTo("Test\r\nTest\r\nTest"));
        }
Ejemplo n.º 17
0
        public void AppendAttributeNameValuePair_LiteralAndVariableHamlNode_BuildsValueCorrectly()
        {
            var classBuilder   = new CodeDomClassBuilder();
            var valueFragments = new List <HamlNode>
            {
                new HamlNodeTextLiteral(-1, "value1"),
                new HamlNodeTextVariable(-1, "#{variable}")
            };

            classBuilder.AppendAttributeNameValuePair("Name", valueFragments, '\"');
            string result = classBuilder.Build(ClassName);

            Assert.That(result, Is.StringContaining(".Append(\"value1\");"));
            Assert.That(result, Is.StringContaining(".Append(base.RenderValueOrKeyAsString(\"variable\"));"));
        }
Ejemplo n.º 18
0
        public void AppendMultipleAttributeNameValuePairs_XHtml4_CompilesValidTemplate()
        {
            var classBuilder = new CodeDomClassBuilder();

            classBuilder.AppendAttributeNameValuePair("name", new List <HamlNode> {
                new HamlNodeTextLiteral(-1, "value")
            }, '\"');
            classBuilder.AppendAttributeNameValuePair("name", new List <HamlNode> {
                new HamlNodeTextLiteral(-1, "value")
            }, '\"');
            string templateSource = classBuilder.Build(ClassName);
            var    result         = GenerateTemplateFromSource(templateSource);

            var writer = new StringWriter();

            result.Render(writer, HtmlVersion.XHtml);
            Assert.That(writer.ToString(), Is.EqualTo(" name=\"value\" name=\"value\""));
        }
Ejemplo n.º 19
0
        private static string AppendCreateDictionaryLocalVariable(string dictionary, CodeDomClassBuilder builder)
        {
            var parser = new AttributeParser(dictionary);

            parser.Parse();


            var keyValuePairType = new CodeTypeReference(typeof(KeyValuePair <string, object>));

            var createDictionaryMethod = new CodeMethodInvokeExpression();


            foreach (var attribute in parser.Attributes)
            {
                var newKeyValueExpression = new CodeObjectCreateExpression {
                    CreateType = keyValuePairType
                };

                var keyExpression = new CodePrimitiveExpression {
                    Value = attribute.Name
                };
                newKeyValueExpression.Parameters.Add(keyExpression);

                if (attribute.Type == ParsedAttributeType.String)
                {
                    AppendStringDictValue(attribute, newKeyValueExpression);
                }
                else
                {
                    newKeyValueExpression.Parameters.Add(new CodeSnippetExpression
                    {
                        Value = attribute.Value
                    });
                }

                createDictionaryMethod.Parameters.Add(newKeyValueExpression);
            }



            var getDictionaryMethod = new CodeMethodReferenceExpression
            {
                MethodName   = "GetDictionaryFromKeyValue",
                TargetObject =
                    new CodeVariableReferenceExpression
                {
                    VariableName = "NHamlMonoRailView"
                }
            };

            createDictionaryMethod.Method = getDictionaryMethod;

            var variableName = string.Format("nhamlTempDictionary{0}", tempDictionaryCount);

            tempDictionaryCount++;
            var dictionaryDecleration = new CodeVariableDeclarationStatement
            {
                InitExpression = createDictionaryMethod,
                Name           = variableName,
                Type           = new CodeTypeReference(typeof(IDictionary <string, object>))
            };

            builder.RenderMethod.Statements.Add(dictionaryDecleration);
            return(variableName);
        }
Ejemplo n.º 20
0
        private static string AppendCreateDictionaryLocalVariable(string dictionary, CodeDomClassBuilder builder)
        {
            var parser = new AttributeParser(dictionary);

            parser.Parse();


            var keyValuePairType = new CodeTypeReference(typeof(KeyValuePair <string, object>));

            var createDictionaryMethod = new CodeMethodInvokeExpression();


            foreach (var attribute in parser.Attributes)
            {
                var newKeyValueExpression = new CodeObjectCreateExpression {
                    CreateType = keyValuePairType
                };

                var keyExpression = new CodePrimitiveExpression {
                    Value = attribute.Name
                };
                newKeyValueExpression.Parameters.Add(keyExpression);

                if (attribute.Type == ParsedAttributeType.String)
                {
                    var expressionStringParser = new ExpressionStringParser(attribute.Value);

                    expressionStringParser.Parse();
                    var values = expressionStringParser.Tokens;
                    if (values.Count == 1)
                    {
                        var expressionStringToken = values[0];
                        if (expressionStringToken.IsExpression)
                        {
                            newKeyValueExpression.Parameters.Add(new CodeSnippetExpression
                            {
                                Value = expressionStringToken.Value
                            });
                        }
                        else
                        {
                            newKeyValueExpression.Parameters.Add(new CodePrimitiveExpression
                            {
                                Value = expressionStringToken.Value
                            });
                        }
                    }
                    else
                    {
                        var concatExpression = CodeDomClassBuilder.GetConcatExpression(values);
                        newKeyValueExpression.Parameters.Add(concatExpression);
                    }
                }
                else
                {
                    newKeyValueExpression.Parameters.Add(new CodeSnippetExpression
                    {
                        Value = attribute.Value
                    });
                }


                createDictionaryMethod.Parameters.Add(newKeyValueExpression);
            }



            var getDictionaryMethod = new CodeMethodReferenceExpression
            {
                MethodName   = "GetDictionaryFromKeyValue",
                TargetObject =
                    new CodeVariableReferenceExpression
                {
                    VariableName = "NHamlMonoRailView"
                }
            };

            createDictionaryMethod.Method = getDictionaryMethod;

            var variableName = "nhamlTempDictionary" + tempDictionaryCount;

            tempDictionaryCount++;
            var _decl1 = new CodeVariableDeclarationStatement
            {
                InitExpression = createDictionaryMethod,
                Name           = variableName,
                Type           = new CodeTypeReference(typeof(IDictionary <string, object>))
            };

            builder.RenderMethod.Statements.Add(_decl1);
            return(variableName);
        }