Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[4.3.5] Backport Json RPC diagnostics #11707

Merged
merged 17 commits into from
Jul 18, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[tests] use json rpc diagnostics
kLabz committed Jul 3, 2024
commit 7d9cad381d55e159a3b3c9a796dd4c52bf25bda3
31 changes: 19 additions & 12 deletions tests/server/src/TestCase.hx
Original file line number Diff line number Diff line change
@@ -62,22 +62,26 @@ class TestCase implements ITest {
server.stop();
}

function handleResult(result) {
lastResult = result;
debugLastResult = {
hasError: lastResult.hasError,
prints: lastResult.prints,
stderr: lastResult.stderr,
stdout: lastResult.stdout
}
sendLogMessage(result.stdout);
for (print in result.prints) {
var line = print.trim();
messages.push('Haxe print: $line');
}
}

function runHaxe(args:Array<String>, done:() -> Void) {
messages = [];
errorMessages = [];
server.rawRequest(args, null, function(result) {
lastResult = result;
debugLastResult = {
hasError: lastResult.hasError,
prints: lastResult.prints,
stderr: lastResult.stderr,
stdout: lastResult.stdout
}
sendLogMessage(result.stdout);
for (print in result.prints) {
var line = print.trim();
messages.push('Haxe print: $line');
}
handleResult(result);
if (result.hasError) {
sendErrorMessage(result.stderr);
}
@@ -95,7 +99,10 @@ class TestCase implements ITest {
callback:TResponse->Void, done:() -> Void) {
var methodArgs = {method: method, id: 1, params: methodArgs};
args = args.concat(['--display', Json.stringify(methodArgs)]);
messages = [];
errorMessages = [];
server.rawRequest(args, null, function(result) {
handleResult(result);
callback(Json.parse(result.stderr).result.result);
done();
}, function(msg) {
65 changes: 60 additions & 5 deletions tests/server/src/cases/ServerTests.hx
Original file line number Diff line number Diff line change
@@ -97,7 +97,9 @@ class ServerTests extends TestCase {
var args = ["-main", "BrokenSyntax.hx", "--interp", "--no-output"];
runHaxe(args);
assertErrorMessage("Expected }");
runHaxe(args.concat(["--display", "Empty.hx@0@diagnostics"]));
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Empty.hx")}, res -> {
Assert.equals(0, res.length);
});
runHaxe(args);
assertErrorMessage("Expected }");
}
@@ -143,6 +145,53 @@ class ServerTests extends TestCase {
assertSuccess();
}

function testDiagnosticsFileContents() {
vfs.putContent("Main.hx", getTemplate("issues/Issue9134/Main.hx"));
vfs.putContent("Other.hx", getTemplate("issues/Issue9134/Other.hx"));
var args = ["-main", "Main", "Other"];

runHaxeJsonCb(args, DisplayMethods.Diagnostics, {fileContents: [
{file: new FsPath("Other.hx")},
{file: new FsPath("Main.hx")},
]}, res -> {
Assert.equals(1, res.length);
Assert.equals(1, res[0].diagnostics.length);
var arg = res[0].diagnostics[0].args;
Assert.equals("Unused variable", (cast arg).description);
Assert.stringContains("Main.hx", res[0].file.toString());
});

runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Other.hx")});

runHaxeJsonCb(args, DisplayMethods.Diagnostics, {fileContents: [
{file: new FsPath("Main.hx"), contents: getTemplate("issues/Issue9134/Main2.hx")},
{file: new FsPath("Other.hx"), contents: getTemplate("issues/Issue9134/Other2.hx")}
]}, res -> {
Assert.equals(1, res.length);
Assert.equals(1, res[0].diagnostics.length);
var arg = res[0].diagnostics[0].args;
Assert.equals("Unused variable", (cast arg).description);
Assert.stringContains("Other.hx", res[0].file.toString());
});

runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Other.hx")});

runHaxeJsonCb(args, DisplayMethods.Diagnostics, {fileContents: [
{file: new FsPath("Main.hx"), contents: getTemplate("issues/Issue9134/Main.hx")},
{file: new FsPath("Other.hx"), contents: getTemplate("issues/Issue9134/Other2.hx")}
]}, res -> {
Assert.equals(2, res.length);

for (i in 0...2) {
Assert.equals(1, res[i].diagnostics.length);
var arg = res[i].diagnostics[0].args;
Assert.equals("Unused variable", (cast arg).description);
}
});
}

function testDiagnosticsRecache() {
vfs.putContent("HelloWorld.hx", getTemplate("HelloWorld.hx"));
var args = ["--main", "HelloWorld", "--interp"];
@@ -152,15 +201,19 @@ class ServerTests extends TestCase {
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("HelloWorld.hx")});
runHaxe(args);
assertSkipping("HelloWorld", Tainted("server/invalidate"));
runHaxe(args.concat(["--display", "HelloWorld.hx@0@diagnostics"]));
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("HelloWorld.hx")}, res -> {
Assert.equals(0, res.length);
});
runHaxe(args);
assertReuse("HelloWorld");
}

function testDiagnosticsRecache2() {
vfs.putContent("HelloWorld.hx", getTemplate("HelloWorld.hx"));
var args = ["--main", "HelloWorld", "--interp"];
runHaxe(args.concat(["--display", "HelloWorld.hx@0@diagnostics"]));
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("HelloWorld.hx")}, res -> {
Assert.equals(0, res.length);
});
runHaxe(args);
assertReuse("HelloWorld");
}
@@ -172,7 +225,9 @@ class ServerTests extends TestCase {
runHaxe(args);
assertReuse("HelloWorld");
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("HelloWorld.hx")});
runHaxe(args.concat(["--display", "HelloWorld.hx@0@diagnostics"]));
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("HelloWorld.hx")}, res -> {
Assert.equals(0, res.length);
});
runHaxe(args.concat(["--display", "HelloWorld.hx@0@hover"]));
assertReuse("HelloWorld");
}
@@ -397,7 +452,7 @@ class ServerTests extends TestCase {
var runs = 0;

function runLoop() {
runHaxe(args.concat(["--display", "Empty.hx@0@diagnostics"]), () -> {
runHaxeJson(args, DisplayMethods.Diagnostics, {file: new FsPath("Empty.hx")}, () -> {
runHaxe(args.concat(["-D", "compile-only-define"]), () -> {
if (assertSuccess() && ++runs < 20) runLoop();
else async.done();
22 changes: 14 additions & 8 deletions tests/server/src/cases/display/issues/Issue10635.hx
Original file line number Diff line number Diff line change
@@ -14,12 +14,15 @@ class Issue10635 extends DisplayTestCase {
}
**/
function test(_) {
var args = ["-main", "Main", "--display", "Main.hx@0@diagnostics"];
var args = ["-main", "Main"];
vfs.putContent("Something.hx", getTemplate("issues/Issue10635/Something.hx"));
runHaxe(args);
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
Assert.equals(0, res.length);
});
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
runHaxe(args);
Assert.isTrue(lastResult.stderr.length == 2); // dumb, but we don't have a proper diagnostics structure in these tests
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
Assert.equals(0, res.length);
});
}

/**
@@ -32,12 +35,15 @@ class Issue10635 extends DisplayTestCase {
}
**/
function testGenericClassPerMethod(_) {
var args = ["-main", "Main", "--display", "Main.hx@0@diagnostics"];
var args = ["-main", "Main"];
vfs.putContent("Something.hx", "@:genericClassPerMethod " + getTemplate("issues/Issue10635/Something.hx"));
runHaxe(args);
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
Assert.equals(0, res.length);
});
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
runHaxe(args);
Assert.isTrue(lastResult.stderr.length == 2); // dumb, but we don't have a proper diagnostics structure in these tests
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
Assert.equals(0, res.length);
});
}

