Skip to content
This repository has been archived by the owner on Aug 4, 2022. It is now read-only.

Commit

Permalink
Bug 668154 - Use the same mock file picker for all mochitests and xpc…
Browse files Browse the repository at this point in the history
…shell tests; r=jmaher
  • Loading branch information
darktrojan committed Oct 21, 2011
1 parent 2617402 commit cc0dba4
Show file tree
Hide file tree
Showing 17 changed files with 325 additions and 872 deletions.
25 changes: 13 additions & 12 deletions browser/base/content/test/browser_save_video.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */

var MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.reset();

/**
* TestCase for bug 564387
* <https://bugzilla.mozilla.org/show_bug.cgi?id=564387>
*/
function test() {
waitForExplicitFinish();
var fileName;

gBrowser.loadURI("http://mochi.test:8888/browser/browser/base/content/test/bug564387.html");

Expand Down Expand Up @@ -35,17 +39,22 @@ function test() {

// Create the folder the video will be saved into.
var destDir = createTemporarySaveDirectory();
var destFile = destDir.clone();

mockFilePickerSettings.destDir = destDir;
mockFilePickerSettings.filterIndex = 1; // kSaveAsType_URL
mockFilePickerRegisterer.register();
MockFilePicker.displayDirectory = destDir;
MockFilePicker.showCallback = function(fp) {
fileName = fp.defaultString;
destFile.append (fileName);
MockFilePicker.returnFiles = [destFile];
MockFilePicker.filterIndex = 1; // kSaveAsType_URL
};

mockTransferCallback = onTransferComplete;
mockTransferRegisterer.register();

registerCleanupFunction(function () {
mockTransferRegisterer.unregister();
mockFilePickerRegisterer.unregister();
MockFilePicker.reset();
destDir.remove(true);
});

Expand All @@ -59,9 +68,6 @@ function test() {
function onTransferComplete(downloadSuccess) {
ok(downloadSuccess, "Video file should have been downloaded successfully");

// Read the name of the saved file.
var fileName = mockFilePickerResults.selectedFile.leafName;

is(fileName, "Bug564387-expectedName.ogv",
"Video file name is correctly retrieved from Content-Disposition http header");

Expand All @@ -74,11 +80,6 @@ Cc["@mozilla.org/moz/jssubscript-loader;1"]
.loadSubScript("chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
this);

Cc["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Ci.mozIJSSubScriptLoader)
.loadSubScript("chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockFilePicker.js",
this);

function createTemporarySaveDirectory() {
var saveDir = Cc["@mozilla.org/file/directory_service;1"]
.getService(Ci.nsIProperties)
Expand Down
64 changes: 12 additions & 52 deletions content/html/content/test/test_bug500885.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
<title>Test for Bug 500885</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/mockObjects.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />

</head>
Expand All @@ -18,81 +17,42 @@
</div>
<script type="text/javascript">

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var Cu = Components.utils;
var Ci = Components.interfaces;
var Cr = Components.results;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");

function MockFilePicker() { };
MockFilePicker.prototype = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIFilePicker]),
init: function(aParent, aTitle, aMode) { },
appendFilters: function(aFilterMask) { },
appendFilter: function(aTitle, aFilter) { },
defaultString: "",
defaultExtension: "",
filterIndex: 0,
displayDirectory: null,
file: null,
get fileURL() {
throw Cr.NS_ERROR_NOT_IMPLEMENTED;
},
get files() {
throw Cr.NS_ERROR_NOT_IMPLEMENTED;
},
show: function MFP_show() {
return Ci.nsIFilePicker.returnOK;
}
};

var mockFilePickerRegisterer =
new MockObjectRegisterer("@mozilla.org/filepicker;1",MockFilePicker);
var MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.reset();
MockFilePicker.returnValue = MockFilePicker.returnOK;

function test() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var wu = window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindowUtils);

// SpecialPowers.DOMWindowUtils doesn't appear to fire mouseEvents correctly
var wu = SpecialPowers.getDOMWindowUtils(window);

mockFilePickerRegisterer.register();
try {
var domActivateEvents;
var fileInput = document.getElementById("file");
var rect = fileInput.getBoundingClientRect();

fileInput.addEventListener ("DOMActivate", function (e) {
ok("detail" in e, "DOMActivate should have .detail!");
is(e.detail, 1, "detail should be 1!");
ok("detail" in e, "DOMActivate should have .detail");
is(e.detail, 1, ".detail should be 1");
domActivateEvents++;
}, false);

domActivateEvents = 0;
wu.sendMouseEvent("mousedown", rect.left + 5, rect.top + 5, 0, 1, 0);
wu.sendMouseEvent("mouseup", rect.left + 5, rect.top + 5, 0, 1, 0);
is(domActivateEvents, 1, "click on text field should only fire 1 DOMActivate event");
is(domActivateEvents, 1, "click on text field should fire 1 DOMActivate event");

domActivateEvents = 0;
wu.sendMouseEvent("mousedown", rect.right - 5, rect.top + 5, 0, 1, 0);
wu.sendMouseEvent("mouseup", rect.right - 5, rect.top + 5, 0, 1, 0);
is(domActivateEvents, 1, "click on button should only fire 1 DOMActivate event");
is(domActivateEvents, 1, "click on button should fire 1 DOMActivate event");

} finally {
SimpleTest.executeSoon(unregister);

SimpleTest.executeSoon(SimpleTest.finish);
}
}

function unregister()
{
mockFilePickerRegisterer.unregister();
SimpleTest.finish();
}

window.onload = function() {
SimpleTest.waitForExplicitFinish();
setTimeout(test, 0);
};
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(test);

</script>
</body>
Expand Down
141 changes: 10 additions & 131 deletions content/html/content/test/test_bug592802.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
<title>Test for Bug 592802</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/mockObjects.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
Expand All @@ -26,129 +25,8 @@

SimpleTest.waitForExplicitFinish();

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

var Cu = Components.utils;
var Ci = Components.interfaces;
var Cr = Components.results;

Cu.import("resource://gre/modules/XPCOMUtils.jsm");

function simpleEnumerator(items)
{
this._items = items;
this._nextIndex = 0;
}

simpleEnumerator.prototype = {
QueryInterface: function(aIID)
{
if (Ci.nsISimpleEnumerator.equals(aIID) ||
Ci.nsISupports.equals(aIID)) {
return this;
}

throw Cr.NS_ERROR_NO_INTERFACE;
},

hasMoreElements: function()
{
return this._nextIndex < this._items.length;
},

getNext: function()
{
if (!this.hasMoreElements()) {
throw Cr.NS_ERROR_FAILURE;
}

return this._items[this._nextIndex++];
}
};

function MockFilePicker()
{
}

MockFilePicker.prototype = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIFilePicker]),

