1 module dmocks.factory;
2 
3 import dmocks.object_mock;
4 import dmocks.repository; 
5 import dmocks.util;
6 import dmocks.repository;
7 import std.stdio;
8 import std.typecons;
9 
10 package:
11 
12 /** Get a mock object of the given type. */
13 T mock (T, CONSTRUCTOR_ARGS...) (MockRepository rep, CONSTRUCTOR_ARGS cargs) 
14 {
15     Mocked!(T) ret = new Mocked!(T)(cargs);
16     ret._owner = rep;
17     return cast(T)ret;
18 }
19 
20 MockedFinal!(T) mockFinal (T, CONSTRUCTOR_ARGS...) (MockRepository rep, CONSTRUCTOR_ARGS t) 
21 {
22     static if (__traits(isFinalClass, T))
23         T obj = new T(t);
24     else
25         T obj = new WhiteHole!T(t);
26     MockedFinal!(T) ret = new MockedFinal!(T)(obj);
27     ret._owner = rep;
28     return ret;
29 }
30 
31 MockedFinal!(T) mockFinalPassTo (T, CONSTRUCTOR_ARGS...) (MockRepository rep, T obj) 
32 {
33     MockedFinal!(T) ret = new MockedFinal!(T)(obj);
34     ret._owner = rep;
35     return ret;
36 }
37 
38 MockedStruct!(T) mockStruct (T, CONSTRUCTOR_ARGS...) (MockRepository rep, CONSTRUCTOR_ARGS t) 
39 {
40     MockedStruct!(T) ret = MockedStruct!(T)(T(t));
41     ret._owner = rep;
42     return ret;
43 }
44 
45 MockedStruct!(T) mockStructPassTo (T, CONSTRUCTOR_ARGS...) (MockRepository rep, T obj) 
46 {
47     MockedStruct!(T) ret = MockedStruct!(T)(obj);
48     ret._owner = rep;
49     return ret;
50 }