mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 707679 - Companion testsuite. r=taras
This commit is contained in:
parent
688bfea1b1
commit
0fbf2cf36d
11
toolkit/components/osfile/tests/Makefile.in
Normal file
11
toolkit/components/osfile/tests/Makefile.in
Normal file
@ -0,0 +1,11 @@
|
||||
DEPTH = ../../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
relativesrcdir = toolkit/components/osfile/tests
|
||||
|
||||
MODULE = test_osfile
|
||||
DIRS = mochi
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
include $(topsrcdir)/config/rules.mk
|
16
toolkit/components/osfile/tests/mochi/Makefile.in
Normal file
16
toolkit/components/osfile/tests/mochi/Makefile.in
Normal file
@ -0,0 +1,16 @@
|
||||
DEPTH = ../../../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
relativesrcdir = toolkit/components/osfile/tests/mochi
|
||||
|
||||
MODULE = osfile
|
||||
_CHROME_TEST_FILES = \
|
||||
test_osfile_back.xul \
|
||||
worker_test_osfile_unix.js \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
libs:: $(_CHROME_TEST_FILES)
|
||||
$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir)
|
64
toolkit/components/osfile/tests/mochi/test_osfile_back.xul
Normal file
64
toolkit/components/osfile/tests/mochi/test_osfile_back.xul
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
-->
|
||||
<window title="Testing OS.File on a chrome worker thread"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="test();">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
let worker;
|
||||
|
||||
function test() {
|
||||
ok(true, "test_osfile.xul: Starting test");
|
||||
if (navigator.platform.indexOf("Win") != -1) {
|
||||
ok(true, "test_osfile.xul: This is a Windows platform, bailing out");
|
||||
return;
|
||||
} else {
|
||||
worker = new ChromeWorker("worker_test_osfile_unix.js");
|
||||
}
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
ok(true, "test_osfile.xul: Chrome worker created");
|
||||
dump("MAIN: go\n");
|
||||
worker.onmessage = function(msg) {
|
||||
ok(true, "MAIN: onmessage "+JSON.stringify(msg.data));
|
||||
switch (msg.data.kind) {
|
||||
case "is":
|
||||
SimpleTest.ok(msg.data.outcome, msg.data.description +
|
||||
"( "+ msg.data.a + " ==? " + msg.data.b + ")" );
|
||||
return;
|
||||
case "isnot":
|
||||
SimpleTest.ok(msg.data.outcome, msg.data.description +
|
||||
"( "+ msg.data.a + " !=? " + msg.data.b + ")" );
|
||||
return;
|
||||
case "ok":
|
||||
SimpleTest.ok(msg.data.condition, msg.data.description);
|
||||
return;
|
||||
case "finish":
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
default:
|
||||
SimpleTest.ok(false, "test_osfile.xul: wrong message "+JSON.stringify(msg.data));
|
||||
return;
|
||||
}
|
||||
};
|
||||
worker.postMessage(0);
|
||||
ok(true, "test_osfile.xul: 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>
|
206
toolkit/components/osfile/tests/mochi/worker_test_osfile_unix.js
Normal file
206
toolkit/components/osfile/tests/mochi/worker_test_osfile_unix.js
Normal file
@ -0,0 +1,206 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
function log(text) {
|
||||
dump("WORKER "+text+"\n");
|
||||
}
|
||||
|
||||
function send(message) {
|
||||
log("Sending " + JSON.stringify(message) + "errno: " + ctypes.errno);
|
||||
self.postMessage(message);
|
||||
}
|
||||
|
||||
self.onmessage = function(msg) {
|
||||
log("received message "+JSON.stringify(msg.data));
|
||||
self.onmessage = function(msg) {
|
||||
log("ignored message "+JSON.stringify(msg.data));
|
||||
};
|
||||
test_init();
|
||||
test_getcwd();
|
||||
test_open_close();
|
||||
test_create_file();
|
||||
test_access();
|
||||
test_read_write();
|
||||
finish();
|
||||
};
|
||||
|
||||
function finish() {
|
||||
send({kind: "finish"});
|
||||
}
|
||||
|
||||
function ok(condition, description) {
|
||||
send({kind: "ok", condition: condition, description:description});
|
||||
}
|
||||
function is(a, b, description) {
|
||||
let outcome = a == b; // Need to decide outcome here, as not everything can be serialized
|
||||
send({kind: "is", outcome: outcome, description: description, a:""+a, b:""+b});
|
||||
}
|
||||
function isnot(a, b, description) {
|
||||
let outcome = a != b; // Need to decide outcome here, as not everything can be serialized
|
||||
send({kind: "isnot", outcome: outcome, description: description, a:""+a, b:""+b});
|
||||
}
|
||||
|
||||
function test_init() {
|
||||
ok(true, "Starting test_init");
|
||||
importScripts("resource:///modules/osfile.jsm");
|
||||
OS.Unix.File._init();
|
||||
}
|
||||
|
||||
function test_open_close() {
|
||||
ok(true, "Starting test_open_close");
|
||||
is(typeof OS.Unix.File.open, "function", "OS.Unix.File.open is a function");
|
||||
let file = OS.Unix.File.open("chrome/toolkit/components/osfile/tests/mochi/worker_test_osfile_unix.js", OS.Constants.libc.O_RDONLY, 0);
|
||||
isnot(file, -1, "test_open_close: opening succeeded");
|
||||
ok(true, "Close: "+OS.Unix.File.close.toSource());
|
||||
let result = OS.Unix.File.close(file);
|
||||
is(result, 0, "test_open_close: close succeeded");
|
||||
|
||||
file = OS.Unix.File.open("/i do not exist", OS.Constants.libc.O_RDONLY, 0);
|
||||
is(file, -1, "test_open_close: opening of non-existing file failed");
|
||||
is(ctypes.errno, OS.Constants.libc.ENOENT, "test_open_close: error is ENOENT");
|
||||
}
|
||||
|
||||
function test_create_file()
|
||||
{
|
||||
ok(true, "Starting test_create_file");
|
||||
let file = OS.Unix.File.open("test.tmp", OS.Constants.libc.O_RDWR
|
||||
| OS.Constants.libc.O_CREAT
|
||||
| OS.Constants.libc.O_TRUNC,
|
||||
OS.Constants.libc.S_IRWXU);
|
||||
isnot(file, -1, "test_create_file: file created");
|
||||
OS.Unix.File.close(file);
|
||||
}
|
||||
|
||||
function test_access()
|
||||
{
|
||||
ok(true, "Starting test_access");
|
||||
let file = OS.Unix.File.open("test1.tmp", OS.Constants.libc.O_RDWR
|
||||
| OS.Constants.libc.O_CREAT
|
||||
| OS.Constants.libc.O_TRUNC,
|
||||
OS.Constants.libc.S_IRWXU);
|
||||
let result = OS.Unix.File.access("test1.tmp", OS.Constants.libc.R_OK | OS.Constants.libc.W_OK | OS.Constants.libc.X_OK | OS.Constants.libc.F_OK);
|
||||
is(result, 0, "first call to access() succeeded");
|
||||
OS.Unix.File.close(file);
|
||||
|
||||
file = OS.Unix.File.open("test1.tmp", OS.Constants.libc.O_WRONLY
|
||||
| OS.Constants.libc.O_CREAT
|
||||
| OS.Constants.libc.O_TRUNC,
|
||||
OS.Constants.libc.S_IWUSR);
|
||||
|
||||
ok(true, "test_access: preparing second call to access()");
|
||||
result = OS.Unix.File.access("test2.tmp", OS.Constants.libc.R_OK
|
||||
| OS.Constants.libc.W_OK
|
||||
| OS.Constants.libc.X_OK
|
||||
| OS.Constants.libc.F_OK);
|
||||
is(result, -1, "test_access: second call to access() failed as expected");
|
||||
is(ctypes.errno, OS.Constants.libc.ENOENT, "This is the correct error");
|
||||
OS.Unix.File.close(file);
|
||||
}
|
||||
|
||||
function test_getcwd()
|
||||
{
|
||||
let array = new (ctypes.ArrayType(ctypes.char, 32768))();
|
||||
let path = OS.Unix.File.getcwd(array, array.length);
|
||||
if (ctypes.char.ptr(path).isNull()) {
|
||||
ok(false, "test_get_cwd: getcwd returned null, errno: " + ctypes.errno);
|
||||
}
|
||||
let path2;
|
||||
if (OS.Unix.File.get_current_dir_name) {
|
||||
path2 = OS.Unix.File.get_current_dir_name();
|
||||
} else {
|
||||
path2 = OS.Unix.File.getwd_auto(null);
|
||||
}
|
||||
if (ctypes.char.ptr(path2).isNull()) {
|
||||
ok(false, "test_get_cwd: getwd_auto/get_current_dir_name returned null, errno: " + ctypes.errno);
|
||||
}
|
||||
is(path.readString(), path2.readString(), "test_get_cwd: getcwd and getwd return the same path");
|
||||
}
|
||||
|
||||
function test_read_write()
|
||||
{
|
||||
let output_name = "osfile_copy.tmp";
|
||||
// Copy file
|
||||
let input = OS.Unix.File.open(
|
||||
"chrome/toolkit/components/osfile/tests/mochi/worker_test_osfile_unix.js",
|
||||
OS.Constants.libc.O_RDONLY, 0);
|
||||
isnot(input, -1, "test_read_write: input file opened");
|
||||
let output = OS.Unix.File.open("osfile_copy.tmp", OS.Constants.libc.O_RDWR
|
||||
| OS.Constants.libc.O_CREAT
|
||||
| OS.Constants.libc.O_TRUNC,
|
||||
OS.Constants.libc.S_IRWXU);
|
||||
isnot(output, -1, "test_read_write: output file opened");
|
||||
|
||||
let array = new (ctypes.ArrayType(ctypes.char, 4096))();
|
||||
let bytes = -1;
|
||||
let total = 0;
|
||||
while (true) {
|
||||
bytes = OS.Unix.File.read(input, array, 4096);
|
||||
ok(bytes != undefined, "test_read_write: bytes is defined");
|
||||
isnot(bytes, -1, "test_read_write: no read error");
|
||||
let write_from = 0;
|
||||
if (bytes == 0) {
|
||||
break;
|
||||
}
|
||||
while (bytes > 0) {
|
||||
let ptr = array.addressOfElement(write_from);
|
||||
// Note: |write| launches an exception in case of error
|
||||
let written = OS.Unix.File.write(output, array, bytes);
|
||||
isnot(written, -1, "test_read_write: no write error");
|
||||
write_from += written;
|
||||
bytes -= written;
|
||||
}
|
||||
total += write_from;
|
||||
}
|
||||
ok(true, "test_read_write: copy complete " + total);
|
||||
|
||||
// Compare files
|
||||
let result;
|
||||
ok(true, "SEEK_SET: " + OS.Constants.libc.SEEK_SET);
|
||||
ok(true, "Input: " + input + "(" + input.toSource() + ")");
|
||||
ok(true, "Output: " + output + "(" + output.toSource() + ")");
|
||||
result = OS.Unix.File.lseek(input, 0, OS.Constants.libc.SEEK_SET);
|
||||
ok(true, "Result of lseek: " + result);
|
||||
isnot(result, -1, "test_read_write: input seek succeeded " + ctypes.errno);
|
||||
result = OS.Unix.File.lseek(output, 0, OS.Constants.libc.SEEK_SET);
|
||||
isnot(result, -1, "test_read_write: output seek succeeded " + ctypes.errno);
|
||||
|
||||
let array2 = new (ctypes.ArrayType(ctypes.char, 4096))();
|
||||
let bytes2 = -1;
|
||||
let pos = 0;
|
||||
while (true) {
|
||||
bytes = OS.Unix.File.read(input, array, 4096);
|
||||
isnot(bytes, -1, "test_read_write: input read succeeded");
|
||||
bytes2 = OS.Unix.File.read(output, array2, 4096);
|
||||
isnot(bytes, -1, "test_read_write: output read succeeded");
|
||||
is(bytes > 0, bytes2 > 0, "Both files contain data or neither does "+bytes+", "+bytes2);
|
||||
if (bytes == 0) {
|
||||
break;
|
||||
}
|
||||
if (bytes != bytes2) {
|
||||
// This would be surprising, but theoretically possible with a
|
||||
// remote file system, I believe.
|
||||
bytes = Math.min(bytes, bytes2);
|
||||
pos += bytes;
|
||||
result = OS.Unix.File.lseek(input, pos, OS.Constants.libc.SEEK_SET);
|
||||
isnot(result, -1, "test_read_write: input seek succeeded");
|
||||
result = OS.Unix.File.lseek(output, pos, OS.Constants.libc.SEEK_SET);
|
||||
isnot(result, -1, "test_read_write: output seek succeeded");
|
||||
} else {
|
||||
pos += bytes;
|
||||
}
|
||||
for (let i = 0; i < bytes; ++i) {
|
||||
if (array[i] != array2[i]) {
|
||||
ok(false, "Files do not match at position " + i
|
||||
+ " ("+array[i] + "/"+array2[i] + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
ok(true, "test_read_write test complete");
|
||||
result = OS.Unix.File.close(input);
|
||||
isnot(result, -1, "test_read_write: input close succeeded");
|
||||
result = OS.Unix.File.close(output);
|
||||
isnot(result, -1, "test_read_write: output close succeeded");
|
||||
result = OS.Unix.File.unlink(output_name);
|
||||
isnot(result, -1, "test_read_write: input remove succeeded");
|
||||
ok(true, "test_read_write cleanup complete");
|
||||
}
|
Loading…
Reference in New Issue
Block a user