mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
72 lines
1.9 KiB
D
72 lines
1.9 KiB
D
// See ../../../README.md for information about DMD unit tests.
|
|
|
|
/// Test cases for diagnostic messages on Objective-C protocols
|
|
module objc.protocols.diagnostic_messages;
|
|
|
|
version (D_ObjectiveC):
|
|
|
|
import dmd.location;
|
|
|
|
import support : afterEach, beforeEach, compiles, stripDelimited, Diagnostic;
|
|
|
|
@beforeEach initializeFrontend()
|
|
{
|
|
import dmd.frontend : initDMD;
|
|
initDMD();
|
|
}
|
|
|
|
@afterEach deinitializeFrontend()
|
|
{
|
|
import dmd.frontend : deinitializeDMD;
|
|
deinitializeDMD();
|
|
}
|
|
|
|
@("when a static interface method is not implemented")
|
|
@("it should report an error")
|
|
@("the error message should include that the method is a static method")
|
|
@("the error message should _not_ include the name of the metaclass")
|
|
unittest
|
|
{
|
|
enum filename = "test.d";
|
|
|
|
enum code = q{
|
|
extern (Objective-C)
|
|
interface Foo
|
|
{
|
|
static void foo();
|
|
}
|
|
|
|
extern (Objective-C)
|
|
class Bar : Foo { }
|
|
}.stripDelimited;
|
|
|
|
enum message = "Error: class test.Bar interface function extern (Objective-C) static void foo() is not implemented";
|
|
auto expected = Diagnostic(SourceLoc(filename, 8, 1), message);
|
|
|
|
const diagnostics = compiles(code, filename);
|
|
assert(diagnostics == [expected], "\n" ~ diagnostics.toString);
|
|
}
|
|
|
|
@("when a static interface method has a body")
|
|
@("it should report an error")
|
|
unittest
|
|
{
|
|
enum filename = "test.d";
|
|
|
|
enum code = q{
|
|
extern (Objective-C)
|
|
interface Foo
|
|
{
|
|
static void foo() { }
|
|
}
|
|
|
|
extern (Objective-C)
|
|
class Bar : Foo { }
|
|
}.stripDelimited;
|
|
|
|
enum message = "Error: function test.Foo.foo function body only allowed in final functions in interface Foo";
|
|
auto expected = Diagnostic(SourceLoc(filename, 4, 17), message);
|
|
|
|
const diagnostics = compiles(code, filename);
|
|
assert(diagnostics == [expected], "\n" ~ diagnostics.toString);
|
|
}
|