It should describe the template name and parameters
1 template foo(T) { 2 alias foo = string; 3 } 4 5 auto result = describeTemplate!foo; 6 7 result.name.should.equal("foo"); 8 result.parameters.length.should.equal(0); 9 10 result.templateParameters.length.should.equal(1); 11 result.templateParameters[0].name.should.equal("T"); 12 result.templateParameters[0].original.should.equal("T"); 13 result.templateParameters[0].type.should.equal(""); 14 result.templateParameters[0].defaultValue.should.equal(""); 15 result.templateParameters[0].isVariadic.should.equal(false); 16 17 result.protection.should.equal(Protection.public_); 18 19 result.location.file.should.equal("source/introspection/template_.d"); 20 result.location.line.should.be.greaterThan(0); 21 result.location.column.should.equal(3);
It should describe a templated function
1 void foo(T)(T param) { } 2 3 auto result = describeTemplate!foo; 4 5 result.name.should.equal("foo"); 6 result.templateParameters.length.should.equal(1); 7 8 result.templateParameters[0].name.should.equal("T"); 9 result.templateParameters[0].original.should.equal("T"); 10 result.templateParameters[0].type.should.equal(""); 11 result.templateParameters[0].defaultValue.should.equal(""); 12 result.templateParameters[0].isVariadic.should.equal(false); 13 14 result.parameters.length.should.equal(1); 15 result.parameters[0].name.should.equal("param"); 16 result.parameters[0].original.should.equal("T param"); 17 result.parameters[0].type.should.equal("T"); 18 result.parameters[0].defaultValue.should.equal(""); 19 result.parameters[0].isVariadic.should.equal(false);
It should describe a templated function with default values
1 void foo(T = int)(T param) { } 2 3 auto result = describeTemplate!foo; 4 5 result.name.should.equal("foo"); 6 result.templateParameters.length.should.equal(1); 7 8 result.templateParameters[0].name.should.equal("T"); 9 result.templateParameters[0].defaultValue.should.equal("int"); 10 result.templateParameters[0].original.should.equal("T = int"); 11 result.templateParameters[0].type.should.equal(""); 12 result.templateParameters[0].isVariadic.should.equal(false); 13 14 result.parameters.length.should.equal(1); 15 result.parameters[0].name.should.equal("param"); 16 result.parameters[0].original.should.equal("T param"); 17 result.parameters[0].type.should.equal("T"); 18 result.parameters[0].defaultValue.should.equal(""); 19 result.parameters[0].isVariadic.should.equal(false);
It should describe a templated function with a numeric parameter and variadic parameters
1 void foo(int a = 3, T...)(int b) if(T.length > 1) { } 2 3 auto result = describeTemplate!foo; 4 5 result.name.should.equal("foo"); 6 result.templateParameters.length.should.equal(2); 7 8 result.templateParameters[0].name.should.equal("a"); 9 result.templateParameters[0].defaultValue.should.equal("3"); 10 result.templateParameters[0].original.should.equal("int a = 3"); 11 result.templateParameters[0].type.should.equal("int"); 12 result.templateParameters[0].isVariadic.should.equal(false); 13 14 result.templateParameters[1].name.should.equal("T"); 15 result.templateParameters[1].defaultValue.should.equal(""); 16 result.templateParameters[1].original.should.equal("T..."); 17 result.templateParameters[1].type.should.equal(""); 18 result.templateParameters[1].isVariadic.should.equal(true); 19 20 result.parameters.length.should.equal(1); 21 result.parameters[0].name.should.equal("b"); 22 result.parameters[0].original.should.equal("int b"); 23 result.parameters[0].type.should.equal("int"); 24 result.parameters[0].defaultValue.should.equal(""); 25 result.parameters[0].isVariadic.should.equal(false);
It should describe a templated class with a numeric parameter and variadic parameters
1 class Foo(int a = 3, T...) { 2 void bar() {} 3 } 4 5 auto result = describeTemplate!Foo; 6 7 result.name.should.equal("Foo"); 8 result.templateParameters.length.should.equal(2); 9 10 result.templateParameters[0].name.should.equal("a"); 11 result.templateParameters[0].defaultValue.should.equal("3"); 12 result.templateParameters[0].original.should.equal("int a = 3"); 13 result.templateParameters[0].type.should.equal("int"); 14 result.templateParameters[0].isVariadic.should.equal(false); 15 16 result.templateParameters[1].name.should.equal("T"); 17 result.templateParameters[1].defaultValue.should.equal(""); 18 result.templateParameters[1].original.should.equal("T..."); 19 result.templateParameters[1].type.should.equal(""); 20 result.templateParameters[1].isVariadic.should.equal(true);
Describes a template