summaryrefslogtreecommitdiffstats
path: root/dom/system/tests/test_constants.xhtml
blob: 82c25ce1b0c9b45955505b44b67741c5bb6f3c17 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?xml version="1.0"?>
<!--
  Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/
-->
<window title="Testing constants on a chrome worker thread"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        onload="test();">

  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
  <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
  <script type="application/javascript">
  <![CDATA[

/* global OS */

let worker;

function test_xul() {
  let lib;
  isnot(null, OS.Constants.Path.libxul, "libxulpath is defined");
  try {
    lib = ctypes.open(OS.Constants.Path.libxul);
    lib.declare("DumpJSStack", ctypes.default_abi, ctypes.void_t);
  } catch (x) {
    ok(false, "Could not open libxul " + x);
  }
  if (lib) {
    lib.close();
  }
  ok(true, "test_xul: opened libxul successfully");
}

// Test that OS.Constants.libc is defined
function test_libc() {
  isnot(null, OS.Constants.libc, "OS.Constants.libc is defined");
  is(0o001, OS.Constants.libc.S_IXOTH, "OS.Constants.libc.S_IXOTH is defined");
  is(0o002, OS.Constants.libc.S_IWOTH, "OS.Constants.libc.S_IWOTH is defined");
  is(0o007, OS.Constants.libc.S_IRWXO, "OS.Constants.libc.S_IRWXO is defined");
  is(0o010, OS.Constants.libc.S_IXGRP, "OS.Constants.libc.S_IXGRP is defined");
  is(0o020, OS.Constants.libc.S_IWGRP, "OS.Constants.libc.S_IWGRP is defined");
  is(0o040, OS.Constants.libc.S_IRGRP, "OS.Constants.libc.S_IRGRP is defined");
  is(0o070, OS.Constants.libc.S_IRWXG, "OS.Constants.libc.S_IRWXG is defined");
  is(0o100, OS.Constants.libc.S_IXUSR, "OS.Constants.libc.S_IXUSR is defined");
  is(0o200, OS.Constants.libc.S_IWUSR, "OS.Constants.libc.S_IWUSR is defined");
  is(0o400, OS.Constants.libc.S_IRUSR, "OS.Constants.libc.S_IRUSR is defined");
  is(0o700, OS.Constants.libc.S_IRWXU, "OS.Constants.libc.S_IRWXU is defined");
}

// Test that OS.Constants.Win is defined
function test_Win() {
  var xulRuntime = Cc["@mozilla.org/xre/app-info;1"]
                           .getService(Ci.nsIXULRuntime);
  if(xulRuntime.OS == "Windows") {
    ok("Win" in OS.Constants, "OS.Constants.Win is defined");
    is(OS.Constants.Win.INVALID_HANDLE_VALUE, -1,
      "OS.Constants.Win.INVALID_HANDLE_VALUE is defined and correct");
  }
}

// Test that OS.Constants.Sys.DEBUG is set properly on main thread
function test_debugBuildMainThread(isDebugBuild) {
  is(isDebugBuild, !!OS.Constants.Sys.DEBUG, "OS.Constants.Sys.DEBUG is set properly on main thread");
}

// Test that OS.Constants.Sys.umask is set properly on main thread
function test_umaskMainThread(umask) {
  is(umask, OS.Constants.Sys.umask,
     "OS.Constants.Sys.umask is set properly on main thread: " +
     ("0000"+umask.toString(8)).slice(-4));
}

var ctypes;
function test() {
  ok(true, "test_constants.xhtml: Starting test");

  // Test 1: Load libxul from main thread
  Cc["@mozilla.org/net/osfileconstantsservice;1"].
    getService(Ci.nsIOSFileConstantsService).
    init();
  ({ctypes} = ChromeUtils.import("resource://gre/modules/ctypes.jsm"));
  test_xul();
  test_libc();
  test_Win();

  let isDebugBuild = Cc["@mozilla.org/xpcom/debug;1"]
                            .getService(Ci.nsIDebug2).isDebugBuild;
  test_debugBuildMainThread(isDebugBuild);

  let umask = Cc["@mozilla.org/system-info;1"].
    getService(Ci.nsIPropertyBag2).
    getProperty("umask");
  test_umaskMainThread(umask);

  // Test 2: Load libxul from chrome thread
  worker = new ChromeWorker("worker_constants.js");
  SimpleTest.waitForExplicitFinish();
  ok(true, "test_constants.xhtml: Chrome worker created");
  worker.onerror = function onerror(error) {
    error.preventDefault();
    ok(false, "error " + error);
  }
  worker.onmessage = function onmessage(msg) {
    switch (msg.data.kind) {
    case "is":
      SimpleTest.is(msg.data.a, msg.data.b, msg.data.description);
      return;
    case "isnot":
      SimpleTest.isnot(msg.data.a, msg.data.b, msg.data.description);
      return;
    case "ok":
      SimpleTest.ok(msg.data.condition, msg.data.description);
      return;
    case "finish":
      SimpleTest.finish();
      return;
    default:
      SimpleTest.ok(false, "test_constants.xhtml: wrong message " + JSON.stringify(msg.data));
      return;
    }
  };

  // pass expected values that are unavailable off-main-thread
  // to the worker
  worker.postMessage({
    isDebugBuild: isDebugBuild,
    umask: umask
  });
  ok(true, "test_constants.xhtml: Test in progress");
};
]]>
  </script>

  <body xmlns="http://www.w3.org/1999/xhtml">
    <p id="display"></p>
    <div id="content" style="display:none;"></div>
    <pre id="test"></pre>
  </body>
  <label id="test-result"/>
</window>