mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge mozilla-central to tracemonkey.
This commit is contained in:
commit
f7fd4ebce9
@ -360,28 +360,6 @@ nsDOMFileReader::OnStartRequest(nsIRequest *request, nsISupports *ctxt)
|
|||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
NS_METHOD
|
|
||||||
ReadFuncBinaryString(nsIInputStream* in,
|
|
||||||
void* closure,
|
|
||||||
const char* fromRawSegment,
|
|
||||||
PRUint32 toOffset,
|
|
||||||
PRUint32 count,
|
|
||||||
PRUint32 *writeCount)
|
|
||||||
{
|
|
||||||
PRUnichar* dest = static_cast<PRUnichar*>(closure) + toOffset;
|
|
||||||
PRUnichar* end = dest + count;
|
|
||||||
const unsigned char* source = (const unsigned char*)fromRawSegment;
|
|
||||||
while (dest != end) {
|
|
||||||
*dest = *source;
|
|
||||||
++dest;
|
|
||||||
++source;
|
|
||||||
}
|
|
||||||
*writeCount = count;
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDOMFileReader::OnDataAvailable(nsIRequest *aRequest,
|
nsDOMFileReader::OnDataAvailable(nsIRequest *aRequest,
|
||||||
nsISupports *aContext,
|
nsISupports *aContext,
|
||||||
@ -389,21 +367,6 @@ nsDOMFileReader::OnDataAvailable(nsIRequest *aRequest,
|
|||||||
PRUint32 aOffset,
|
PRUint32 aOffset,
|
||||||
PRUint32 aCount)
|
PRUint32 aCount)
|
||||||
{
|
{
|
||||||
//Continuously update our binary string as data comes in
|
|
||||||
if (mDataFormat == FILE_AS_BINARY) {
|
|
||||||
PRUint32 oldLen = mResult.Length();
|
|
||||||
PRUnichar *buf = nsnull;
|
|
||||||
mResult.GetMutableData(&buf, oldLen + aCount);
|
|
||||||
NS_ENSURE_TRUE(buf, NS_ERROR_OUT_OF_MEMORY);
|
|
||||||
|
|
||||||
PRUint32 bytesRead;
|
|
||||||
aInputStream->ReadSegments(ReadFuncBinaryString, buf + oldLen, aCount,
|
|
||||||
&bytesRead);
|
|
||||||
NS_ASSERTION(bytesRead == aCount, "failed to read data");
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Update memory buffer to reflect the contents of the file
|
//Update memory buffer to reflect the contents of the file
|
||||||
mFileData = (char *)PR_Realloc(mFileData, aOffset + aCount);
|
mFileData = (char *)PR_Realloc(mFileData, aOffset + aCount);
|
||||||
NS_ENSURE_TRUE(mFileData, NS_ERROR_OUT_OF_MEMORY);
|
NS_ENSURE_TRUE(mFileData, NS_ERROR_OUT_OF_MEMORY);
|
||||||
@ -412,6 +375,27 @@ nsDOMFileReader::OnDataAvailable(nsIRequest *aRequest,
|
|||||||
mDataLen += aCount;
|
mDataLen += aCount;
|
||||||
mReadTransferred = mDataLen;
|
mReadTransferred = mDataLen;
|
||||||
|
|
||||||
|
//Continuously update our binary string as data comes in
|
||||||
|
if (mDataFormat == FILE_AS_BINARY) {
|
||||||
|
PRUint32 oldLen = mResult.Length();
|
||||||
|
PRUint32 newLen = oldLen + aCount;
|
||||||
|
PRUnichar *buf;
|
||||||
|
|
||||||
|
if (mResult.GetMutableData(&buf, newLen) != newLen) {
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRUnichar *bufEnd = buf + newLen;
|
||||||
|
buf += oldLen;
|
||||||
|
|
||||||
|
char *source = mFileData + aOffset;
|
||||||
|
while (buf < bufEnd) {
|
||||||
|
*buf = *source;
|
||||||
|
++buf;
|
||||||
|
++source;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Notify the timer is the appropriate timeframe has passed
|
//Notify the timer is the appropriate timeframe has passed
|
||||||
if (mTimerIsActive) {
|
if (mTimerIsActive) {
|
||||||
mProgressEventWasDelayed = PR_TRUE;
|
mProgressEventWasDelayed = PR_TRUE;
|
||||||
@ -485,7 +469,6 @@ nsDOMFileReader::ReadFileContent(nsIDOMFile* aFile,
|
|||||||
mDataFormat = aDataFormat;
|
mDataFormat = aDataFormat;
|
||||||
mCharset = aCharset;
|
mCharset = aCharset;
|
||||||
mError = nsnull;
|
mError = nsnull;
|
||||||
SetDOMStringToNull(mResult);
|
|
||||||
|
|
||||||
//Obtain the nsDOMFile's underlying nsIFile
|
//Obtain the nsDOMFile's underlying nsIFile
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
|
@ -20,235 +20,272 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=414796
|
|||||||
|
|
||||||
<pre id="test">
|
<pre id="test">
|
||||||
<script class="testbody" type="text/javascript">
|
<script class="testbody" type="text/javascript">
|
||||||
const minFileSize = 20000;
|
|
||||||
var fileNum = 1;
|
var testCounter = 0;
|
||||||
var testRanCounter = 0;
|
|
||||||
var expectedTestCount = 0;
|
|
||||||
SimpleTest.waitForExplicitFinish();
|
SimpleTest.waitForExplicitFinish();
|
||||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||||
|
|
||||||
|
// Write a test file > 8192 characters
|
||||||
|
|
||||||
is(FileReader.EMPTY, 0, "correct EMPTY value");
|
is(FileReader.EMPTY, 0, "correct EMPTY value");
|
||||||
is(FileReader.LOADING, 1, "correct LOADING value");
|
is(FileReader.LOADING, 1, "correct LOADING value");
|
||||||
is(FileReader.DONE, 2, "correct DONE value");
|
is(FileReader.DONE, 2, "correct DONE value");
|
||||||
|
|
||||||
// Create strings containing data we'll test with. We'll want long
|
var testData = "asdfblahqwer";
|
||||||
// strings to ensure they span multiple buffers while loading
|
for (var i = 0; i < 10; i++) {
|
||||||
var testTextData = "asd b\tlah\u1234w\u00a0r";
|
testData = testData + testData;
|
||||||
while (testTextData.length < minFileSize) {
|
|
||||||
testTextData = testTextData + testTextData;
|
|
||||||
}
|
}
|
||||||
|
var testData2 = testData + "a";
|
||||||
|
var testData3 = testData + "as";
|
||||||
|
|
||||||
var testASCIIData = "abcdef 123456\n";
|
//Ensure we have different sizes of data for thoroughly testing data URI retrieval
|
||||||
while (testASCIIData.length < minFileSize) {
|
is(testData.length % 3, 0, "Need to have data length % 3 == 0");
|
||||||
testASCIIData = testASCIIData + testASCIIData;
|
is(testData2.length % 3, 1, "Need to have data length % 3 == 1");
|
||||||
|
is(testData3.length % 3, 2, "Need to have data lenght % 3 == 2");
|
||||||
|
|
||||||
|
//Create UTF data that should be the same for UTF-16
|
||||||
|
var utf16Data = "\0a\0s\0d\0f\0b\0l\0a\0h\0q\0w\0e\0r";
|
||||||
|
for (var i = 0; i < 10; i++) {
|
||||||
|
utf16Data = utf16Data + utf16Data;
|
||||||
}
|
}
|
||||||
|
var utf16File = createFileWithData(utf16Data, "01");
|
||||||
|
|
||||||
var testBinaryData = "";
|
//Create UTF data that should be the same for UTF-32
|
||||||
for (var i = 0; i < 256; i++) {
|
var utf32Data = "\0\0\0a\0\0\0s\0\0\0d\0\0\0f\0\0\0b\0\0\0l\0\0\0a\0\0\0h\0\0\0q\0\0\0w\0\0\0e\0\0\0r";
|
||||||
testBinaryData += String.fromCharCode(i);
|
for (var i = 0; i < 10; i++) {
|
||||||
}
|
utf32Data = utf32Data + utf32Data;
|
||||||
while (testBinaryData.length < minFileSize) {
|
|
||||||
testBinaryData = testBinaryData + testBinaryData;
|
|
||||||
}
|
}
|
||||||
|
var utf32File = createFileWithData(utf32Data, "001");
|
||||||
|
|
||||||
|
//Obtain a variety of encodings so we can test async return values
|
||||||
|
var file = createFileWithData(testData, "00");
|
||||||
|
var domFileData = file.getAsDataURL();
|
||||||
|
var domFileBinary = file.getAsBinary();
|
||||||
|
|
||||||
//Set up files for testing
|
var domFileBinary2 = utf16File.getAsBinary();
|
||||||
var asciiFile = createFileWithData(testASCIIData);
|
var domFileBinary3 = utf32File.getAsBinary();
|
||||||
var binaryFile = createFileWithData(testBinaryData);
|
|
||||||
|
|
||||||
var fileList = document.getElementById('fileList');
|
var request1 = new FileReader();
|
||||||
fileList.value = "/none/existing/path/fileAPI/testing";
|
is(request1.readyState, FileReader.EMPTY, "correct initial readyState");
|
||||||
var nonExistingFile = fileList.files[0];
|
request1.onload = handleTextISO1;
|
||||||
|
request1.readAsText(file, "iso-8859-1");
|
||||||
|
is(request1.readyState, FileReader.LOADING, "correct loading readyState");
|
||||||
|
|
||||||
// Test that plain reading works and fires events as expected, both
|
var request2 = new FileReader();
|
||||||
// for text and binary reading
|
request2.onload = handleTextUTF8;
|
||||||
var onloadHasRunText = false;
|
request2.readAsText(file);
|
||||||
var onloadStartHasRunText = false;
|
|
||||||
r = new FileReader();
|
|
||||||
is(r.readyState, FileReader.EMPTY, "correct initial text readyState");
|
|
||||||
r.onload = getLoadHandler(testASCIIData, "plain reading");
|
|
||||||
r.addEventListener("load", function() { onloadHasRunText = true }, false);
|
|
||||||
r.addEventListener("loadstart", function() { onloadStartHasRunText = true }, false);
|
|
||||||
r.readAsText(asciiFile);
|
|
||||||
is(r.readyState, FileReader.LOADING, "correct loading text readyState");
|
|
||||||
is(onloadHasRunText, false, "text loading must be async");
|
|
||||||
is(onloadStartHasRunText, true, "text loadstart should fire sync");
|
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
var onloadHasRunBinary = false;
|
var request3 = new FileReader();
|
||||||
var onloadStartHasRunBinary = false;
|
request3.onload = handleTextUTF8;
|
||||||
r = new FileReader();
|
request3.readAsText(file, "");
|
||||||
is(r.readyState, FileReader.EMPTY, "correct initial binary readyState");
|
|
||||||
r.addEventListener("load", function() { onloadHasRunBinary = true }, false);
|
|
||||||
r.addEventListener("loadstart", function() { onloadStartHasRunBinary = true }, false);
|
|
||||||
r.readAsBinaryString(binaryFile);
|
|
||||||
r.onload = getLoadHandler(testBinaryData, "binary reading");
|
|
||||||
is(r.readyState, FileReader.LOADING, "correct loading binary readyState");
|
|
||||||
is(onloadHasRunBinary, false, "binary loading must be async");
|
|
||||||
is(onloadStartHasRunBinary, true, "binary loadstart should fire sync");
|
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
|
var request4 = new FileReader();
|
||||||
|
request4.onload = handleTextUTF8;
|
||||||
|
request4.readAsText(file, "UTF-8");
|
||||||
|
|
||||||
//Test a variety of encodings, and make sure they work properly
|
//Test a variety of encodings, and make sure they work properly
|
||||||
r = new FileReader();
|
//Also, test a variety of the same calls with different numbers of arguments
|
||||||
r.onload = getLoadHandler(testASCIIData, "no encoding reading");
|
var request5 = new FileReader();
|
||||||
r.readAsText(asciiFile, "");
|
request5.onload = handleTextUTF16;
|
||||||
expectedTestCount++;
|
request5.readAsText(utf16File, "UTF-16");
|
||||||
|
|
||||||
r = new FileReader();
|
var request6 = new FileReader();
|
||||||
r.onload = getLoadHandler(testASCIIData, "iso8859 reading");
|
request6.onload = handleTextUTF32;
|
||||||
r.readAsText(asciiFile, "iso-8859-1");
|
request6.readAsText(utf32File, "UTF-32");
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
r = new FileReader();
|
//Test binary data accessor
|
||||||
r.onload = getLoadHandler(testTextData, "utf8 reading");
|
var request7 = new FileReader();
|
||||||
r.readAsText(createFileWithData(convertToUTF8(testTextData)), "utf8");
|
is(request7.readyState, FileReader.EMPTY, "correct initial readyState");
|
||||||
expectedTestCount++;
|
request7.onload = handleDataBinary;
|
||||||
|
request7.readAsBinaryString(file);
|
||||||
|
is(request7.readyState, FileReader.LOADING, "correct loading readyState");
|
||||||
|
|
||||||
r = new FileReader();
|
var request71 = new FileReader();
|
||||||
r.readAsText(createFileWithData(convertToUTF16(testTextData)), "utf-16");
|
request71.onload = handleDataBinary16;
|
||||||
r.onload = getLoadHandler(testTextData, "utf16 reading");
|
request71.readAsBinaryString(utf16File);
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
r = new FileReader();
|
var request72 = new FileReader();
|
||||||
r.onload = getLoadHandler(testTextData, "utf32 reading");
|
request72.onload = handleDataBinary32;
|
||||||
r.readAsText(createFileWithData(convertToUTF32(testTextData)), "UTF-32");
|
request72.readAsBinaryString(utf32File);
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
|
//Test data URI encoding on differing file sizes
|
||||||
|
//Testing data URI when length % 3 == 0
|
||||||
|
var request8 = new FileReader();
|
||||||
|
request8.onload = handleDataURI;
|
||||||
|
request8.readAsDataURL(file);
|
||||||
|
|
||||||
// Test reusing a FileReader to read multiple times
|
//Testing data URI when length % 3 == 1
|
||||||
r = new FileReader();
|
var file2 = createFileWithData(testData2, "02");
|
||||||
r.onload = getLoadHandler(testASCIIData, "to-be-reused reading")
|
var domFileData1 = file2.getAsDataURL();
|
||||||
var makeAnotherReadListener = function(event) {
|
|
||||||
r = event.target;
|
|
||||||
r.removeEventListener("load", makeAnotherReadListener, false);
|
|
||||||
r.onload = getLoadHandler(testBinaryData, "reused reading");
|
|
||||||
r.readAsBinaryString(binaryFile);
|
|
||||||
};
|
|
||||||
r.addEventListener("load", makeAnotherReadListener, false);
|
|
||||||
r.readAsText(asciiFile, "");
|
|
||||||
expectedTestCount += 2;
|
|
||||||
|
|
||||||
|
var request9 = new FileReader();
|
||||||
|
request9.onload = handleDataURI1;
|
||||||
|
request9.readAsDataURL(file2);
|
||||||
|
|
||||||
//Test data-URI encoding on differing file sizes
|
//Testing data URI when length % 3 == 2
|
||||||
dataurldata = testBinaryData.substr(0, testBinaryData.length -
|
var file3 = createFileWithData(testData3, "03");
|
||||||
testBinaryData.length % 3);
|
var domFileData2 = file3.getAsDataURL();
|
||||||
is(dataurldata.length % 3, 0, "Want to test data with length % 3 == 0");
|
|
||||||
r = new FileReader();
|
|
||||||
r.onload = getLoadHandler(convertToDataURL(dataurldata),
|
|
||||||
"dataurl reading, %3 = 0");
|
|
||||||
r.readAsDataURL(createFileWithData(dataurldata));
|
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
dataurldata = testBinaryData.substr(0, testBinaryData.length - 2 -
|
var request10 = new FileReader();
|
||||||
testBinaryData.length % 3);
|
request10.onload = handleDataURI2;
|
||||||
is(dataurldata.length % 3, 1, "Want to test data with length % 3 == 1");
|
request10.readAsDataURL(file3);
|
||||||
r = new FileReader();
|
|
||||||
r.onload = getLoadHandler(convertToDataURL(dataurldata),
|
|
||||||
"dataurl reading, %3 = 1");
|
|
||||||
r.readAsDataURL(createFileWithData(dataurldata));
|
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
dataurldata = testBinaryData.substr(0, testBinaryData.length - 1 -
|
//Test asynchronous property of file access
|
||||||
testBinaryData.length % 3);
|
var globalVar = 0;
|
||||||
is(dataurldata.length % 3, 2, "Want to test data with length % 3 == 2");
|
var request105 = new FileReader();
|
||||||
r = new FileReader();
|
request105.onload = incGlobalVar;
|
||||||
r.onload = getLoadHandler(convertToDataURL(dataurldata),
|
request105.readAsText(file, "");
|
||||||
"dataurl reading, %3 = 2");
|
is(globalVar, 0, "testing to make sure getAsText doesn't block subsequent execution");
|
||||||
r.readAsDataURL(createFileWithData(dataurldata));
|
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
|
//Create second file for testing cancelReads()
|
||||||
|
var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
|
||||||
|
var testFile4 = dirSvc.get("ProfD", Components.interfaces.nsIFile);
|
||||||
|
testFile4.append("testfile04");
|
||||||
|
var outStream4 = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
|
||||||
|
outStream4.init(testFile4, 0x02 | 0x08 | 0x20, 0666, 0);
|
||||||
|
outStream4.write(testData, testData.length);
|
||||||
|
outStream4.close();
|
||||||
|
|
||||||
// Test abort()
|
var fileList = document.getElementById('fileList');
|
||||||
var abortHasRun = false;
|
fileList.value = testFile4.path;
|
||||||
var loadEndHasRun = false;
|
var file4 = fileList.files[0];
|
||||||
r = new FileReader();
|
|
||||||
r.onabort = function (event) {
|
var request11 = new FileReader();
|
||||||
is(abortHasRun, false, "abort should only fire once");
|
request11.onabort = handleCancel;
|
||||||
is(loadEndHasRun, false, "loadend shouldn't have fired yet");
|
request11.readAsText(file4);
|
||||||
abortHasRun = true;
|
request11.abort();
|
||||||
is(event.target.readyState, FileReader.DONE, "should be DONE while firing onabort");
|
|
||||||
is(event.target.error.code, FileError.ABORT_ERR, "error code set to CANCELED for canceled reads");
|
//Test error handling - Note: currently throws exceptions
|
||||||
is(event.target.result, null, "file data should be null on canceled reads");
|
/*testFile4.permissions = 0;
|
||||||
|
var request12 = new FileReader();
|
||||||
|
request12.onerror = handleSecurityError;
|
||||||
|
request12.readAsText(file4, "");
|
||||||
|
|
||||||
|
testFile4.remove(false);
|
||||||
|
var request13 = new FileReader();
|
||||||
|
request13.onerror = handleNotFoundError;
|
||||||
|
request13.readAsText(file4, "");*/
|
||||||
|
|
||||||
|
//Corresponding callback functions
|
||||||
|
function incGlobalVar(fileAsText) {
|
||||||
|
globalVar++;
|
||||||
}
|
}
|
||||||
r.onloadend = function (event) {
|
|
||||||
is(abortHasRun, true, "abort should fire before loadend");
|
|
||||||
is(loadEndHasRun, false, "loadend should only fire once");
|
|
||||||
loadEndHasRun = true;
|
|
||||||
is(event.target.readyState, FileReader.DONE, "should be DONE while firing onabort");
|
|
||||||
is(event.target.error.code, FileError.ABORT_ERR, "error code set to CANCELED for canceled reads");
|
|
||||||
is(event.target.result, null, "file data should be null on canceled reads");
|
|
||||||
}
|
|
||||||
r.onload = function() { ok(false, "load should not fire for aborted reads") };
|
|
||||||
r.onerror = function() { ok(false, "error should not fire for aborted reads") };
|
|
||||||
r.onprogress = function() { ok(false, "progress should not fire for aborted reads") };
|
|
||||||
r.abort();
|
|
||||||
is(abortHasRun, false, "abort() is a no-op unless loading");
|
|
||||||
r.readAsText(asciiFile);
|
|
||||||
r.abort();
|
|
||||||
is(abortHasRun, true, "abort should fire sync");
|
|
||||||
is(loadEndHasRun, true, "loadend should fire sync");
|
|
||||||
|
|
||||||
// Test calling readAsX to cause abort()
|
function handleCancel(event) {
|
||||||
var reuseAbortHasRun = false;
|
var fileAsText = event.target.result;
|
||||||
r = new FileReader();
|
var error = event.target.error;
|
||||||
r.onabort = function (event) {
|
is(error.code, FileError.ABORT_ERR, "error code set to CANCELED for canceled reads");
|
||||||
is(reuseAbortHasRun, false, "abort should only fire once");
|
is(fileAsText, null, "file data should be null on canceled reads");
|
||||||
reuseAbortHasRun = true;
|
|
||||||
is(event.target.readyState, FileReader.DONE, "should be DONE while firing onabort");
|
|
||||||
is(event.target.error.code, FileError.ABORT_ERR, "error code set to CANCELED for canceled reads");
|
|
||||||
is(event.target.result, null, "file data should be null on canceled reads");
|
|
||||||
}
|
|
||||||
r.onload = function() { ok(false, "load should not fire for aborted reads") };
|
|
||||||
r.abort();
|
|
||||||
is(reuseAbortHasRun, false, "abort() is a no-op unless loading");
|
|
||||||
r.readAsText(asciiFile);
|
|
||||||
r.readAsText(asciiFile);
|
|
||||||
is(reuseAbortHasRun, true, "abort should fire sync");
|
|
||||||
r.onload = getLoadHandler(testASCIIData, "reuse-as-abort reading");
|
|
||||||
expectedTestCount++;
|
|
||||||
|
|
||||||
|
|
||||||
// Test reading from non-existing files
|
|
||||||
r = new FileReader();
|
|
||||||
var didThrow = false;
|
|
||||||
try {
|
|
||||||
r.readAsDataURL(nonExistingFile);
|
|
||||||
} catch(ex) {
|
|
||||||
didThrow = true;
|
|
||||||
}
|
|
||||||
// Once this test passes, we shoud test that onerror gets called and
|
|
||||||
// that the FileReader object is in the right state during that call.
|
|
||||||
todo(!didThrow, "shouldn't throw when opening non-existing file, should fire error instead");
|
|
||||||
|
|
||||||
|
|
||||||
function getLoadHandler(expectedResult, testName) {
|
|
||||||
return function (event) {
|
|
||||||
is(event.target.readyState, FileReader.DONE,
|
|
||||||
"readyState in test " + testName);
|
|
||||||
is(event.target.error, null,
|
|
||||||
"no error in test " + testName);
|
|
||||||
is(event.target.result, expectedResult,
|
|
||||||
"result in test " + testName);
|
|
||||||
testHasRun();
|
testHasRun();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleTextISO1(event) {
|
||||||
|
is(event.target.readyState, FileReader.DONE, "correct final readyState");
|
||||||
|
var fileAsText = event.target.result;
|
||||||
|
var error = event.target.error;
|
||||||
|
is(error, null, "error code set to null for successful data accesses");
|
||||||
|
is(testData.length, fileAsText.length, "iso-1 async length should match testdata");
|
||||||
|
is(testData, fileAsText, "iso-1 async string result should match testdata");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleTextUTF8(event) {
|
||||||
|
var fileAsUTF8 = event.target.result;
|
||||||
|
var error = event.target.error;
|
||||||
|
is(error, null, "error code set to null for successful data accesses");
|
||||||
|
is(testData.length, fileAsUTF8.length, "UTF-8 async length should match testdata");
|
||||||
|
is(testData, fileAsUTF8, "UTF-8 async string result should match testdata");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleTextUTF16(event) {
|
||||||
|
var fileAsUTF16 = event.target.result;
|
||||||
|
var error = event.target.error;
|
||||||
|
is(error, null, "error code set to SUCCESS for successful data accesses");
|
||||||
|
is(testData.length, fileAsUTF16.length, "UTF-16 async length should match testdata");
|
||||||
|
is(testData, fileAsUTF16, "UTF-16 async string result should match testdata");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleTextUTF32(event) {
|
||||||
|
var fileAsUTF32 = event.target.result;
|
||||||
|
var error = event.target.error;
|
||||||
|
is(error, null, "error code set to SUCCESS for successful data accesses");
|
||||||
|
is(testData.length, fileAsUTF32.length, "UTF-32 async length should match testdata");
|
||||||
|
is(testData, fileAsUTF32, "UTF-32 async string result should match testdata");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Tests dataURI.length % 3 == 0
|
||||||
|
function handleDataURI(event) {
|
||||||
|
var fileAsDataURI = event.target.result;
|
||||||
|
is(domFileData.length, fileAsDataURI.length, "data URI async length should match dom file data");
|
||||||
|
is(domFileData, fileAsDataURI, "data URI async string result should match dom file data");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Tests dataURI.length % 3 == 1
|
||||||
|
function handleDataURI1(event) {
|
||||||
|
var fileAsDataURI = event.target.result;
|
||||||
|
is(domFileData1.length, fileAsDataURI.length, "data URI async length should match dom file data1");
|
||||||
|
is(domFileData1, fileAsDataURI, "data URI async string result should match dom file data1");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Tests dataURI.length % 3 == 2
|
||||||
|
function handleDataURI2(event) {
|
||||||
|
var fileAsDataURI = event.target.result;
|
||||||
|
is(domFileData2.length, fileAsDataURI.length, "data URI async length should match dom file data2");
|
||||||
|
is(domFileData2, fileAsDataURI, "data URI async string result should match dom file data2");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleDataBinary(event) {
|
||||||
|
is(event.target.readyState, FileReader.DONE, "correct final readyState");
|
||||||
|
var fileAsBinary = event.target.result;
|
||||||
|
is(domFileBinary.length, fileAsBinary.length, "binary data async length should match dom file binary");
|
||||||
|
is(domFileBinary, fileAsBinary, "binary data async string result should match dom file binary");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleDataBinary16(event) {
|
||||||
|
var fileAsBinary = event.target.result;
|
||||||
|
is(domFileBinary2.length, fileAsBinary.length, "binary data async length should match dom file binary16");
|
||||||
|
is(domFileBinary2, fileAsBinary, "binary data async string result should match dom file binary16");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleDataBinary32(event) {
|
||||||
|
var fileAsBinary = event.target.result;
|
||||||
|
is(domFileBinary3.length, fileAsBinary.length, "binary data async length should match dom file binary32");
|
||||||
|
is(domFileBinary3, fileAsBinary, "binary data async string result should match dom file binary32");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleSecurityError(event) {
|
||||||
|
var fileAsText = event.target.result;
|
||||||
|
var error = event.target.error;
|
||||||
|
is(error.code, FileError.SECURITY_ERR, "code for file security error should have value 18");
|
||||||
|
is(fileAsText, null, "file content should be null when error is encountered");
|
||||||
|
testHasRun();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleNotFoundError(event) {
|
||||||
|
var fileAsText = event.target.result;
|
||||||
|
var error = event.target.error;
|
||||||
|
is(error.code, FileError.NOT_FOUND_ERR, "code for file not found error should have value 8");
|
||||||
|
is(fileAsText, null, "file content should be null when error is encountered");
|
||||||
|
testHasRun();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testHasRun() {
|
function testHasRun() {
|
||||||
//alert(testRanCounter);
|
if (++testCounter == 13) SimpleTest.finish();
|
||||||
++testRanCounter;
|
|
||||||
if (testRanCounter == expectedTestCount) {
|
|
||||||
is(onloadHasRunText, true, "onload text should have fired by now");
|
|
||||||
is(onloadHasRunBinary, true, "onload binary should have fired by now");
|
|
||||||
SimpleTest.finish();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function createFileWithData(fileData) {
|
function createFileWithData(fileData, fileNum) {
|
||||||
var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
|
var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
|
||||||
var testFile = dirSvc.get("ProfD", Components.interfaces.nsIFile);
|
var testFile = dirSvc.get("ProfD", Components.interfaces.nsIFile);
|
||||||
testFile.append("fileAPItestfile" + fileNum);
|
testFile.append("testfile" + fileNum);
|
||||||
fileNum++;
|
|
||||||
var outStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
|
var outStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
|
||||||
outStream.init(testFile, 0x02 | 0x08 | 0x20, // write, create, truncate
|
outStream.init(testFile, 0x02 | 0x08 | 0x20, // write, create, truncate
|
||||||
0666, 0);
|
0666, 0);
|
||||||
@ -261,32 +298,6 @@ function createFileWithData(fileData) {
|
|||||||
return fileList.files[0];
|
return fileList.files[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertToUTF16(s) {
|
|
||||||
res = "";
|
|
||||||
for (var i = 0; i < s.length; ++i) {
|
|
||||||
c = s.charCodeAt(i);
|
|
||||||
res += String.fromCharCode(c >>> 8, c & 255);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
function convertToUTF32(s) {
|
|
||||||
res = "";
|
|
||||||
for (var i = 0; i < s.length; ++i) {
|
|
||||||
c = s.charCodeAt(i);
|
|
||||||
res += "\0\0" + String.fromCharCode(c >>> 8, c & 255);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
function convertToUTF8(s) {
|
|
||||||
return unescape(encodeURIComponent(s));
|
|
||||||
}
|
|
||||||
|
|
||||||
function convertToDataURL(s) {
|
|
||||||
return "data:application/octet-stream;base64," + btoa(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</pre>
|
</pre>
|
||||||
</body> </html>
|
</body> </html>
|
||||||
|
Loading…
Reference in New Issue
Block a user