1 /** 2 From clang.Cursor to dpp.node.Node. 3 The tests can't be pure because clang.Cursor.children isn't. 4 */ 5 module ut.transform.cursor; 6 7 8 import ut.transform; 9 import clang: Cursor, ClangType = Type; 10 import dpp2.transform: toNode; 11 12 13 @("struct.onefield.int") 14 @safe unittest { 15 const tu = mockTU!(Module("contract.aggregates"), 16 CodeURL("it.c.compile.struct_", "onefield.int")); 17 18 const actual = tu.toNode; 19 const expected = [Node( 20 Struct( 21 "Foo", 22 [ 23 Node(Field(Type(Int()), "i")), 24 ], 25 "struct Foo", 26 ) 27 )]; 28 29 () @trusted { actual.should == expected; }(); 30 } 31 32 33 @("struct.nested") 34 @safe unittest { 35 const tu = mockTU!(Module("contract.aggregates"), 36 CodeURL("it.c.compile.struct_", "nested")); 37 38 const actual = tu.toNode; 39 const expected = [Node( 40 Struct( 41 "Outer", 42 [ 43 Node(Field(Type(Int()), "integer")), 44 Node(Struct("Inner", [ Node(Field(Type(Int()), "x")) ], "struct Inner")), 45 Node(Field(Type(UserDefinedType("Inner")), "inner")), 46 ], 47 "struct Outer", 48 ) 49 )]; 50 51 () @trusted { actual.should == expected; }(); 52 } 53 54 55 @("struct.typedef.name") 56 @safe unittest { 57 const tu = mockTU!(Module("contract.aggregates"), 58 CodeURL("it.c.compile.struct_", "typedef.name")); 59 60 const actual = tu.toNode; 61 const expected = [ 62 Node(Struct("TypeDefd_", [], "struct TypeDefd_")), 63 Node(Typedef("TypeDefd", Type(UserDefinedType("TypeDefd_")))), 64 ]; 65 66 () @trusted { actual.should == expected; }(); 67 } 68 69 70 @("struct.typedef.anon") 71 @safe unittest { 72 const tu = mockTU!(Module("contract.aggregates"), 73 CodeURL("it.c.compile.struct_", "typedef.anon")); 74 75 const actual = tu.toNode; 76 const expected = [ 77 Node( 78 Struct( 79 "", 80 [ 81 Node(Field(Type(Int()), "x")), 82 Node(Field(Type(Int()), "y")), 83 Node(Field(Type(Int()), "z")), 84 ], 85 "Nameless1", 86 ), 87 ), 88 Node(Typedef("Nameless1", Type(UserDefinedType("Nameless1")))), 89 Node( 90 Struct( 91 "", 92 [ 93 Node(Field(Type(Double()), "d")), 94 ], 95 "Nameless2", 96 ), 97 ), 98 Node(Typedef("Nameless2", Type(UserDefinedType("Nameless2")))), 99 ]; 100 101 102 () @trusted { actual.should == expected; }(); 103 } 104 105 106 @("struct.typedef.before") 107 @safe unittest { 108 const tu = mockTU!(Module("contract.aggregates"), 109 CodeURL("it.c.compile.struct_", "typedef.before")); 110 const actual = tu.toNode; 111 const expected = [ 112 Node(Typedef("B", Type(UserDefinedType("A")))), 113 Node(Struct("A", [Node(Field(Type(Int()), "a"))], "struct A")), 114 ]; 115 116 () @trusted { actual.should == expected; }(); 117 }