@@ -838,6 +838,243 @@ public void Process_GeneratesFormattedOutput_ForDateTime(string specifiedType, s
838
838
Assert . Equal ( expectedTagName , output . TagName ) ;
839
839
}
840
840
841
+ [ Fact ]
842
+ public async Task ProcessAsync_GenerateCheckBox_WithHiddenInputRenderModeNone ( )
843
+ {
844
+ var propertyName = "-expression-" ;
845
+ var expectedTagName = "input" ;
846
+ var inputTypeName = "checkbox" ;
847
+ var expectedAttributes = new TagHelperAttributeList
848
+ {
849
+ { "name" , propertyName } ,
850
+ { "type" , inputTypeName } ,
851
+ { "value" , "true" } ,
852
+ } ;
853
+
854
+ var metadataProvider = new EmptyModelMetadataProvider ( ) ;
855
+ var htmlGenerator = new TestableHtmlGenerator ( metadataProvider ) ;
856
+ var model = false ;
857
+ var modelExplorer = metadataProvider . GetModelExplorerForType ( typeof ( bool ) , model ) ;
858
+ var modelExpression = new ModelExpression ( name : string . Empty , modelExplorer : modelExplorer ) ;
859
+ var viewContext = TestableHtmlGenerator . GetViewContext ( model , htmlGenerator , metadataProvider ) ;
860
+
861
+ viewContext . CheckBoxHiddenInputRenderMode = CheckBoxHiddenInputRenderMode . None ;
862
+
863
+ var tagHelper = new InputTagHelper ( htmlGenerator )
864
+ {
865
+ For = modelExpression ,
866
+ InputTypeName = inputTypeName ,
867
+ Name = propertyName ,
868
+ ViewContext = viewContext ,
869
+ } ;
870
+
871
+ var attributes = new TagHelperAttributeList
872
+ {
873
+ { "name" , propertyName } ,
874
+ { "type" , inputTypeName } ,
875
+ } ;
876
+
877
+ var context = new TagHelperContext ( attributes , new Dictionary < object , object > ( ) , "test" ) ;
878
+ var output = new TagHelperOutput (
879
+ expectedTagName ,
880
+ new TagHelperAttributeList ( ) ,
881
+ getChildContentAsync : ( useCachedResult , encoder ) => Task . FromResult < TagHelperContent > ( result : null ) )
882
+ {
883
+ TagMode = TagMode . SelfClosing ,
884
+ } ;
885
+
886
+ // Act
887
+ await tagHelper . ProcessAsync ( context , output ) ;
888
+
889
+ // Assert
890
+ Assert . Equal ( expectedAttributes , output . Attributes ) ;
891
+ Assert . False ( output . IsContentModified ) ;
892
+ Assert . Equal ( expectedTagName , output . TagName ) ;
893
+
894
+ Assert . False ( viewContext . FormContext . HasEndOfFormContent ) ;
895
+ Assert . True ( string . IsNullOrEmpty ( HtmlContentUtilities . HtmlContentToString ( output . PostElement ) ) ) ;
896
+ }
897
+
898
+ [ Fact ]
899
+ public async Task ProcessAsync_GenerateCheckBox_WithHiddenInputRenderModeInline ( )
900
+ {
901
+ var propertyName = "-expression-" ;
902
+ var expectedTagName = "input" ;
903
+ var expectedPostElementContent = $ "<input name=\" HtmlEncode[[{ propertyName } ]]\" " +
904
+ "type=\" HtmlEncode[[hidden]]\" value=\" HtmlEncode[[false]]\" />" ;
905
+ var inputTypeName = "checkbox" ;
906
+ var expectedAttributes = new TagHelperAttributeList
907
+ {
908
+ { "name" , propertyName } ,
909
+ { "type" , inputTypeName } ,
910
+ { "value" , "true" } ,
911
+ } ;
912
+
913
+ var metadataProvider = new EmptyModelMetadataProvider ( ) ;
914
+ var htmlGenerator = new TestableHtmlGenerator ( metadataProvider ) ;
915
+ var model = false ;
916
+ var modelExplorer = metadataProvider . GetModelExplorerForType ( typeof ( bool ) , model ) ;
917
+ var modelExpression = new ModelExpression ( name : string . Empty , modelExplorer : modelExplorer ) ;
918
+ var viewContext = TestableHtmlGenerator . GetViewContext ( model , htmlGenerator , metadataProvider ) ;
919
+
920
+ viewContext . FormContext . CanRenderAtEndOfForm = true ;
921
+ viewContext . CheckBoxHiddenInputRenderMode = CheckBoxHiddenInputRenderMode . Inline ;
922
+
923
+ var tagHelper = new InputTagHelper ( htmlGenerator )
924
+ {
925
+ For = modelExpression ,
926
+ InputTypeName = inputTypeName ,
927
+ Name = propertyName ,
928
+ ViewContext = viewContext ,
929
+ } ;
930
+
931
+ var attributes = new TagHelperAttributeList
932
+ {
933
+ { "name" , propertyName } ,
934
+ { "type" , inputTypeName } ,
935
+ } ;
936
+
937
+ var context = new TagHelperContext ( attributes , new Dictionary < object , object > ( ) , "test" ) ;
938
+ var output = new TagHelperOutput (
939
+ expectedTagName ,
940
+ new TagHelperAttributeList ( ) ,
941
+ getChildContentAsync : ( useCachedResult , encoder ) => Task . FromResult < TagHelperContent > ( result : null ) )
942
+ {
943
+ TagMode = TagMode . SelfClosing ,
944
+ } ;
945
+
946
+ // Act
947
+ await tagHelper . ProcessAsync ( context , output ) ;
948
+
949
+ // Assert
950
+ Assert . Equal ( expectedAttributes , output . Attributes ) ;
951
+ Assert . False ( output . IsContentModified ) ;
952
+ Assert . Equal ( expectedTagName , output . TagName ) ;
953
+
954
+ Assert . False ( viewContext . FormContext . HasEndOfFormContent ) ;
955
+ Assert . Equal ( expectedPostElementContent , HtmlContentUtilities . HtmlContentToString ( output . PostElement ) ) ;
956
+ }
957
+
958
+ [ Fact ]
959
+ public async Task ProcessAsync_GenerateCheckBox_WithHiddenInputRenderModeEndOfForm ( )
960
+ {
961
+ var propertyName = "-expression-" ;
962
+ var expectedTagName = "input" ;
963
+ var expectedEndOfFormContent = $ "<input name=\" HtmlEncode[[{ propertyName } ]]\" " +
964
+ "type=\" HtmlEncode[[hidden]]\" value=\" HtmlEncode[[false]]\" />" ;
965
+ var inputTypeName = "checkbox" ;
966
+ var expectedAttributes = new TagHelperAttributeList
967
+ {
968
+ { "name" , propertyName } ,
969
+ { "type" , inputTypeName } ,
970
+ { "value" , "true" } ,
971
+ } ;
972
+
973
+ var metadataProvider = new EmptyModelMetadataProvider ( ) ;
974
+ var htmlGenerator = new TestableHtmlGenerator ( metadataProvider ) ;
975
+ var model = false ;
976
+ var modelExplorer = metadataProvider . GetModelExplorerForType ( typeof ( bool ) , model ) ;
977
+ var modelExpression = new ModelExpression ( name : string . Empty , modelExplorer : modelExplorer ) ;
978
+ var viewContext = TestableHtmlGenerator . GetViewContext ( model , htmlGenerator , metadataProvider ) ;
979
+
980
+ viewContext . FormContext . CanRenderAtEndOfForm = true ;
981
+ viewContext . CheckBoxHiddenInputRenderMode = CheckBoxHiddenInputRenderMode . EndOfForm ;
982
+
983
+ var tagHelper = new InputTagHelper ( htmlGenerator )
984
+ {
985
+ For = modelExpression ,
986
+ InputTypeName = inputTypeName ,
987
+ Name = propertyName ,
988
+ ViewContext = viewContext ,
989
+ } ;
990
+
991
+ var attributes = new TagHelperAttributeList
992
+ {
993
+ { "name" , propertyName } ,
994
+ { "type" , inputTypeName } ,
995
+ } ;
996
+
997
+ var context = new TagHelperContext ( attributes , new Dictionary < object , object > ( ) , "test" ) ;
998
+ var output = new TagHelperOutput (
999
+ expectedTagName ,
1000
+ new TagHelperAttributeList ( ) ,
1001
+ getChildContentAsync : ( useCachedResult , encoder ) => Task . FromResult < TagHelperContent > ( result : null ) )
1002
+ {
1003
+ TagMode = TagMode . SelfClosing ,
1004
+ } ;
1005
+
1006
+ // Act
1007
+ await tagHelper . ProcessAsync ( context , output ) ;
1008
+
1009
+ // Assert
1010
+ Assert . Equal ( expectedAttributes , output . Attributes ) ;
1011
+ Assert . False ( output . IsContentModified ) ;
1012
+ Assert . Equal ( expectedTagName , output . TagName ) ;
1013
+
1014
+ Assert . Equal ( expectedEndOfFormContent , string . Join ( "" , viewContext . FormContext . EndOfFormContent . Select ( html => HtmlContentUtilities . HtmlContentToString ( html ) ) ) ) ;
1015
+ Assert . True ( string . IsNullOrEmpty ( HtmlContentUtilities . HtmlContentToString ( output . PostElement ) ) ) ;
1016
+ }
1017
+
1018
+ [ Fact ]
1019
+ public async Task ProcessAsync_GenerateCheckBox_WithHiddenInputRenderModeEndOfForm_AndCanRenderAtEndOfFormNotSet ( )
1020
+ {
1021
+ var propertyName = "-expression-" ;
1022
+ var expectedTagName = "input" ;
1023
+ var expectedPostElementContent = $ "<input name=\" HtmlEncode[[{ propertyName } ]]\" " +
1024
+ "type=\" HtmlEncode[[hidden]]\" value=\" HtmlEncode[[false]]\" />" ;
1025
+ var inputTypeName = "checkbox" ;
1026
+ var expectedAttributes = new TagHelperAttributeList
1027
+ {
1028
+ { "name" , propertyName } ,
1029
+ { "type" , inputTypeName } ,
1030
+ { "value" , "true" } ,
1031
+ } ;
1032
+
1033
+ var metadataProvider = new EmptyModelMetadataProvider ( ) ;
1034
+ var htmlGenerator = new TestableHtmlGenerator ( metadataProvider ) ;
1035
+ var model = false ;
1036
+ var modelExplorer = metadataProvider . GetModelExplorerForType ( typeof ( bool ) , model ) ;
1037
+ var modelExpression = new ModelExpression ( name : string . Empty , modelExplorer : modelExplorer ) ;
1038
+ var viewContext = TestableHtmlGenerator . GetViewContext ( model , htmlGenerator , metadataProvider ) ;
1039
+
1040
+ viewContext . FormContext . CanRenderAtEndOfForm = false ;
1041
+ viewContext . CheckBoxHiddenInputRenderMode = CheckBoxHiddenInputRenderMode . EndOfForm ;
1042
+
1043
+ var tagHelper = new InputTagHelper ( htmlGenerator )
1044
+ {
1045
+ For = modelExpression ,
1046
+ InputTypeName = inputTypeName ,
1047
+ Name = propertyName ,
1048
+ ViewContext = viewContext ,
1049
+ } ;
1050
+
1051
+ var attributes = new TagHelperAttributeList
1052
+ {
1053
+ { "name" , propertyName } ,
1054
+ { "type" , inputTypeName } ,
1055
+ } ;
1056
+
1057
+ var context = new TagHelperContext ( attributes , new Dictionary < object , object > ( ) , "test" ) ;
1058
+ var output = new TagHelperOutput (
1059
+ expectedTagName ,
1060
+ new TagHelperAttributeList ( ) ,
1061
+ getChildContentAsync : ( useCachedResult , encoder ) => Task . FromResult < TagHelperContent > ( result : null ) )
1062
+ {
1063
+ TagMode = TagMode . SelfClosing ,
1064
+ } ;
1065
+
1066
+ // Act
1067
+ await tagHelper . ProcessAsync ( context , output ) ;
1068
+
1069
+ // Assert
1070
+ Assert . Equal ( expectedAttributes , output . Attributes ) ;
1071
+ Assert . False ( output . IsContentModified ) ;
1072
+ Assert . Equal ( expectedTagName , output . TagName ) ;
1073
+
1074
+ Assert . False ( viewContext . FormContext . HasEndOfFormContent ) ;
1075
+ Assert . Equal ( expectedPostElementContent , HtmlContentUtilities . HtmlContentToString ( output . PostElement ) ) ;
1076
+ }
1077
+
841
1078
[ Fact ]
842
1079
public async Task ProcessAsync_CallsGenerateCheckBox_WithExpectedParameters ( )
843
1080
{
0 commit comments