2025-01-22 16:18:30 +01:00

66 lines
1.7 KiB
Haxe

package tests;
// Uses native enum, which does not play nice with Dynamic - must use @:unreflective
@:unreflective
@:enum extern abstract SystemMetric(SystemMetricImpl) {
@:native("wxSYS_MOUSE_BUTTONS") var MOUSE_BUTTONS;
@:native("wxSYS_OS") var OS;
}
@:unreflective
@:native("wxSystemMetric")
extern class SystemMetricImpl { }
// Wraps enum in struct, which does play nice...
@:enum extern abstract SystemMetricStruct(SystemMetricStructImpl) {
@:native("wxSYS_MOUSE_BUTTONS") var MOUSE_BUTTONS;
@:native("wxSYS_OS") var OS;
}
@:native("cpp::Struct<wxSystemMetric, cpp::EnumHandler>")
extern class SystemMetricStructImpl { }
@:headerCode('
enum wxSystemMetric
{
wxSYS_OS = 3,
wxSYS_MOUSE_BUTTONS = 27,
};
')
class TestNativeEnum extends haxe.unit.TestCase
{
var x:SystemMetric = SystemMetric.MOUSE_BUTTONS;
var xStruct:SystemMetricStruct = SystemMetricStruct.MOUSE_BUTTONS;
function isX(val:SystemMetric)
{
return (val==x);
}
function isXStruct(val:SystemMetricStruct)
{
return (val==xStruct);
}
public function test()
{
assertTrue( isX(SystemMetric.MOUSE_BUTTONS)==true );
assertTrue( isX(SystemMetric.OS)==false );
assertTrue( isXStruct(SystemMetricStruct.MOUSE_BUTTONS)==true );
assertTrue( isXStruct(SystemMetricStruct.OS)==false );
var d:Dynamic = this;
assertTrue( d.x==null );
assertTrue( d.xStruct!=null );
assertTrue( d.isX==null );
assertTrue( d.isXStruct!=null );
var func = d.isXStruct;
assertTrue(func!=null);
assertTrue(func(SystemMetricStruct.MOUSE_BUTTONS)==true );
assertTrue(func(SystemMetricStruct.OS)==false );
}
}