@@ -979,6 +979,186 @@ func Test_stats(t *testing.T) {
979979 }
980980}
981981
982+ func TestFlagsWithEmptySymbols (t * testing.T ) {
983+ tests := []struct {
984+ name string
985+ styles styles
986+ symbols symbols
987+ st * gitstatus.Status
988+ want string
989+ }{
990+ {
991+ name : "empty stashed symbol hides stash count" ,
992+ styles : styles {
993+ Clear : "StyleClear" ,
994+ Modified : "StyleMod" ,
995+ Stashed : "StyleStash" ,
996+ },
997+ symbols : symbols {
998+ Modified : "SymbolMod" ,
999+ Stashed : "" , // empty symbol should hide this flag
1000+ },
1001+ st : & gitstatus.Status {
1002+ NumStashed : 5 ,
1003+ Porcelain : gitstatus.Porcelain {
1004+ NumModified : 2 ,
1005+ },
1006+ },
1007+ want : "StyleClear" + "StyleModSymbolMod2" ,
1008+ },
1009+ {
1010+ name : "empty modified symbol hides modified count" ,
1011+ styles : styles {
1012+ Clear : "StyleClear" ,
1013+ Modified : "StyleMod" ,
1014+ Stashed : "StyleStash" ,
1015+ },
1016+ symbols : symbols {
1017+ Modified : "" , // empty symbol should hide this flag
1018+ Stashed : "SymbolStash" ,
1019+ },
1020+ st : & gitstatus.Status {
1021+ NumStashed : 1 ,
1022+ Porcelain : gitstatus.Porcelain {
1023+ NumModified : 2 ,
1024+ },
1025+ },
1026+ want : "StyleClear" + "StyleStashSymbolStash1" ,
1027+ },
1028+ {
1029+ name : "empty staged symbol hides staged count" ,
1030+ styles : styles {
1031+ Clear : "StyleClear" ,
1032+ Staged : "StyleStaged" ,
1033+ Stashed : "StyleStash" ,
1034+ },
1035+ symbols : symbols {
1036+ Staged : "" , // empty symbol should hide this flag
1037+ Stashed : "SymbolStash" ,
1038+ },
1039+ st : & gitstatus.Status {
1040+ NumStashed : 1 ,
1041+ Porcelain : gitstatus.Porcelain {
1042+ NumStaged : 3 ,
1043+ },
1044+ },
1045+ want : "StyleClear" + "StyleStashSymbolStash1" ,
1046+ },
1047+ {
1048+ name : "empty untracked symbol hides untracked count" ,
1049+ styles : styles {
1050+ Clear : "StyleClear" ,
1051+ Untracked : "StyleUntracked" ,
1052+ Stashed : "StyleStash" ,
1053+ },
1054+ symbols : symbols {
1055+ Untracked : "" , // empty symbol should hide this flag
1056+ Stashed : "SymbolStash" ,
1057+ },
1058+ st : & gitstatus.Status {
1059+ NumStashed : 1 ,
1060+ Porcelain : gitstatus.Porcelain {
1061+ NumUntracked : 7 ,
1062+ },
1063+ },
1064+ want : "StyleClear" + "StyleStashSymbolStash1" ,
1065+ },
1066+ {
1067+ name : "empty conflict symbol hides conflict count" ,
1068+ styles : styles {
1069+ Clear : "StyleClear" ,
1070+ Conflict : "StyleConflict" ,
1071+ Stashed : "StyleStash" ,
1072+ },
1073+ symbols : symbols {
1074+ Conflict : "" , // empty symbol should hide this flag
1075+ Stashed : "SymbolStash" ,
1076+ },
1077+ st : & gitstatus.Status {
1078+ NumStashed : 1 ,
1079+ Porcelain : gitstatus.Porcelain {
1080+ NumConflicts : 3 ,
1081+ },
1082+ },
1083+ want : "StyleClear" + "StyleStashSymbolStash1" ,
1084+ },
1085+ {
1086+ name : "empty clean symbol hides clean flag" ,
1087+ styles : styles {
1088+ Clear : "StyleClear" ,
1089+ Clean : "StyleClean" ,
1090+ Stashed : "StyleStash" ,
1091+ },
1092+ symbols : symbols {
1093+ Clean : "" , // empty symbol should hide this flag
1094+ Stashed : "SymbolStash" ,
1095+ },
1096+ st : & gitstatus.Status {
1097+ IsClean : true ,
1098+ NumStashed : 1 ,
1099+ },
1100+ want : "StyleClear" + "StyleStashSymbolStash1" ,
1101+ },
1102+ {
1103+ name : "empty stashed symbol in clean state hides stash count" ,
1104+ styles : styles {
1105+ Clear : "StyleClear" ,
1106+ Clean : "StyleClean" ,
1107+ },
1108+ symbols : symbols {
1109+ Clean : "SymbolClean" ,
1110+ Stashed : "" , // empty symbol should hide this flag
1111+ },
1112+ st : & gitstatus.Status {
1113+ IsClean : true ,
1114+ NumStashed : 1 ,
1115+ },
1116+ want : "StyleClear" + "StyleCleanSymbolClean" ,
1117+ },
1118+ {
1119+ name : "all symbols empty shows nothing" ,
1120+ styles : styles {
1121+ Clear : "StyleClear" ,
1122+ Clean : "StyleClean" ,
1123+ Staged : "StyleStaged" ,
1124+ Modified : "StyleMod" ,
1125+ Conflict : "StyleConflict" ,
1126+ Untracked : "StyleUntracked" ,
1127+ Stashed : "StyleStash" ,
1128+ },
1129+ symbols : symbols {
1130+ Clean : "" ,
1131+ Staged : "" ,
1132+ Modified : "" ,
1133+ Conflict : "" ,
1134+ Untracked : "" ,
1135+ Stashed : "" ,
1136+ },
1137+ st : & gitstatus.Status {
1138+ IsClean : false ,
1139+ NumStashed : 1 ,
1140+ Porcelain : gitstatus.Porcelain {
1141+ NumStaged : 3 ,
1142+ NumModified : 2 ,
1143+ NumConflicts : 1 ,
1144+ NumUntracked : 4 ,
1145+ },
1146+ },
1147+ want : "" ,
1148+ },
1149+ }
1150+ for _ , tt := range tests {
1151+ t .Run (tt .name , func (t * testing.T ) {
1152+ f := & Formater {
1153+ Config : Config {Styles : tt .styles , Symbols : tt .symbols },
1154+ st : tt .st ,
1155+ }
1156+
1157+ compareStrings (t , tt .want , f .flags ())
1158+ })
1159+ }
1160+ }
1161+
9821162func compareStrings (t * testing.T , want , got string ) {
9831163 if got != want {
9841164 t .Errorf (`
0 commit comments