summaryrefslogtreecommitdiff
path: root/browser/devtools/scratchpad/test/browser_scratchpad_execute_print.js
blob: d319f998f59b7199f0b16ef06c25c13c40c04a4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

function test()
{
  waitForExplicitFinish();

  gBrowser.selectedTab = gBrowser.addTab();
  gBrowser.selectedBrowser.addEventListener("load", function onTabLoad() {
    gBrowser.selectedBrowser.removeEventListener("load", onTabLoad, true);
    openScratchpad(runTests);
  }, true);

  content.location = "data:text/html,<p>test run() and display() in Scratchpad";
}


function runTests()
{
  let sp = gScratchpadWindow.Scratchpad;
  let tests = [{
    method: "run",
    prepare: function() {
      content.wrappedJSObject.foobarBug636725 = 1;
      sp.editor.setText("++window.foobarBug636725");
    },
    then: function([code, , result]) {
      is(code, sp.getText(), "code is correct");
      is(result, content.wrappedJSObject.foobarBug636725,
         "result is correct");

      is(sp.getText(), "++window.foobarBug636725",
         "run() does not change the editor content");

      is(content.wrappedJSObject.foobarBug636725, 2,
         "run() updated window.foobarBug636725");
    }
  },
  {
    method: "display",
    prepare: function() {},
    then: function() {
      is(content.wrappedJSObject.foobarBug636725, 3,
         "display() updated window.foobarBug636725");

      is(sp.getText(), "++window.foobarBug636725\n/*\n3\n*/",
         "display() shows evaluation result in the textbox");

      is(sp.editor.getSelection(), "\n/*\n3\n*/", "getSelection is correct");
    }
  },
  {
    method: "run",
    prepare: function() {
      sp.editor.setText("window.foobarBug636725 = 'a';\n" +
        "window.foobarBug636725 = 'b';");
      sp.editor.setSelection({ line: 0, ch: 0 }, { line: 0, ch: 29 });
    },
    then: function([code, , result]) {
      is(code, "window.foobarBug636725 = 'a';", "code is correct");
      is(result, "a", "result is correct");

      is(sp.getText(), "window.foobarBug636725 = 'a';\n" +
                       "window.foobarBug636725 = 'b';",
         "run() does not change the textbox value");

      is(content.wrappedJSObject.foobarBug636725, "a",
         "run() worked for the selected range");
    }
  },
  {
    method: "display",
    prepare: function() {
      sp.editor.setText("window.foobarBug636725 = 'c';\n" +
                 "window.foobarBug636725 = 'b';");
      sp.editor.setSelection({ line: 0, ch: 0 }, { line: 0, ch: 22 });
    },
    then: function() {
      is(content.wrappedJSObject.foobarBug636725, "a",
         "display() worked for the selected range");

      is(sp.getText(), "window.foobarBug636725" +
                       "\n/*\na\n*/" +
                       " = 'c';\n" +
                       "window.foobarBug636725 = 'b';",
         "display() shows evaluation result in the textbox");

      is(sp.editor.getSelection(), "\n/*\na\n*/", "getSelection is correct");
    }
  }];

  runAsyncCallbackTests(sp, tests).then(function() {
    ok(sp.editor.somethingSelected(), "something is selected");
    sp.editor.dropSelection();
    ok(!sp.editor.somethingSelected(), "something is no longer selected");
    ok(!sp.editor.getSelection(), "getSelection is empty");

    // Test undo/redo.
    sp.editor.setText("foo1");
    sp.editor.setText("foo2");
    is(sp.getText(), "foo2", "editor content updated");
    sp.undo();
    is(sp.getText(), "foo1", "undo() works");
    sp.redo();
    is(sp.getText(), "foo2", "redo() works");

    finish();
  });
}