1 /** 2 Contains functions that are used while running unittests. 3 */ 4 module declui.testing; 5 6 import declui.backend; 7 import declui.components; 8 9 import std.format; 10 import std.traits; 11 import std.typecons; 12 13 /** 14 A backend that automatically stubs out every instantiation method. 15 */ 16 class TestingBackend : ToolkitBackend, ToolkitWidgets 17 { 18 override void run(string[] args, IWindow window) 19 { 20 assert(0, "Run is not supported during testing"); 21 } 22 23 override ToolkitWidgets getWidgets() 24 { 25 return this; 26 } 27 28 static foreach (member; __traits(derivedMembers, ToolkitWidgets)) 29 { 30 static if (member != "run") 31 { 32 mixin(format!` 33 %s %s() 34 { 35 return createMockInstance!(%s); 36 } 37 `( 38 fullyQualifiedName!(ReturnType!(__traits(getMember, ToolkitWidgets, member))), 39 member, 40 fullyQualifiedName!(ReturnType!(__traits(getMember, ToolkitWidgets, member)))) 41 ); 42 } 43 } 44 } 45 46 private abstract class AutoMock(Type) : Type 47 { 48 override IComponent getInternal() pure 49 { 50 return this; 51 } 52 } 53 54 private Type createMockInstance(Type)() 55 { 56 return new BlackHole!(Type); 57 }