function testGenericAddition(_) {
9 changes: 6 additions & 3 deletions tests/server/src/cases/issues/Issue10653.hx
Original file line number Diff line number Diff line change
@@ -8,9 +8,12 @@ class Issue10653 extends TestCase {
runHaxe(args);
vfs.putContent("Main.hx", getTemplate("issues/Issue10653/MainAfter.hx"));
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
runHaxe(args.concat(["--display", "Main.hx@0@diagnostics"]));
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
Assert.equals(0, res.length);
});
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
runHaxe(args.concat(["--display", "Main.hx@0@diagnostics"]));
Assert.isTrue(lastResult.stderr.length == 2);
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
Assert.equals(0, res.length);
});
}
}
23 changes: 6 additions & 17 deletions tests/server/src/cases/issues/Issue11177.hx
Original file line number Diff line number Diff line change
@@ -7,25 +7,14 @@ class Issue11177 extends TestCase {
// vfs.putContent("Buttons.hx", getTemplate("issues/Issue11177/Buttons.hx"));
// vfs.putContent("KeyCode.hx", getTemplate("issues/Issue11177/KeyCode.hx"));
// var args = ["-main", "Main", "--interp"];
// runHaxe(args.concat(["--display", "Buttons.hx@0@diagnostics"]));
// runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Buttons.hx")}, res -> {
// Assert.equals(0, res.length);
// });
// vfs.putContent("Main.hx", getTemplate("issues/Issue11177/Main2.hx"));
// runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
// runHaxe(args);
// runHaxe(args.concat(["--display", "Buttons.hx@0@diagnostics"]));
// Assert.isTrue(lastResult.stderr.length == 2);
// runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Buttons.hx")}, res -> {
// Assert.equals(0, res.length);
// });
// }

function testWithoutCacheFromDisplay(_) {
vfs.putContent("Main.hx", getTemplate("issues/Issue11177/Main.hx"));
vfs.putContent("Buttons.hx", getTemplate("issues/Issue11177/Buttons.hx"));
vfs.putContent("KeyCode.hx", getTemplate("issues/Issue11177/KeyCode.hx"));
var args = ["-main", "Main", "--interp"];
runHaxeJson([], ServerMethods.Configure, {populateCacheFromDisplay: false});
runHaxe(args.concat(["--display", "Buttons.hx@0@diagnostics"]));
vfs.putContent("Main.hx", getTemplate("issues/Issue11177/Main2.hx"));
runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Main.hx")});
runHaxe(args);
runHaxe(args.concat(["--display", "Buttons.hx@0@diagnostics"]));
Assert.isTrue(lastResult.stderr.length == 2);
}
}
17 changes: 5 additions & 12 deletions tests/server/src/cases/issues/Issue11184.hx
Original file line number Diff line number Diff line change
@@ -5,21 +5,14 @@ class Issue11184 extends TestCase {
// function test(_) {
// vfs.putContent("Main.hx", getTemplate("issues/Issue11184/Main.hx"));
// var args = ["-main", "Main", "-js", "bin/test.js"];
// runHaxe(args.concat(["--display", "Main.hx@0@diagnostics"]));
// runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
// Assert.equals(1, res.length);
// Assert.equals(1, res[0].diagnostics.length);
// Assert.equals(res[0].diagnostics[0].args, "Cannot use Void as value");
// });
// runHaxe(args);
// Assert.isTrue(hasErrorMessage("Cannot use Void as value"));
// runHaxe(args);
// Assert.isTrue(hasErrorMessage("Cannot use Void as value"));
// }

function testWithoutCacheFromDisplay(_) {
vfs.putContent("Main.hx", getTemplate("issues/Issue11184/Main.hx"));
var args = ["-main", "Main", "-js", "bin/test.js"];
runHaxeJson([], ServerMethods.Configure, {populateCacheFromDisplay: false});
runHaxe(args.concat(["--display", "Main.hx@0@diagnostics"]));
runHaxe(args);
Assert.isTrue(hasErrorMessage("Cannot use Void as value"));
runHaxe(args);
Assert.isTrue(hasErrorMessage("Cannot use Void as value"));
}
}
9 changes: 5 additions & 4 deletions tests/server/src/cases/issues/Issue8687.hx
Original file line number Diff line number Diff line change
@@ -4,9 +4,10 @@ class Issue8687 extends TestCase {
function test(_) {
vfs.putContent("Main.hx", getTemplate("issues/Issue8687/Main.hx"));
var args = ["-main", "Main", "--interp"];
runHaxe(args.concat(["--display", "Main.hx@0@diagnostics"]));

var diag = parseDiagnostics();
Assert.equals("Invalid version string \"foo\". Should follow SemVer.", diag[0].args);
runHaxeJsonCb(args, DisplayMethods.Diagnostics, {file: new FsPath("Main.hx")}, res -> {
Assert.equals(1, res.length);
Assert.equals(1, res[0].diagnostics.length);
Assert.equals(res[0].diagnostics[0].args, "Invalid version string \"foo\". Should follow SemVer.");
});
}
}
5 changes: 5 additions & 0 deletions tests/server/test/templates/issues/Issue9134/Main.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class Main {
static function main() {
var unused = null;
}
}
6 changes: 6 additions & 0 deletions tests/server/test/templates/issues/Issue9134/Main2.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class Main {
static function main() {
var unused = null;
if (unused != null) trace("wat");
}
}
2 changes: 2 additions & 0 deletions tests/server/test/templates/issues/Issue9134/Other.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class Other {
}
6 changes: 6 additions & 0 deletions tests/server/test/templates/issues/Issue9134/Other2.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class Other {
static function foo() {
// var foo = trace("wat");
var unused = null;
}
}