public void ObjectTemplateDisplaysSimplePropertiesOnObjectByDefault() { string expected = "<div class=\"display-label\">Property1</div>" + Environment.NewLine + "<div class=\"display-field\">Model = p1, ModelType = System.String, PropertyName = Property1, HtmlFieldName = Property1, TemplateName = (null), Mode = ReadOnly, AdditionalViewData = (null)</div>" + Environment.NewLine + "<div class=\"display-label\">Property2</div>" + Environment.NewLine + "<div class=\"display-field\">Model = (null), ModelType = System.String, PropertyName = Property2, HtmlFieldName = Property2, TemplateName = (null), Mode = ReadOnly, AdditionalViewData = (null)</div>" + Environment.NewLine; // Arrange ObjectTemplateModel model = new ObjectTemplateModel { Property1 = "p1", Property2 = null }; HtmlHelper html = MakeHtmlHelper <ObjectTemplateModel>(model); // Act string result = DefaultDisplayTemplates.ObjectTemplate(html, SpyCallback); // Assert Assert.Equal(expected, result); }
public void EmailAddressTemplateTests() { Assert.Equal( "<a href=\"mailto:[email protected]\">[email protected]</a>", DefaultDisplayTemplates.EmailAddressTemplate(MakeHtmlHelper <string>("*****@*****.**")) ); Assert.Equal( "<a href=\"mailto:[email protected]\">The FooBar User</a>", DefaultDisplayTemplates.EmailAddressTemplate( MakeHtmlHelper <string>("*****@*****.**", "The FooBar User") ) ); Assert.Equal( "<a href=\"mailto:<script>alert('XSS!')</script>\"><script>alert('XSS!')</script></a>", DefaultDisplayTemplates.EmailAddressTemplate( MakeHtmlHelper <string>("<script>alert('XSS!')</script>") ) ); Assert.Equal( "<a href=\"mailto:<script>alert('XSS!')</script>\"><b>Encode me!</b></a>", DefaultDisplayTemplates.EmailAddressTemplate( MakeHtmlHelper <string>("<script>alert('XSS!')</script>", "<b>Encode me!</b>") ) ); }
public void HiddenInputTemplateTests() { Assert.Equal( "Hidden Value", DefaultDisplayTemplates.HiddenInputTemplate(MakeHtmlHelper <string>("Hidden Value")) ); Assert.Equal( "<b>Encode me!</b>", DefaultDisplayTemplates.HiddenInputTemplate( MakeHtmlHelper <string>("<script>alert('XSS!')</script>", "<b>Encode me!</b>") ) ); var helperWithInvisibleHtml = MakeHtmlHelper <string>( "<script>alert('XSS!')</script>", "<b>Encode me!</b>" ); helperWithInvisibleHtml.ViewData.ModelMetadata.HideSurroundingHtml = true; Assert.Equal( String.Empty, DefaultDisplayTemplates.HiddenInputTemplate(helperWithInvisibleHtml) ); }
public void CollectionTemplateUsesRealObjectTypes() { // Arrange HtmlHelper html = MakeHtmlHelper <List <object> >( new List <object> { 1, 2.3, "Hello World" } ); html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = null; // Act string result = DefaultDisplayTemplates.CollectionTemplate(html, CollectionSpyCallback); // Assert Assert.Equal( Environment.NewLine + "Model = 1, ModelType = System.Int32, PropertyName = (null), HtmlFieldName = [0], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)" + Environment.NewLine + "Model = 2.3, ModelType = System.Double, PropertyName = (null), HtmlFieldName = [1], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)" + Environment.NewLine + "Model = Hello World, ModelType = System.String, PropertyName = (null), HtmlFieldName = [2], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)", result ); }
public void CollectionTemplateWithMultiItemCollection() { // Arrange HtmlHelper html = MakeHtmlHelper <List <string> >( new List <string> { "foo", "bar", "baz" } ); html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = null; // Act string result = DefaultDisplayTemplates.CollectionTemplate(html, CollectionSpyCallback); // Assert Assert.Equal( Environment.NewLine + "Model = foo, ModelType = System.String, PropertyName = (null), HtmlFieldName = [0], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)" + Environment.NewLine + "Model = bar, ModelType = System.String, PropertyName = (null), HtmlFieldName = [1], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)" + Environment.NewLine + "Model = baz, ModelType = System.String, PropertyName = (null), HtmlFieldName = [2], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)", result ); }
public void ObjectTemplate_IgnoresPropertiesWith_ScaffoldColumnFalse() { // Arrange var expected = "<div class=\"HtmlEncode[[display-label]]\">HtmlEncode[[Property1]]</div>" + Environment.NewLine + "<div class=\"HtmlEncode[[display-field]]\"></div>" + Environment.NewLine + "<div class=\"HtmlEncode[[display-label]]\">HtmlEncode[[Property3]]</div>" + Environment.NewLine + "<div class=\"HtmlEncode[[display-field]]\"></div>" + Environment.NewLine; var model = new DefaultTemplatesUtilities.ObjectWithScaffoldColumn(); var viewEngine = new Mock <ICompositeViewEngine>(MockBehavior.Strict); viewEngine .Setup(v => v.GetView(/*executingFilePath*/ null, It.IsAny <string>(), /*isMainPage*/ false)) .Returns(ViewEngineResult.NotFound(string.Empty, Enumerable.Empty <string>())); viewEngine .Setup(v => v.FindView(It.IsAny <ActionContext>(), It.IsAny <string>(), /*isMainPage*/ false)) .Returns(ViewEngineResult.NotFound(string.Empty, Enumerable.Empty <string>())); var htmlHelper = DefaultTemplatesUtilities.GetHtmlHelper(model, viewEngine.Object); // Act var result = DefaultDisplayTemplates.ObjectTemplate(htmlHelper); // Assert Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(result)); }
public void ObjectTemplateDisplaysSimpleDisplayTextWhenTemplateDepthGreaterThanOne( string text, bool htmlEncode, string expectedResult ) { // Arrange ObjectTemplateModel model = new ObjectTemplateModel(); HtmlHelper html = MakeHtmlHelper <ObjectTemplateModel>(model); ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType( () => model, typeof(ObjectTemplateModel) ); metadata.SimpleDisplayText = text; metadata.HtmlEncode = htmlEncode; html.ViewData.ModelMetadata = metadata; html.ViewData.TemplateInfo.VisitedObjects.Add("foo"); html.ViewData.TemplateInfo.VisitedObjects.Add("bar"); // Act string result = DefaultDisplayTemplates.ObjectTemplate(html, SpyCallback); // Assert Assert.Equal(expectedResult, result); }
public void HiddenInputTemplate_HonoursHideSurroundingHtml() { // Arrange var model = "Model string"; var provider = new TestModelMetadataProvider(); provider.ForType <string>().DisplayDetails(dd => { dd.HideSurroundingHtml = true; }); var html = DefaultTemplatesUtilities.GetHtmlHelper(model, provider: provider); var viewData = html.ViewData; var templateInfo = viewData.TemplateInfo; templateInfo.HtmlFieldPrefix = "FieldPrefix"; templateInfo.FormattedModelValue = "Formatted string"; // Act var result = DefaultDisplayTemplates.HiddenInputTemplate(html); // Assert Assert.Empty(result); }
public static IHtmlContent HiddenInputTemplate(IHtmlHelper htmlHelper) { var viewData = htmlHelper.ViewData; var model = viewData.Model; IHtmlContent display; if (viewData.ModelMetadata.HideSurroundingHtml) { display = null; } else { display = DefaultDisplayTemplates.StringTemplate(htmlHelper); } var htmlAttributesObject = viewData[HtmlAttributeKey]; var hidden = htmlHelper.Hidden(expression: null, value: model, htmlAttributes: htmlAttributesObject); if (viewData.ModelMetadata.HideSurroundingHtml) { return(hidden); } return(new HtmlContentBuilder(capacity: 2) .AppendHtml(display) .AppendHtml(hidden)); }
public void ObjectTemplateDisplaysSimpleDisplayTextWhenTemplateDepthGreaterThanOne( string simpleDisplayText, bool htmlEncode, string expectedResult) { // Arrange var model = new DefaultTemplatesUtilities.ObjectTemplateModel(); model.Property1 = simpleDisplayText; var provider = new TestModelMetadataProvider(); provider.ForType <DefaultTemplatesUtilities.ObjectTemplateModel>().DisplayDetails(dd => { dd.HtmlEncode = htmlEncode; dd.SimpleDisplayProperty = "Property1"; }); var html = DefaultTemplatesUtilities.GetHtmlHelper(model, provider); html.ViewData.TemplateInfo.AddVisited("foo"); html.ViewData.TemplateInfo.AddVisited("bar"); // Act var result = DefaultDisplayTemplates.ObjectTemplate(html); // Assert Assert.Equal(expectedResult, result); }
public void ObjectTemplatePreventsRecursionOnModelTypeForNullModelValues() { string expected = "<div class=\"display-label\">Property2</div>" + Environment.NewLine + "<div class=\"display-field\">Model = propValue2, ModelType = System.String, PropertyName = Property2, HtmlFieldName = Property2, TemplateName = (null), Mode = ReadOnly, AdditionalViewData = (null)</div>" + Environment.NewLine; // Arrange ObjectTemplateModel model = new ObjectTemplateModel(); HtmlHelper html = MakeHtmlHelper <ObjectTemplateModel>(model); Mock <ModelMetadataProvider> provider = new Mock <ModelMetadataProvider>(); Func <object> accessor = () => model; Mock <ModelMetadata> metadata = new Mock <ModelMetadata>(provider.Object, null, accessor, typeof(ObjectTemplateModel), null); ModelMetadata prop1Metadata = new ModelMetadata(provider.Object, typeof(ObjectTemplateModel), null, typeof(string), "Property1"); ModelMetadata prop2Metadata = new ModelMetadata(provider.Object, typeof(ObjectTemplateModel), () => "propValue2", typeof(string), "Property2"); html.ViewData.ModelMetadata = metadata.Object; metadata.Setup(p => p.Properties).Returns(() => new[] { prop1Metadata, prop2Metadata }); html.ViewData.TemplateInfo.VisitedObjects.Add(typeof(string)); // Act string result = DefaultDisplayTemplates.ObjectTemplate(html, SpyCallback); // Assert Assert.Equal(expected, result); }
public void BooleanTemplateTests() { // Boolean values Assert.Equal( "<input checked=\"checked\" class=\"check-box\" disabled=\"disabled\" type=\"checkbox\" />", DefaultDisplayTemplates.BooleanTemplate(MakeHtmlHelper <bool>(true))); Assert.Equal( "<input class=\"check-box\" disabled=\"disabled\" type=\"checkbox\" />", DefaultDisplayTemplates.BooleanTemplate(MakeHtmlHelper <bool>(false))); Assert.Equal( "<input class=\"check-box\" disabled=\"disabled\" type=\"checkbox\" />", DefaultDisplayTemplates.BooleanTemplate(MakeHtmlHelper <bool>(null))); // Nullable<Boolean> values Assert.Equal( "<select class=\"tri-state list-box\" disabled=\"disabled\"><option value=\"\">Not Set</option><option selected=\"selected\" value=\"true\">True</option><option value=\"false\">False</option></select>", DefaultDisplayTemplates.BooleanTemplate(MakeHtmlHelper <Nullable <bool> >(true))); Assert.Equal( "<select class=\"tri-state list-box\" disabled=\"disabled\"><option value=\"\">Not Set</option><option value=\"true\">True</option><option selected=\"selected\" value=\"false\">False</option></select>", DefaultDisplayTemplates.BooleanTemplate(MakeHtmlHelper <Nullable <bool> >(false))); Assert.Equal( "<select class=\"tri-state list-box\" disabled=\"disabled\"><option selected=\"selected\" value=\"\">Not Set</option><option value=\"true\">True</option><option value=\"false\">False</option></select>", DefaultDisplayTemplates.BooleanTemplate(MakeHtmlHelper <Nullable <bool> >(null))); }
public void ObjectTemplate_HonoursHideSurroundingHtml() { // Arrange var expected = "Model = p1, ModelType = System.String, PropertyName = Property1, SimpleDisplayText = p1" + "<div class=\"display-label\">Property2</div>" + Environment.NewLine + "<div class=\"display-field\">Model = (null), ModelType = System.String, PropertyName = Property2," + " SimpleDisplayText = (null)</div>" + Environment.NewLine; var model = new DefaultTemplatesUtilities.ObjectTemplateModel { Property1 = "p1", Property2 = null }; var provider = new TestModelMetadataProvider(); provider.ForProperty <DefaultTemplatesUtilities.ObjectTemplateModel>("Property1").DisplayDetails(dd => { dd.HideSurroundingHtml = true; }); var html = DefaultTemplatesUtilities.GetHtmlHelper(model, provider); // Act var result = DefaultDisplayTemplates.ObjectTemplate(html); // Assert Assert.Equal(expected, result); }
public void ObjectTemplateWithShowForDisplayMetadata() { string expected = @"<div class=""display-label"">Property1</div> <div class=""display-field"">Model = (null), ModelType = System.String, PropertyName = Property1, HtmlFieldName = Property1, TemplateName = (null), Mode = ReadOnly, AdditionalViewData = (null)</div> "; // Arrange ObjectTemplateModel model = new ObjectTemplateModel(); HtmlHelper html = MakeHtmlHelper <ObjectTemplateModel>(model); Mock <ModelMetadataProvider> provider = new Mock <ModelMetadataProvider>(); Func <object> accessor = () => model; Mock <ModelMetadata> metadata = new Mock <ModelMetadata>(provider.Object, null, accessor, typeof(ObjectTemplateModel), null); ModelMetadata prop1Metadata = new ModelMetadata(provider.Object, typeof(ObjectTemplateModel), null, typeof(string), "Property1") { ShowForDisplay = true }; ModelMetadata prop2Metadata = new ModelMetadata(provider.Object, typeof(ObjectTemplateModel), null, typeof(string), "Property2") { ShowForDisplay = false }; html.ViewData.ModelMetadata = metadata.Object; metadata.Setup(p => p.Properties).Returns(() => new[] { prop1Metadata, prop2Metadata }); // Act string result = DefaultDisplayTemplates.ObjectTemplate(html, SpyCallback); // Assert Assert.Equal(expected, result); }
public void ObjectTemplateWithDisplayNameMetadata() { string expected = "<div class=\"display-field\">Model = (null), ModelType = System.String, PropertyName = Property1, HtmlFieldName = Property1, TemplateName = (null), Mode = ReadOnly, AdditionalViewData = (null)</div>" + Environment.NewLine + "<div class=\"display-label\">Custom display name</div>" + Environment.NewLine + "<div class=\"display-field\">Model = (null), ModelType = System.String, PropertyName = Property2, HtmlFieldName = Property2, TemplateName = (null), Mode = ReadOnly, AdditionalViewData = (null)</div>" + Environment.NewLine; // Arrange ObjectTemplateModel model = new ObjectTemplateModel(); HtmlHelper html = MakeHtmlHelper <ObjectTemplateModel>(model); Mock <ModelMetadataProvider> provider = new Mock <ModelMetadataProvider>(); Func <object> accessor = () => model; Mock <ModelMetadata> metadata = new Mock <ModelMetadata>(provider.Object, null, accessor, typeof(ObjectTemplateModel), null); ModelMetadata prop1Metadata = new ModelMetadata(provider.Object, typeof(ObjectTemplateModel), null, typeof(string), "Property1") { DisplayName = String.Empty }; ModelMetadata prop2Metadata = new ModelMetadata(provider.Object, typeof(ObjectTemplateModel), null, typeof(string), "Property2") { DisplayName = "Custom display name" }; html.ViewData.ModelMetadata = metadata.Object; metadata.Setup(p => p.Properties).Returns(() => new[] { prop1Metadata, prop2Metadata }); // Act string result = DefaultDisplayTemplates.ObjectTemplate(html, SpyCallback); // Assert Assert.Equal(expected, result); }
private static IHtmlContent BooleanTemplateDropDownList(IHtmlHelper htmlHelper, bool?value) { return(htmlHelper.DropDownList( expression: null, selectList: DefaultDisplayTemplates.TriStateValues(value), optionLabel: null, htmlAttributes: CreateHtmlAttributes(htmlHelper, "list-box tri-state"))); }
public void StringTemplateTests() { Assert.Equal( "Hello, world!", DefaultDisplayTemplates.StringTemplate(MakeHtmlHelper <string>("", "Hello, world!"))); Assert.Equal( "<b>Hello, world!</b>", DefaultDisplayTemplates.StringTemplate(MakeHtmlHelper <string>("", "<b>Hello, world!</b>"))); }
public void UrlTemplateTests() { Assert.Equal( "<a href=\"http://www.microsoft.com/testing.aspx?value1=foo&value2=bar\">http://www.microsoft.com/testing.aspx?value1=foo&value2=bar</a>", DefaultDisplayTemplates.UrlTemplate(MakeHtmlHelper <string>("http://www.microsoft.com/testing.aspx?value1=foo&value2=bar"))); Assert.Equal( "<a href=\"http://www.microsoft.com/testing.aspx?value1=foo&value2=bar\"><b>Microsoft!</b></a>", DefaultDisplayTemplates.UrlTemplate(MakeHtmlHelper <string>("http://www.microsoft.com/testing.aspx?value1=foo&value2=bar", "<b>Microsoft!</b>"))); }
public void HtmlTemplateTests() { Assert.Equal( "Hello, world!", DefaultDisplayTemplates.HtmlTemplate(MakeHtmlHelper <string>("", "Hello, world!"))); Assert.Equal( "<b>Hello, world!</b>", DefaultDisplayTemplates.HtmlTemplate(MakeHtmlHelper <string>("", "<b>Hello, world!</b>"))); }
public void CollectionTemplateNonEnumerableModelThrows() { // Arrange HtmlHelper html = MakeHtmlHelper <object>(new object()); // Act & Assert Assert.Throws <InvalidOperationException>( () => DefaultDisplayTemplates.CollectionTemplate(html, CollectionSpyCallback), "The Collection template was used with an object of type 'System.Object', which does not implement System.IEnumerable." ); }
public void CollectionTemplateWithNullModel() { // Arrange HtmlHelper html = MakeHtmlHelper <object>(null); // Act string result = DefaultDisplayTemplates.CollectionTemplate(html, CollectionSpyCallback); // Assert Assert.Equal(String.Empty, result); }
public void ObjectTemplateAllPropertiesFromEntityObjectAreHidden() { // Arrange HtmlHelper html = MakeHtmlHelper <ObjectTemplateModel>(new MyEntityObject()); // Act string result = DefaultDisplayTemplates.ObjectTemplate(html, SpyCallback); // Assert Assert.Equal(String.Empty, result); }
public void DecimalTemplateTests() { Assert.Equal( String.Format(CultureInfo.CurrentCulture, "{0:0.00}", 12.35M), DefaultDisplayTemplates.DecimalTemplate(MakeHtmlHelper <decimal>(12.3456M))); Assert.Equal( "Formatted Value", DefaultDisplayTemplates.DecimalTemplate(MakeHtmlHelper <decimal>(12.3456M, "Formatted Value"))); Assert.Equal( "<script>alert('XSS!')</script>", DefaultDisplayTemplates.DecimalTemplate(MakeHtmlHelper <decimal>(12.3456M, "<script>alert('XSS!')</script>"))); }
public void DecimalTemplateTests() { Assert.Equal( @"12.35", DefaultDisplayTemplates.DecimalTemplate(MakeHtmlHelper <decimal>(12.3456M))); Assert.Equal( @"Formatted Value", DefaultDisplayTemplates.DecimalTemplate(MakeHtmlHelper <decimal>(12.3456M, "Formatted Value"))); Assert.Equal( @"<script>alert('XSS!')</script>", DefaultDisplayTemplates.DecimalTemplate(MakeHtmlHelper <decimal>(12.3456M, "<script>alert('XSS!')</script>"))); }
public void ObjectTemplateDisplaysNullDisplayTextWhenObjectIsNull() { // Arrange HtmlHelper html = MakeHtmlHelper <ObjectTemplateModel>(null); ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(ObjectTemplateModel)); metadata.NullDisplayText = "(null value)"; html.ViewData.ModelMetadata = metadata; // Act string result = DefaultDisplayTemplates.ObjectTemplate(html, SpyCallback); // Assert Assert.Equal(metadata.NullDisplayText, result); }
public void CollectionTemplateWithSingleItemCollectionWithoutPrefix() { // Arrange HtmlHelper html = MakeHtmlHelper <List <string> >(new List <string> { "foo" }); html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = null; // Act string result = DefaultDisplayTemplates.CollectionTemplate(html, CollectionSpyCallback); // Assert Assert.Equal(@" Model = foo, ModelType = System.String, PropertyName = (null), HtmlFieldName = [0], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)", result); }
public void CollectionTemplateNullItemInStronglyTypedCollectionUsesModelTypeFromIEnumerable() { // Arrange HtmlHelper html = MakeHtmlHelper <List <IHttpHandler> >(new List <IHttpHandler> { null }); html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = null; // Act string result = DefaultDisplayTemplates.CollectionTemplate(html, CollectionSpyCallback); // Assert Assert.Equal(@" Model = (null), ModelType = System.Web.IHttpHandler, PropertyName = (null), HtmlFieldName = [0], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)", result); }
public void ObjectTemplateDisplaysNullDisplayTextWhenObjectIsNull() { // Arrange var html = DefaultTemplatesUtilities.GetHtmlHelper(); var metadata = new EmptyModelMetadataProvider() .GetMetadataForType(null, typeof(DefaultTemplatesUtilities.ObjectTemplateModel)); metadata.NullDisplayText = "(null value)"; html.ViewData.ModelMetadata = metadata; // Act var result = DefaultDisplayTemplates.ObjectTemplate(html); // Assert Assert.Equal(metadata.NullDisplayText, result); }
public void CollectionTemplateNullITemInWeaklyTypedCollectionUsesModelTypeOfString() { // Arrange HtmlHelper html = MakeHtmlHelper <ArrayList>(new ArrayList { null }); html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = null; // Act string result = DefaultDisplayTemplates.CollectionTemplate(html, CollectionSpyCallback); // Assert Assert.Equal(@" Model = (null), ModelType = System.String, PropertyName = (null), HtmlFieldName = [0], TemplateName = (null), Mode = ReadOnly, TemplateInfo.HtmlFieldPrefix = , AdditionalViewData = (null)", result); }
public void HiddenInputTemplate_ReturnsValue() { // Arrange var model = "Model string"; var html = DefaultTemplatesUtilities.GetHtmlHelper(model); var templateInfo = html.ViewData.TemplateInfo; templateInfo.HtmlFieldPrefix = "FieldPrefix"; // TemplateBuilder sets FormattedModelValue before calling TemplateRenderer and it's used below. templateInfo.FormattedModelValue = "Formatted string"; // Act var result = DefaultDisplayTemplates.HiddenInputTemplate(html); // Assert Assert.Equal("Formatted string", result); }