@@ -24,6 +24,11 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
24
24
{
25
25
public class DefaultEditorTemplatesTest
26
26
{
27
+ static DefaultEditorTemplatesTest ( )
28
+ {
29
+ AppContext . SetSwitch ( "Switch.Microsoft.AspNetCore.Mvc.UsePasswordValue" , true ) ;
30
+ }
31
+
27
32
// Mappings from templateName to expected result when using StubbyHtmlHelper.
28
33
public static TheoryData < string , string > TemplateNameData
29
34
{
@@ -521,6 +526,113 @@ public void MultilineTextTemplate_ReturnsTextArea()
521
526
Assert . Equal ( expected , HtmlContentUtilities . HtmlContentToString ( result ) ) ;
522
527
}
523
528
529
+ [ Fact ]
530
+ public void PasswordTemplate_ReturnsInputElement_IgnoresExpressionValue ( )
531
+ {
532
+ // Arrange
533
+ var expected = "<input class=\" HtmlEncode[[text-box single-line password]]\" " +
534
+ "id=\" HtmlEncode[[FieldPrefix]]\" name=\" HtmlEncode[[FieldPrefix]]\" " +
535
+ "type=\" HtmlEncode[[password]]\" />" ;
536
+
537
+ var model = "Model string" ;
538
+
539
+ var helper = DefaultTemplatesUtilities . GetHtmlHelper ( model ) ;
540
+ var viewData = helper . ViewData ;
541
+ var templateInfo = viewData . TemplateInfo ;
542
+ templateInfo . HtmlFieldPrefix = "FieldPrefix" ;
543
+
544
+ // Act
545
+ var result = DefaultEditorTemplates . PasswordTemplate ( helper ) ;
546
+
547
+ // Assert
548
+ Assert . Equal ( expected , HtmlContentUtilities . HtmlContentToString ( result ) ) ;
549
+ }
550
+
551
+ [ Fact ]
552
+ public void PasswordTemplate_ReturnsInputElement_IgnoresFormattedModelValue ( )
553
+ {
554
+ // Arrange
555
+ var expected = "<input class=\" HtmlEncode[[text-box single-line password]]\" " +
556
+ "id=\" HtmlEncode[[FieldPrefix]]\" name=\" HtmlEncode[[FieldPrefix]]\" " +
557
+ "type=\" HtmlEncode[[password]]\" />" ;
558
+ var helper = DefaultTemplatesUtilities . GetHtmlHelper < string > ( model : null ) ;
559
+ var viewData = helper . ViewData ;
560
+ var templateInfo = viewData . TemplateInfo ;
561
+ templateInfo . HtmlFieldPrefix = "FieldPrefix" ;
562
+
563
+ templateInfo . FormattedModelValue = "Formatted string" ;
564
+
565
+ // Act
566
+ var result = DefaultEditorTemplates . PasswordTemplate ( helper ) ;
567
+
568
+ // Assert
569
+ Assert . Equal ( expected , HtmlContentUtilities . HtmlContentToString ( result ) ) ;
570
+ }
571
+
572
+ [ Fact ]
573
+ public void PasswordTemplate_ReturnsInputElement_IgnoresModelState ( )
574
+ {
575
+ // Arrange
576
+ var expected = "<input class=\" HtmlEncode[[text-box single-line password]]\" " +
577
+ "id=\" HtmlEncode[[FieldPrefix]]\" name=\" HtmlEncode[[FieldPrefix]]\" " +
578
+ "type=\" HtmlEncode[[password]]\" />" ;
579
+ var helper = DefaultTemplatesUtilities . GetHtmlHelper < string > ( model : null ) ;
580
+ var viewData = helper . ViewData ;
581
+ var templateInfo = viewData . TemplateInfo ;
582
+ templateInfo . HtmlFieldPrefix = "FieldPrefix" ;
583
+
584
+ var modelState = viewData . ModelState ;
585
+ modelState . SetModelValue ( "FieldPRefix" , "Raw model string" , "Attempted model string" ) ;
586
+
587
+ // Act
588
+ var result = DefaultEditorTemplates . PasswordTemplate ( helper ) ;
589
+
590
+ // Assert
591
+ Assert . Equal ( expected , HtmlContentUtilities . HtmlContentToString ( result ) ) ;
592
+ }
593
+
594
+ [ Fact ]
595
+ public void PasswordTemplate_ReturnsInputElement_IgnoresViewData ( )
596
+ {
597
+ // Arrange
598
+ var expected = "<input class=\" HtmlEncode[[text-box single-line password]]\" " +
599
+ "id=\" HtmlEncode[[FieldPrefix]]\" name=\" HtmlEncode[[FieldPrefix]]\" " +
600
+ "type=\" HtmlEncode[[password]]\" />" ;
601
+ var helper = DefaultTemplatesUtilities . GetHtmlHelper < string > ( model : null ) ;
602
+ var viewData = helper . ViewData ;
603
+ var templateInfo = viewData . TemplateInfo ;
604
+ templateInfo . HtmlFieldPrefix = "FieldPrefix" ;
605
+
606
+ viewData [ "FieldPrefix" ] = "ViewData string" ;
607
+
608
+ // Act
609
+ var result = DefaultEditorTemplates . PasswordTemplate ( helper ) ;
610
+
611
+ // Assert
612
+ Assert . Equal ( expected , HtmlContentUtilities . HtmlContentToString ( result ) ) ;
613
+ }
614
+
615
+ [ Fact ]
616
+ public void PasswordTemplate_ReturnsInputElement_UsesHtmlAttributes ( )
617
+ {
618
+ // Arrange
619
+ var expected = "<input class=\" HtmlEncode[[super text-box single-line password]]\" " +
620
+ "id=\" HtmlEncode[[FieldPrefix]]\" name=\" HtmlEncode[[FieldPrefix]]\" " +
621
+ "type=\" HtmlEncode[[password]]\" value=\" HtmlEncode[[Html attributes string]]\" />" ;
622
+ var helper = DefaultTemplatesUtilities . GetHtmlHelper < string > ( model : null ) ;
623
+ var viewData = helper . ViewData ;
624
+ var templateInfo = viewData . TemplateInfo ;
625
+ templateInfo . HtmlFieldPrefix = "FieldPrefix" ;
626
+
627
+ viewData [ "htmlAttributes" ] = new { @class = "super" , value = "Html attributes string" } ;
628
+
629
+ // Act
630
+ var result = DefaultEditorTemplates . PasswordTemplate ( helper ) ;
631
+
632
+ // Assert
633
+ Assert . Equal ( expected , HtmlContentUtilities . HtmlContentToString ( result ) ) ;
634
+ }
635
+
524
636
[ Theory ]
525
637
[ MemberData ( nameof ( TemplateNameData ) ) ]
526
638
public void Editor_CallsExpectedHtmlHelper ( string templateName , string expectedResult )
0 commit comments