Skip to content

Commit

Permalink
Fix existing tests to fit improved import mechanism
Browse files Browse the repository at this point in the history
  • Loading branch information
9rnsr committed Mar 14, 2014
1 parent 5b7e797 commit fc6a66f
Show file tree
Hide file tree
Showing 21 changed files with 199 additions and 63 deletions.
3 changes: 0 additions & 3 deletions test/compilable/ice10598.d

This file was deleted.

1 change: 1 addition & 0 deletions test/compilable/imports/imp3a.d
@@ -0,0 +1 @@
module imports.test7491a;
1 change: 1 addition & 0 deletions test/compilable/imports/imp3b.d
@@ -0,0 +1 @@
module imports.test7491b;
19 changes: 19 additions & 0 deletions test/compilable/imports/test7491a.d
@@ -1 +1,20 @@
module imports.test7491a;

class B1
{
private:
import imports.test7491c; // std.algorithm;
import algorithm = imports.test7491c;
}
class B2
{
protected:
import imports.test7491c; // std.algorithm;
import algorithm = imports.test7491c;
}
class B3
{
public:
import imports.test7491c; // std.algorithm;
import algorithm = imports.test7491c;
}
2 changes: 2 additions & 0 deletions test/compilable/imports/test7491b.d
@@ -1 +1,3 @@
module imports.test7491b;

void writeln();
3 changes: 3 additions & 0 deletions test/compilable/imports/test7491c.d
@@ -0,0 +1,3 @@
module imports.test7491c;

void map(alias pred, R)(R) {}
11 changes: 6 additions & 5 deletions test/compilable/test70.d
@@ -1,10 +1,11 @@
import imports.test70 : foo;
// PERMUTE_ARGS:

void foo(int) // overloads with selective import
{
}
import imports.test70 : foo;
void foo(int) {}
// selective import does not create local alias implicitly

void bar()
{
foo();
static assert(!__traits(compiles, foo()));
foo(1);
}
2 changes: 2 additions & 0 deletions test/compilable/test71.d
@@ -1,3 +1,5 @@
// PERMUTE_ARGS:

import imports.test71;

void bar()
Expand Down
79 changes: 37 additions & 42 deletions test/compilable/test7491.d
@@ -1,53 +1,48 @@
struct Struct
{
import object;
import imports.test7491a;
import renamed=imports.test7491b;
}
// PERMUTE_ARGS:

struct AliasThis
{
Struct _struct;
alias _struct this;
}
module test7491;
import imports.test7491a;
import imports.test7491b; // std.stdio;
import io = imports.test7491b;

class Base
class C1 : B1
{
import object;
import imports.test7491a;
import renamed=imports.test7491b;
}
void foo()
{
writeln();
imports.test7491b.writeln();
io.writeln();

class Derived : Base
{
static assert(!__traits(compiles, map!(a=>a)([1,2,3])));
static assert(!__traits(compiles, imports.test7491c.map!(a=>a)([1,2,3])));
static assert(!__traits(compiles, algorithm.map!(a=>a)([1,2,3])));
}
}

interface Interface
class C2 : B2
{
import object;
import imports.test7491a;
import renamed=imports.test7491b;
void foo()
{
writeln();
imports.test7491b.writeln();
io.writeln();

map!(a=>a)([1,2,3]);
imports.test7491c.map!(a=>a)([1,2,3]);
algorithm.map!(a=>a)([1,2,3]);
}
}

