@@ -42,3 +42,74 @@ impl FilterableTriggeringRule {
42
42
}
43
43
}
44
44
}
45
+
46
+ #[ cfg( test) ]
47
+ mod test {
48
+ use crate :: diagnostic_filter:: { FilterableTriggeringRule , Severity } ;
49
+ use crate :: front:: wgsl:: assert_parse_err;
50
+
51
+ use itertools:: Itertools as _;
52
+ use strum:: IntoEnumIterator as _;
53
+
54
+ #[ test]
55
+ fn basic ( ) { }
56
+
57
+ #[ test]
58
+ fn malformed ( ) {
59
+ assert_parse_err ( "directive;" , snapshot) ;
60
+ assert_parse_err ( "directive(off, asdf;" , snapshot) ;
61
+ assert_parse_err ( "directive();" , snapshot) ;
62
+ }
63
+
64
+ #[ test]
65
+ fn severities ( ) { }
66
+
67
+ #[ test]
68
+ fn invalid_severity ( ) { }
69
+
70
+ #[ test]
71
+ fn triggering_rules ( ) { }
72
+
73
+ #[ test]
74
+ fn invalid_triggering_rule ( ) {
75
+ #[ derive( Debug , Clone ) ]
76
+ enum Rule {
77
+ Valid ( FilterableTriggeringRule ) ,
78
+ Invalid ,
79
+ }
80
+
81
+ #[ derive( Debug , Clone ) ]
82
+ enum Sev {
83
+ Valid ( Severity ) ,
84
+ Invalid ,
85
+ }
86
+
87
+ let cases = {
88
+ let invalid_sev_cases = FilterableTriggeringRule :: iter ( )
89
+ . map ( Rule :: Valid )
90
+ . cartesian_product ( [ Sev :: Invalid ] ) ;
91
+ let invalid_rule_cases = [ Rule :: Invalid ]
92
+ . into_iter ( )
93
+ . cartesian_product ( Severity :: iter ( ) . map ( Sev :: Valid ) ) ;
94
+ invalid_sev_cases. chain ( invalid_rule_cases)
95
+ } ;
96
+
97
+ for ( rule, severity) in cases {
98
+ let rule = match rule {
99
+ Rule :: Valid ( rule) => rule. to_wgsl_ident ( ) ,
100
+ Rule :: Invalid => "totes_invalid_rule" ,
101
+ } ;
102
+ let severity = match severity {
103
+ Sev :: Valid ( severity) => severity. to_ident ( ) ,
104
+ Sev :: Invalid => "totes_invalid_severity" ,
105
+ } ;
106
+ let shader = format ! ( "diagnostic({severity},{rule});" ) ;
107
+ let expected_msg = format ! (
108
+ "\
109
+ "
110
+ ) ;
111
+
112
+ assert_parse_err ( & shader, & expected_msg) ;
113
+ }
114
+ }
115
+ }
0 commit comments