diff --git a/src/Hooks.cpp b/src/Hooks.cpp index 8947bb74c..08fd5eeac 100644 --- a/src/Hooks.cpp +++ b/src/Hooks.cpp @@ -402,6 +402,9 @@ bool Hooks::isJSON (const std::string& input) const input[input.length () - 1] != '}') return false; +/* + I think this is not necessary, and a simple JSON test is all that is needed. + try { json::value* root = json::parse (input); @@ -419,6 +422,7 @@ bool Hooks::isJSON (const std::string& input) const { return false; } +*/ return true; } @@ -481,11 +485,11 @@ void Hooks::assertValidJSON (const std::vector & input) const } //////////////////////////////////////////////////////////////////////////////// -void Hooks::assertNTasks (const std::vector & json, int n) const +void Hooks::assertNTasks (const std::vector & input, int n) const { - if (json.size () != n) + if (input.size () != n) { - context.error (format ("Hook Error: Expected {1} JSON task(s), found {2}", n, (int) json.size ())); + context.error (format ("Hook Error: Expected {1} JSON task(s), found {2}", n, (int) input.size ())); throw 0; } } diff --git a/test/hooks.on-launch.t b/test/hooks.on-launch.t index 56c0d970a..9a2955286 100755 --- a/test/hooks.on-launch.t +++ b/test/hooks.on-launch.t @@ -83,6 +83,20 @@ class TestHooksOnLaunch(TestCase): logs = self.t.hooks[hookname].get_logs() self.assertEqual(self.t.hooks[hookname].get_logs()["output"]["msgs"][0], "FEEDBACK") + def test_onlaunch_builtin_misbehave2(self): + """on-launch-misbehave2 - Hook emits unexpected JSON.""" + hookname = 'on-launch-misbehave2' + self.t.hooks.add_default(hookname, log=True) + + # Failing hook should prevent processing. + code, out, err = self.t.runError(("version",)) + self.assertIn("Hook Error: Expected 0 JSON task(s), found 1", err) + self.t.hooks[hookname].assertTriggered() + self.t.hooks[hookname].assertTriggeredCount(1) + self.t.hooks[hookname].assertExitcode(0) + logs = self.t.hooks[hookname].get_logs() + self.assertEqual(self.t.hooks[hookname].get_logs()["output"]["msgs"][0], "FEEDBACK") + if __name__ == "__main__": from simpletap import TAPTestRunner unittest.main(testRunner=TAPTestRunner()) diff --git a/test/test_hooks/on-launch-misbehave2 b/test/test_hooks/on-launch-misbehave2 new file mode 100644 index 000000000..f981f8d68 --- /dev/null +++ b/test/test_hooks/on-launch-misbehave2 @@ -0,0 +1,18 @@ +#!/bin/sh + +# The on-launch event is triggered once, after initialization, before any +# processing occurs. This hooks script has no effect on processing. + +# Input: +# - None + +# Output: +# - Optional feedback/error. +echo '{"description":"extra","status":"pending"}' +echo 'FEEDBACK' + +# Status: +# - 0: JSON ignored, non-JSON is feedback. +# - non-0: JSON ignored, non-JSON is error. +exit 0 +