class Impl : Interface
class C3 : B3
{
}
void foo()
{
writeln();
imports.test7491b.writeln();
io.writeln();

static assert(__traits(compiles, Struct.object));
static assert(__traits(compiles, Struct.imports));
static assert(__traits(compiles, Struct.renamed));
static assert(__traits(compiles, AliasThis.object));
static assert(__traits(compiles, AliasThis.imports));
static assert(__traits(compiles, AliasThis.renamed));
static assert(__traits(compiles, Base.object));
static assert(__traits(compiles, Base.imports));
static assert(__traits(compiles, Base.renamed));
static assert(__traits(compiles, Derived.object));
static assert(__traits(compiles, Derived.imports));
static assert(__traits(compiles, Derived.renamed));
static assert(__traits(compiles, Interface.object));
static assert(__traits(compiles, Interface.imports));
static assert(__traits(compiles, Interface.renamed));
static assert(__traits(compiles, Impl.object));
static assert(__traits(compiles, Impl.imports));
static assert(__traits(compiles, Impl.renamed));
map!(a=>a)([1,2,3]);
imports.test7491c.map!(a=>a)([1,2,3]);
algorithm.map!(a=>a)([1,2,3]);
}
}
7 changes: 3 additions & 4 deletions test/compilable/testDIP37.d
Expand Up @@ -13,24 +13,23 @@ void test3()
{
import pkgDIP37.datetime.common;
def();
pkgDIP37.datetime.def();
static assert(!__traits(compiles, pkgDIP37.datetime.def()));
pkgDIP37.datetime.common.def();
}

void test4()
{
import pkgDIP37.datetime : def;
def();
static assert(!__traits(compiles, pkgDIP37.datetime.def()));
pkgDIP37.datetime.def();
static assert(!__traits(compiles, pkgDIP37.datetime.common.def()));
}


void test7()
{
static import pkgDIP37.datetime;
static assert(!__traits(compiles, def()));
pkgDIP37.datetime.def();
pkgDIP37.datetime.common.def();
static assert(!__traits(compiles, pkgDIP37.datetime.common.def()));
}

62 changes: 62 additions & 0 deletions test/compilable/testimport3.d
Expand Up @@ -3,7 +3,9 @@
// EXTRA_SOURCE: extra-files/pkg_import3a/package.d
// EXTRA_SOURCE: extra-files/pkg_import3a/mod.d

/******************************************/
// Test1

class Test1A
{
import pkg_import3a; // foo()==1, bar()==2
Expand Down Expand Up @@ -62,7 +64,9 @@ class Test1C
}
}

/******************************************/
// Test2 symbol name in pkg_import3b/package.d conflicts with sibling module name which under the pkg_import3b.

class Test2A
{
import pkg_import3b; // foo()==1, bar()==2, int mod;
Expand Down Expand Up @@ -121,3 +125,61 @@ class Test2C
}
}
}

/******************************************/
// from compilable/test7491.d

struct Struct3
{
import object;
import imports.imp3a;
import renamed = imports.imp3b;
}

struct AliasThis3
{
Struct3 _struct;
alias _struct this;
}

class Base3
{
import object;
import imports.imp3a;
import renamed = imports.imp3b;
}

class Derived3 : Base3
{
}

interface Interface3
{
import object;
import imports.imp3a;
import renamed = imports.imp3b;
}

class Impl3 : Interface3
{
}

// The package/module names 'object', 'imports', and 'renamed' should not be accessible through type names
static assert(!__traits(compiles, Struct3.object));
static assert(!__traits(compiles, Struct3.imports));
static assert(!__traits(compiles, Struct3.renamed));
static assert(!__traits(compiles, AliasThis3.object));
static assert(!__traits(compiles, AliasThis3.imports));
static assert(!__traits(compiles, AliasThis3.renamed));
static assert(!__traits(compiles, Base3.object));
static assert(!__traits(compiles, Base3.imports));
static assert(!__traits(compiles, Base3.renamed));
static assert(!__traits(compiles, Derived3.object));
static assert(!__traits(compiles, Derived3.imports));
static assert(!__traits(compiles, Derived3.renamed));
static assert(!__traits(compiles, Interface3.object));
static assert(!__traits(compiles, Interface3.imports));
static assert(!__traits(compiles, Interface3.renamed));
static assert(!__traits(compiles, Impl3.object));
static assert(!__traits(compiles, Impl3.imports));
static assert(!__traits(compiles, Impl3.renamed));
15 changes: 14 additions & 1 deletion test/fail_compilation/fail356a.d
@@ -1,2 +1,15 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail356a.d(13): Error: no property 'fail356' for type 'int'
---
*/

