123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
- // Tests that the jsb command works as it should
- const TEST_URI = "http://example.com/browser/devtools/client/commandline/" +
- "test/browser_cmd_jsb_script.jsi";
- function test() {
- return Task.spawn(testTask).then(finish, helpers.handleError);
- }
- function* testTask() {
- let options = yield helpers.openTab("about:blank");
- yield helpers.openToolbar(options);
- let notifyPromise = wwNotifyOnce();
- helpers.audit(options, [
- {
- setup: "jsb",
- check: {
- input: "jsb",
- hints: " <url> [options]",
- markup: "VVV",
- status: "ERROR"
- }
- },
- {
- setup: "jsb " + TEST_URI,
- // Should result in a new scratchpad window
- exec: {
- output: "",
- error: false
- }
- }
- ]);
- let { subject } = yield notifyPromise;
- let scratchpadWin = subject.QueryInterface(Ci.nsIDOMWindow);
- yield helpers.listenOnce(scratchpadWin, "load");
- let scratchpad = scratchpadWin.Scratchpad;
- yield observeOnce(scratchpad);
- let result = scratchpad.getText();
- result = result.replace(/[\r\n]]*/g, "\n");
- let correct = "function somefunc() {\n" +
- " if (true) // Some comment\n" +
- " doSomething();\n" +
- " for (let n = 0; n < 500; n++) {\n" +
- " if (n % 2 == 1) {\n" +
- " console.log(n);\n" +
- " console.log(n + 1);\n" +
- " }\n" +
- " }\n" +
- "}";
- is(result, correct, "JS has been correctly prettified");
- if (scratchpadWin) {
- scratchpadWin.close();
- scratchpadWin = null;
- }
- yield helpers.closeToolbar(options);
- yield helpers.closeTab(options);
- }
- /**
- * A wrapper for calling Services.ww.[un]registerNotification using promises.
- * @return a promise that resolves when the notification service first notifies
- * with topic == "domwindowopened".
- * The value of the promise is { subject: subject, topic: topic, data: data }
- */
- function wwNotifyOnce() {
- return new Promise(resolve => {
- let onNotify = (subject, topic, data) => {
- if (topic == "domwindowopened") {
- Services.ww.unregisterNotification(onNotify);
- resolve({ subject: subject, topic: topic, data: data });
- }
- };
- Services.ww.registerNotification(onNotify);
- });
- }
- /**
- * YET ANOTHER WRAPPER for a place where we are using events as poor-man's
- * promises. Perhaps this should be promoted to scratchpad?
- */
- function observeOnce(scratchpad) {
- return new Promise(resolve => {
- let observer = {
- onReady: function () {
- scratchpad.removeObserver(observer);
- resolve();
- },
- };
- scratchpad.addObserver(observer);
- });
- }
|