Skip to content

Commit

Permalink
Added tests for module-level protection.
Browse files Browse the repository at this point in the history
  • Loading branch information
Poita committed Jun 22, 2011
1 parent c76a3ea commit 7d91176
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
22 changes: 22 additions & 0 deletions test/compilable/imports/protectionimp.d
@@ -0,0 +1,22 @@
private
{
class privC {}
struct privS {}
interface privI {}
union privU {}
enum privE { foo }
void privF() {}
mixin template privMT() {}

class privTC(T) {}
struct privTS(T) {}
interface privTI(T) {}
union privTU(T) {}
void privTF(T)() {}
}

void publF(T)() {}
void publFA(alias A)() {}
private alias privC privA;

public mixin template publMT() {}
74 changes: 74 additions & 0 deletions test/compilable/protection.d
@@ -0,0 +1,74 @@
import protectionimp;

private
{
class localC {}
struct localS {}
union localU {}
interface localI {}
enum localE { foo }
void localF() {}
mixin template localMT() {}

class localTC(T) {}
struct localTS(T) {}
union localTU(T) {}
interface localTI(T) {}
void localTF(T)() {}
}

void main()
{
// Private non-template declarations
static assert(!__traits(compiles, privF()));
static assert(!__traits(compiles, privC));
static assert(!__traits(compiles, privS));
static assert(!__traits(compiles, privU));
static assert(!__traits(compiles, privI));
static assert(!__traits(compiles, privE));
static assert(!__traits(compiles, privMT));

// Private local non-template declarations.
static assert(__traits(compiles, localF()));
static assert(__traits(compiles, localC));
static assert(__traits(compiles, localS));
static assert(__traits(compiles, localU));
static assert(__traits(compiles, localI));
static assert(__traits(compiles, localE));
static assert(__traits(compiles, localMT));

// Private template declarations.
static assert(!__traits(compiles, privTC!int));
static assert(!__traits(compiles, privTS!int));
static assert(!__traits(compiles, privTU!int));
static assert(!__traits(compiles, privTI!int));
static assert(!__traits(compiles, privTF!int()));

// Private local template declarations.
static assert(__traits(compiles, localTC!int));
static assert(__traits(compiles, localTS!int));
static assert(__traits(compiles, localTU!int));
static assert(__traits(compiles, localTI!int));
static assert(__traits(compiles, localTF!int()));

// Public template function with private type parameters.
static assert(!__traits(compiles, publF!privC()));
static assert(!__traits(compiles, publF!privS()));
static assert(!__traits(compiles, publF!privU()));
static assert(!__traits(compiles, publF!privI()));
static assert(!__traits(compiles, publF!privE()));

// Public template function with private alias parameters.
static assert(!__traits(compiles, publFA!privC()));
static assert(!__traits(compiles, publFA!privS()));
static assert(!__traits(compiles, publFA!privU()));
static assert(!__traits(compiles, publFA!privI()));
static assert(!__traits(compiles, publFA!privE()));

// Private alias.
static assert(!__traits(compiles, privA));

// Public template mixin.
static assert(__traits(compiles, publMT));
}

0 comments on commit 7d91176

Please sign in to comment.