// Constants
returnOK: 0, // the user hits OK (select a file)
returnCancel: 1, // the user cancel the file selection
returnReplace: 2, // the user replace the selection

// Properties
defaultExtension: "",
defaultString: "",
get displayDirectory() { return null; },
set displayDirectory(val) { },
get fileURL() { return null; },
filterIndex: 0,

get file() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

var fileName = "592808_file";
var fileData = "file content";

var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties);
var testFile = dirSvc.get("ProfD", Components.interfaces.nsIFile);
testFile.append(fileName);
var outStream = Components.
classes["@mozilla.org/network/file-output-stream;1"].
createInstance(Components.interfaces.nsIFileOutputStream);
outStream.init(testFile, 0x02 | 0x08 | 0x20, // write, create, truncate
0666, 0);
outStream.write(fileData, fileData.length);
outStream.close();

return testFile;
},

get files() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

var fileName = "592808_file";
var fileData = "file content";

var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties);
var testFile = dirSvc.get("ProfD", Components.interfaces.nsIFile);
testFile.append(fileName);
var outStream = Components.
classes["@mozilla.org/network/file-output-stream;1"].
createInstance(Components.interfaces.nsIFileOutputStream);
outStream.init(testFile, 0x02 | 0x08 | 0x20, // write, create, truncate
0666, 0);
outStream.write(fileData, fileData.length);
outStream.close();

return new simpleEnumerator([testFile]);
},

appendFilter: function(val) {},

appendFilters: function(val) {},

init: function() {},

show: function()
{
if (firstFilePickerShow) {
firstFilePickerShow = false;
return this.returnCancel;
} else {
return this.returnOK;
}
}
};

var mockFilePickerRegisterer =
new MockObjectRegisterer("@mozilla.org/filepicker;1",MockFilePicker);

mockFilePickerRegisterer.register();
var MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.reset();

var testData = [
/* visibility | display | multiple */
Expand All @@ -163,26 +41,27 @@
var testCounter = 0;
var testNb = testData.length;

var firstFilePickerShow = true;

function finished()
{
mockFilePickerRegisterer.unregister();

SimpleTest.finish();
}

SimpleTest.waitForFocus(function() {
// mockFilePicker will simulate a cancel for the first time the file picker will be shown.
MockFilePicker.returnValue = MockFilePicker.returnCancel;

var b2 = document.getElementById('b2');
b2.focus(); // Be sure the element is visible.
document.getElementById('b2').addEventListener("change", function(aEvent) {
aEvent.target.removeEventListener("change", arguments.callee, false);
ok(false, "When cancel is received, change should not fire");
}, false);
synthesizeMouse(b2, 2, 2, {});
b2.click();

// Now, we can launch tests when file picker isn't canceled.
MockFilePicker.useAnyFile();
MockFilePicker.returnValue = MockFilePicker.returnOK;

var b = document.getElementById('b');
b.focus(); // Be sure the element is visible.

Expand All @@ -203,12 +82,12 @@
a.multiple = data[2];

SimpleTest.executeSoon(function() {
synthesizeMouse(b, 2, 2, {});
b.click();
});
}
}, false);

synthesizeMouse(b, 2, 2, {});
b.click();
});

</script>
Expand Down
Loading

0 comments on commit cc0dba4

Please sign in to comment.