diff --git a/tests/server/src/cases/ServerTests.hx b/tests/server/src/cases/ServerTests.hx index ac16f1c3205..6214f89b4e8 100644 --- a/tests/server/src/cases/ServerTests.hx +++ b/tests/server/src/cases/ServerTests.hx @@ -1,7 +1,9 @@ package cases; +import haxe.display.Diagnostic; import haxe.display.Display; import haxe.display.FsPath; +import haxe.display.Position.Range; import haxe.display.Server; import haxe.io.Path; import utest.Assert; @@ -259,6 +261,48 @@ class ServerTests extends TestCase { assertReuse("HelloWorld"); } + function testDiagnosticsMultipleOpenFiles() { + vfs.putContent("Main.hx", getTemplate("diagnostics/multi-files/Main.hx")); + vfs.putContent("File1.hx", getTemplate("diagnostics/multi-files/File1.hx")); + vfs.putContent("File2.hx", getTemplate("diagnostics/multi-files/File2.hx")); + vfs.putContent("File3.hx", getTemplate("diagnostics/multi-files/File3.hx")); + + var args = ["--main", "Main", "--interp"]; + runHaxeJsonCb(args, DisplayMethods.Diagnostics, {fileContents: [ + {file: new FsPath("Main.hx")}, + {file: new FsPath("File1.hx")}, + {file: new FsPath("File2.hx")}, + ]}, res -> { + Assert.equals(3, res.length); // Asked diagnostics for 3 files + + for (fileDiagnostics in res) { + final path = fileDiagnostics.file.toString().split("/").pop(); + + switch (path) { + case "Main.hx": + Assert.equals(3, fileDiagnostics.diagnostics.length); + for (diag in fileDiagnostics.diagnostics) { + Assert.equals(diag.kind, DKUnusedImport); + } + + case "File1.hx" | "File2.hx": + Assert.equals(1, fileDiagnostics.diagnostics.length); + var diag:Diagnostic<{description:String, range:Range}> = fileDiagnostics.diagnostics[0]; + Assert.equals(diag.kind, DKRemovableCode); + Assert.equals(diag.args.description, "Unused variable"); + + case _: throw 'Did not expect diagnostics for $path'; + } + } + }); + + // Check that File3 was reached + var context = null; + runHaxeJsonCb(args, ServerMethods.Contexts, null, res -> context = res.find(ctx -> ctx.desc == "after_init_macros")); + runHaxeJsonCb(args, ServerMethods.Type, {signature: context.signature, modulePath: "File3", typeName: "File3"}, res -> Assert.equals(res.pos.file, "File3.hx")); + assertSuccess(); + } + function testSyntaxCache() { vfs.putContent("HelloWorld.hx", getTemplate("HelloWorld.hx")); runHaxeJson(["-cp", "."], ServerMethods.ReadClassPaths, null); diff --git a/tests/server/test/templates/diagnostics/multi-files/File1.hx b/tests/server/test/templates/diagnostics/multi-files/File1.hx new file mode 100644 index 00000000000..40f142a8995 --- /dev/null +++ b/tests/server/test/templates/diagnostics/multi-files/File1.hx @@ -0,0 +1,5 @@ +class File1 { + static function test() { + var foo = 42; + } +} diff --git a/tests/server/test/templates/diagnostics/multi-files/File2.hx b/tests/server/test/templates/diagnostics/multi-files/File2.hx new file mode 100644 index 00000000000..dce8f331241 --- /dev/null +++ b/tests/server/test/templates/diagnostics/multi-files/File2.hx @@ -0,0 +1,5 @@ +class File2 { + static function test() { + var foo = 42; + } +} diff --git a/tests/server/test/templates/diagnostics/multi-files/File3.hx b/tests/server/test/templates/diagnostics/multi-files/File3.hx new file mode 100644 index 00000000000..d6836003719 --- /dev/null +++ b/tests/server/test/templates/diagnostics/multi-files/File3.hx @@ -0,0 +1,5 @@ +class File3 { + static function test() { + var foo = 42; + } +} diff --git a/tests/server/test/templates/diagnostics/multi-files/Main.hx b/tests/server/test/templates/diagnostics/multi-files/Main.hx new file mode 100644 index 00000000000..6cf8175e002 --- /dev/null +++ b/tests/server/test/templates/diagnostics/multi-files/Main.hx @@ -0,0 +1,5 @@ +import File1; +import File2; +import File3; + +function main() {}