@@ -913,6 +913,163 @@ public function getRulesOrdersRulesWithSameLineNumberByColumnNumber(): void
913
913
self ::assertSame ([$ first , $ second , $ third ], $ result );
914
914
}
915
915
916
+ /**
917
+ * @return array<string, array{0: list<string>, 1: string, 2: list<string>}>
918
+ */
919
+ public static function providePropertyNamesAndSearchPatternAndMatchingPropertyNames (): array
920
+ {
921
+ return [
922
+ 'single rule matched ' => [
923
+ ['color ' ],
924
+ 'color ' ,
925
+ ['color ' ],
926
+ ],
927
+ 'first rule matched ' => [
928
+ ['color ' , 'display ' ],
929
+ 'color ' ,
930
+ ['color ' ],
931
+ ],
932
+ 'last rule matched ' => [
933
+ ['color ' , 'display ' ],
934
+ 'display ' ,
935
+ ['display ' ],
936
+ ],
937
+ 'middle rule matched ' => [
938
+ ['color ' , 'display ' , 'width ' ],
939
+ 'display ' ,
940
+ ['display ' ],
941
+ ],
942
+ 'multiple rules for the same property matched ' => [
943
+ ['color ' , 'color ' ],
944
+ 'color ' ,
945
+ ['color ' ],
946
+ ],
947
+ 'multiple rules for the same property matched in haystack ' => [
948
+ ['color ' , 'display ' , 'color ' , 'width ' ],
949
+ 'color ' ,
950
+ ['color ' ],
951
+ ],
952
+ 'no match in empty list ' => [
953
+ [],
954
+ 'color ' ,
955
+ [],
956
+ ],
957
+ 'no match for property not in list ' => [
958
+ ['color ' , 'display ' ],
959
+ 'width ' ,
960
+ [],
961
+ ],
962
+ 'shorthand rule matched ' => [
963
+ ['font ' ],
964
+ 'font- ' ,
965
+ ['font ' ],
966
+ ],
967
+ 'longhand rule matched ' => [
968
+ ['font-size ' ],
969
+ 'font- ' ,
970
+ ['font-size ' ],
971
+ ],
972
+ 'shorthand and longhand rule matched ' => [
973
+ ['font ' , 'font-size ' ],
974
+ 'font- ' ,
975
+ ['font ' , 'font-size ' ],
976
+ ],
977
+ 'shorthand rule matched in haystack ' => [
978
+ ['font ' , 'color ' ],
979
+ 'font- ' ,
980
+ ['font ' ],
981
+ ],
982
+ 'longhand rule matched in haystack ' => [
983
+ ['font-size ' , 'color ' ],
984
+ 'font- ' ,
985
+ ['font-size ' ],
986
+ ],
987
+ 'rules whose property names begin with the same characters not matched with pattern match ' => [
988
+ ['contain ' , 'container ' , 'container-type ' ],
989
+ 'contain- ' ,
990
+ ['contain ' ],
991
+ ],
992
+ 'rules whose property names begin with the same characters not matched with exact match ' => [
993
+ ['contain ' , 'container ' , 'container-type ' ],
994
+ 'contain ' ,
995
+ ['contain ' ],
996
+ ],
997
+ ];
998
+ }
999
+
1000
+ /**
1001
+ * @test
1002
+ *
1003
+ * @param list<string> $propertyNamesToSet
1004
+ * @param list<string> $matchingPropertyNames
1005
+ *
1006
+ * @dataProvider providePropertyNamesAndSearchPatternAndMatchingPropertyNames
1007
+ */
1008
+ public function getRulesWithPatternReturnsAllMatchingRules (
1009
+ array $ propertyNamesToSet ,
1010
+ string $ searchPattern ,
1011
+ array $ matchingPropertyNames
1012
+ ): void {
1013
+ $ rulesToSet = self ::createRulesFromPropertyNames ($ propertyNamesToSet );
1014
+ $ matchingRules = \array_filter (
1015
+ $ rulesToSet ,
1016
+ static function (Rule $ rule ) use ($ matchingPropertyNames ): bool {
1017
+ return \in_array ($ rule ->getRule (), $ matchingPropertyNames , true );
1018
+ }
1019
+ );
1020
+ $ this ->subject ->setRules ($ rulesToSet );
1021
+
1022
+ $ result = $ this ->subject ->getRules ($ searchPattern );
1023
+
1024
+ if ($ matchingRules === []) {
1025
+ self ::assertSame ([], $ result );
1026
+ }
1027
+ foreach ($ matchingRules as $ expectedMatchingRule ) {
1028
+ self ::assertContains ($ expectedMatchingRule , $ result );
1029
+ }
1030
+ }
1031
+
1032
+ /**
1033
+ * @test
1034
+ *
1035
+ * @param list<string> $propertyNamesToSet
1036
+ * @param list<string> $matchingPropertyNames
1037
+ *
1038
+ * @dataProvider providePropertyNamesAndSearchPatternAndMatchingPropertyNames
1039
+ */
1040
+ public function getRulesWithPatternFiltersNonMatchingRules (
1041
+ array $ propertyNamesToSet ,
1042
+ string $ searchPattern ,
1043
+ array $ matchingPropertyNames
1044
+ ): void {
1045
+ $ this ->setRulesFromPropertyNames ($ propertyNamesToSet );
1046
+
1047
+ $ result = $ this ->subject ->getRules ($ searchPattern );
1048
+
1049
+ if ($ result === []) {
1050
+ self ::expectNotToPerformAssertions ();
1051
+ }
1052
+ foreach ($ result as $ resultRule ) {
1053
+ // 'expected' and 'actual' are transposed here due to necessity
1054
+ self ::assertContains ($ resultRule ->getRule (), $ matchingPropertyNames );
1055
+ }
1056
+ }
1057
+
1058
+ /**
1059
+ * @test
1060
+ */
1061
+ public function getRulesWithPatternOrdersRulesByPosition (): void
1062
+ {
1063
+ $ first = (new Rule ('color ' ))->setPosition (1 , 42 );
1064
+ $ second = (new Rule ('color ' ))->setPosition (1 , 64 );
1065
+ $ third = (new Rule ('color ' ))->setPosition (55 , 7 );
1066
+ $ this ->subject ->setRules ([$ third , $ second , $ first ]);
1067
+
1068
+ $ result = $ this ->subject ->getRules ('color ' );
1069
+
1070
+ self ::assertSame ([$ first , $ second , $ third ], $ result );
1071
+ }
1072
+
916
1073
/**
917
1074
* @param list<string> $propertyNames
918
1075
*/
0 commit comments