import imports.fail356;
int imports; // collides with package name
int imports; // doesn't collide with package name

void main()
{
auto x = imports.fail356.bar;
// declared 'imports' hides module fully qualified name 'imports.fail356'
}
15 changes: 14 additions & 1 deletion test/fail_compilation/fail356b.d
@@ -1,2 +1,15 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail356b.d(13): Error: no property 'max' for type 'string'
---
*/

import imports.fail356 : bar;
int bar; // collides with selective import
string bar; // doesn't collide with selective import

void main()
{
auto x = bar.max;
// string 'bar' hides imported int 'bar'
}
15 changes: 14 additions & 1 deletion test/fail_compilation/fail356c.d
@@ -1,2 +1,15 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail356c.d(13): Error: function expected before (), not bar of type int
---
*/

import foo = imports.fail356;
int foo; // collides with renamed import
int foo; // doesn't collide with renamed import

void main()
{
auto x = foo.bar; // --> rewritten to bar(foo) by UFCS
// declared 'foo' hides renamed module name 'foo'
}
14 changes: 14 additions & 0 deletions test/fail_compilation/ice10598.d
@@ -0,0 +1,14 @@
// EXTRA_SOURCES: imports/ice10598a.d imports/ice10598b.d
/*
TEST_OUTPUT:
---
fail_compilation/imports/ice10598a.d(5): Error: undefined identifier 'ice10598b', did you mean 'static import ice10598a'?
fail_compilation/imports/ice10598a.d(5): Error: undefined identifier 'ice10598b', did you mean 'static import ice10598a'?
fail_compilation/imports/ice10598a.d(5): Error: argument has no members
fail_compilation/imports/ice10598a.d(5): Error: false must be an array or pointer type, not bool
fail_compilation/imports/ice10598a.d(5): Error: string expected as second argument of __traits getMember instead of __error
fail_compilation/imports/ice10598a.d(5): Error: alias imports.ice10598a.notImportedType cannot alias an expression false
---
*/

void main() {}
6 changes: 3 additions & 3 deletions test/fail_compilation/ice9865.d
@@ -1,9 +1,9 @@
/*
TEST_OUTPUT:
---
fail_compilation/ice9865.d(9): Error: struct ice9865.Foo no size yet for forward reference
fail_compilation/ice9865.d(8): Error: alias ice9865.Baz cannot resolve
fail_compilation/ice9865.d(9): Error: undefined identifier Baz
fail_compilation/ice9865.d(8): Error: module ice9865b import 'Baz' not found, did you mean 'class Bar'?
---
*/
import imports.ice9865b : Baz;
import imports.ice9865b : Baz;
struct Foo { Baz f; }
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion test/runnable/test24.d
Expand Up @@ -6,5 +6,5 @@ import imports.test24a, imports.test24b;

void main()
{
string hi = std.string.format("%s", 3);
std.stdio.writeln();
}
4 changes: 2 additions & 2 deletions test/runnable/test42.d
Expand Up @@ -1564,12 +1564,12 @@ void test94()

struct X95
{
import std.c.stdio;
import std.c.stdio;
}

void test95()
{
X95.std.c.stdio.printf("hello\n");
static assert(!__traits(compiles, X95.std.c.stdio.printf("hello\n")));
}

/***************************************************/
Expand Down
1 change: 1 addition & 0 deletions test/runnable/variadic.d
@@ -1,5 +1,6 @@

import std.stdio;
import std.string;
import std.typetuple;
import std.traits;

Expand Down

0 comments on commit fc6a66f

Please sign in to comment.