@@ -40,15 +40,45 @@ impl HasConstants {
40
40
#[ constant]
41
41
#[ cfg( all( ) ) ]
42
42
const CONSTANT_RECOGNIZED_WITH_SIMPLE_PATH_ATTRIBUTE_BELOW_CONST_ATTR : bool = true ;
43
+
44
+ // The three identically-named definitions below should be mutually exclusive thanks to #[cfg].
45
+ #[ constant]
46
+ const CFG_REMOVES_DUPLICATE_CONSTANT_DEF : i64 = 5 ;
47
+
48
+ #[ cfg( any( ) ) ]
49
+ #[ constant]
50
+ const CFG_REMOVES_DUPLICATE_CONSTANT_DEF : i64 = compile_error ! ( "Removed by #[cfg]" ) ;
51
+
52
+ #[ constant]
53
+ #[ cfg( any( ) ) ]
54
+ const CFG_REMOVES_DUPLICATE_CONSTANT_DEF : i64 = compile_error ! ( "Removed by #[cfg]" ) ;
55
+
56
+ // The constant below should end up not being defined at all.
57
+ #[ cfg( any( ) ) ]
58
+ #[ constant]
59
+ const CFG_REMOVES_CONSTANT : bool = compile_error ! ( "Removed by #[cfg]" ) ;
60
+
61
+ #[ constant]
62
+ #[ cfg( any( ) ) ]
63
+ const CFG_REMOVES_CONSTANT : bool = compile_error ! ( "Removed by #[cfg]" ) ;
64
+ }
65
+
66
+ /// Checks at runtime if a class has a given integer constant through [ClassDb].
67
+ fn class_has_integer_constant < T : GodotClass > ( name : & str ) -> bool {
68
+ ClassDb :: singleton ( ) . class_has_integer_constant ( T :: class_name ( ) . to_string_name ( ) , name. into ( ) )
43
69
}
44
70
45
71
#[ itest]
46
72
fn constants_correct_value ( ) {
47
- const CONSTANTS : [ ( & str , i64 ) ; 4 ] = [
73
+ const CONSTANTS : [ ( & str , i64 ) ; 5 ] = [
48
74
( "A" , HasConstants :: A ) ,
49
75
( "B" , HasConstants :: B as i64 ) ,
50
76
( "C" , HasConstants :: C as i64 ) ,
51
77
( "D" , HasConstants :: D as i64 ) ,
78
+ (
79
+ "CFG_REMOVES_DUPLICATE_CONSTANT_DEF" ,
80
+ HasConstants :: CFG_REMOVES_DUPLICATE_CONSTANT_DEF ,
81
+ ) ,
52
82
] ;
53
83
54
84
let constants = ClassDb :: singleton ( )
@@ -72,6 +102,16 @@ fn constants_correct_value() {
72
102
static_assert ! ( HasConstants :: CONSTANT_RECOGNIZED_WITH_SIMPLE_PATH_ATTRIBUTE_BELOW_CONST_ATTR ) ;
73
103
}
74
104
105
+ #[ itest]
106
+ fn cfg_removes_or_keeps_constants ( ) {
107
+ assert ! ( class_has_integer_constant:: <HasConstants >(
108
+ "CFG_REMOVES_DUPLICATE_CONSTANT_DEF"
109
+ ) ) ;
110
+ assert ! ( !class_has_integer_constant:: <HasConstants >(
111
+ "CFG_REMOVES_CONSTANT"
112
+ ) ) ;
113
+ }
114
+
75
115
#[ derive( GodotClass ) ]
76
116
struct HasOtherConstants { }
77
117
0 commit comments