From 21978cfb336293501360da4f4e441e63ce6ef175 Mon Sep 17 00:00:00 2001 From: "pete%alphanumerica.com" Date: Thu, 15 Jun 2000 13:16:49 +0000 Subject: [PATCH] r=dougt,brendan a=dougt not part of the build. --pete git-svn-id: svn://10.0.0.236/trunk@72308 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpcom/tests/utils/io.js | 495 ++++++++++++++++++++++++++++++++ 1 file changed, 495 insertions(+) create mode 100644 mozilla/xpcom/tests/utils/io.js diff --git a/mozilla/xpcom/tests/utils/io.js b/mozilla/xpcom/tests/utils/io.js new file mode 100644 index 00000000000..2f41759030b --- /dev/null +++ b/mozilla/xpcom/tests/utils/io.js @@ -0,0 +1,495 @@ +/************* + +The contents of this file are subject to the Mozilla Public +License Version 1.1 (the "License"); you may not use this file +except in compliance with the License. You may obtain a copy of +the License at http://www.mozilla.org/MPL/ + +Software distributed under the License is distributed on an "AS +IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +implied. See the License for the specific language governing +rights and limitations under the License. + +The Original Code is Alphanumerica code. +The Initial Developer of the Original Code is Alphanumerica. + +Portions created by Alphanumerica are +Copyright (C) 2000 Alphanumerica. All +Rights Reserved. + +Contributor(s): Pete Collins, Doug Turner, Brendan Eich, Warren Harris + + +******* +* +* JS File IO API (The purpose of this file is to make it a little easier to do file IO from js) +* +* io.js +* +* Function List +* +* 1. open(path, mode); +* 2. exists(path); +* 3. read(path); +* 4. write(contents, permissions); +* 5. append(dirPath, fileName); +* 6. mkdir(path, permissions); +* +* Instructions: +* +* First include this js file +* +* file = new File(); +* +* to open a file for reading<"r">, writing<"w"> or appending<"a">, +* just call: +* +* file.open('/path/i/want/to/open', "w"); +* +* where in this case you will be creating a new file called: +* '/path/i/want/to/open' +* with a mode of "w" which means you want to write a new file. +* +* If you want to read from a file, just call: +* +* file.open('/path/i/want/to/open', "r"); +* +* var theFilesContents = file.read(); +* +* the file contents will be returned to the caller +* so you can do something usefull with it +* +* file.close(); +* +* destroys any created objects +* +* if you forget to use file.close() no probs all objects are discarded anyway +* +* Warning: these API's are not for religious types +* +*************/ + +////////////////// Globals ////////////////////// + +var FilePath = new Components.Constructor( "component://mozilla/file/local", "nsILocalFile", "initWithPath"); +var FileChannel = new Components.Constructor( "component://netscape/network/local-file-channel", "nsIFileChannel" ); +var InputStream = new Components.Constructor( "component://netscape/scriptableinputstream", "nsIScriptableInputStream" ); + +////////////////// Globals ////////////////////// + + +////////////////// File Object Class ///////////////////// + +function File(path, mode){ + + if(path) + this.open(path,mode); + +} // constructor + +File.prototype = { + +mode : null, + +fileInst : null, + +fileChannel : null, + +inputStream : null, + +/********************* EXISTS ***************************/ + +exists : function (path) { + + if(!path){ + dump("Missing path argument . . . \n\n"); + return; + } + + dump("\n\n**** Checking to see if the file exists ****\n\n"); + + try{ + + if(!this.fileInst) + this.fileInst = new FilePath(path); + + fileExists = this.fileInst.exists(); + + } + + catch(error) { dump("**** ERROR:"+error+"\n\n"); } + + dump("File \""+path+"\" exists = "+fileExists+"\n\n"); + + return fileExists; +}, + +/********************* EXISTS ***************************/ + + +/********************* OPEN *****************************/ + + +open : function(path, setMode){ + + if(!setMode) + setMode="r"; + +switch(setMode){ + + +case "w": + + dump("open file for writing\n\n"); + + if(!path || !setMode){ + dump("Missing path or mode in arguments . . .\n\n"); + return; + } + + try{ + + dump("Closing any existing handles . . . \n\n"); + this.close(); + + this.fileInst = new FilePath( path ); + + var fileExists = this.exists( path ); + + if(fileExists){ + + dump("deleting old file and creating a new one . . . \n\n"); + this.fileInst["delete"](false); + fileExists=false; + + } + + if (!fileExists){ + dump("\n\nCreating new file "+path+"\n\n"); + this.fileInst.create(0, 0644); + fileExists=true; + } + + this.mode=8; + return; + + } + + catch (error){ dump("**** ERROR:"+error+"\n\n"); } + break; + + + +case "a": + + dump("open file for appending\n\n"); + + if(!path || !setMode){ + dump("Missing path or mode in arguments . . .\n\n"); + return; + } + + try{ + + dump("Closing any existing handles . . . \n\n"); + this.close(); + + this.fileInst = new FilePath(path); + + var fileExists = this.exists(path); + + if ( !fileExists ){ + dump("\n\nCreating new file "+path+"\n\n"); + this.fileInst.create(0, 0644); + fileExists=true; + } + + this.mode=16; + return; + + } + + + catch (error){ dump("**** ERROR:"+error+"\n\n"); } + break; + + + +case "r": + + dump("open file for reading\n\n"); + + if(!path){ + dump("Missing path argument . . . \n\n"); + return; + } + + dump("Closing any existing handles . . . \n\n"); + this.close(); + + try { + + this.fileInst = new FilePath(path); + this.fileChannel = new FileChannel(); + this.inputStream = new InputStream(); + + } + + catch (error){ dump("**** ERROR:"+error+"\n\n"); } + break; + + + default: + dump("\n\n**** WARNING: \""+setMode+"\" is an Invalid file mode\n\n"); + + } + +}, + +/********************* OPEN *****************************/ + + +/********************* WRITE ****************************/ + +write : function(buffer, perms){ + + if(!this.fileInst){ + dump("Please open a file handle first . . .\n"); + return; + } + + if(!buffer) + buffer = " "; + var buffSize = buffer.length; + + try{ + + if(!this.fileChannel) + this.fileChannel = new FileChannel(); + + if(perms){ + + var checkPerms = this.validatePermissions( perms ); + + if(!checkPerms){ + dump("**** Sorry invalid permissions set\n\n"); + return; + } + + } + + if(!perms) + perms=0644; + + dump("trying to initialize filechannel\n\n"); + + this.fileChannel.init(this.fileInst, this.mode, perms) + this.fileInst.permissions=perms; + + dump("initialized filechannel and set desired permissions\n\n"); + + + var fileSize = parseInt( this.fileInst.fileSize ); + dump("got initial file size = "+fileSize+"\n\n"); + + var outStream = this.fileChannel.openOutputStream(); + dump("got outStream\n\n"); + + + if( outStream.Write(buffer, buffSize) ) + dump("Write to file successful . . . \n\n"); + + outStream.Flush(); + + } + + catch (error){ dump("**** ERROR:"+error+"\n\n"); } + +}, + +/********************* WRITE ****************************/ + + +/********************* READ *****************************/ + +read : function() { + + try { + + if(!this.fileInst || !this.fileChannel || !this.inputStream){ + dump("Please open a valid file handle for reading . . .\n"); + return null; + } + + + var fileExists = this.exists(this.fileInst.path); + + if(!fileExists) { + dump("WARNING: \""+this.fileInst.path+"\" does not exist...\n"); + return; + } + + var offset = this.fileInst.fileSize; + var perm = this.fileInst.permissions; + + dump("PATH i am trying to read = " + this.fileInst.path + "\n"); + + this.fileChannel.init(this.fileInst, 1, perm); + + var inStream = this.fileChannel.openInputStream(); + + this.inputStream.init(inStream); + + var fileContents = this.inputStream.read(this.fileInst.fileSize); + + dump(fileContents); + + inStream.Close(); + + return fileContents; + + } + + catch (error){ dump("**** ERROR:"+error+"\n\n"); } + +}, + +/********************* READ *****************************/ + + + +/********************* MKDIR ****************************/ + +mkdir : function(path, permissions){ + + dump("Closing any existing handles . . . \n\n"); + this.close(); + + if(!path){ + dump("Missing path in argument . . .\n\n"); + return; + } + + var fileExists = this.exists(path); + + if(permissions){ + var checkPerms = this.validatePermissions(permissions); + + if(!checkPerms){ + dump("**** Sorry invalid permissions set\n\n"); + return; + } + + var baseTen = permissions.toString(10); + + if(baseTen.substring(0,1) != 0) + permissions = 0+baseTen; + + } + + + try{ + + this.fileInst = new FilePath(path); + + if (!fileExists){ + + if(!permissions) + permissions = 0755; + dump("\n\nCreating new Directory \""+path+"\"\n\n"); + this.fileInst.create( 1, parseInt(permissions) ); //*NOTE* permission 0777 doesn't seem to work here -pete + + } + + else{ dump("Sorry Directory "+path+" already exists\n\n"); } + + + } + + catch (error){ dump("**** ERROR:"+error+"\n\n"); } + + this.close(); + +}, + +/********************* MKDIR ****************************/ + +/********************* APPEND ***************************/ + +append : function (dirPath, fileName) { + + if(!dirPath || !fileName){ + dump("Missing path argument . . . \n\n"); + return; + } + + dump("\n\n**** Checking to see if the directory exists "+fileName+"****\n\n"); + this.exists(dirPath); + + try{ + + //if(!this.fileInst) + this.fileInst = new FilePath(dirPath); + + fileAppended = this.fileInst.append(fileName); + fileAppended = this.fileInst.path; + + } + + catch(error) { dump("**** ERROR:"+error+"\n\n"); } + + dump("File \""+dirPath+"\" appended = "+fileAppended+"\n\n"); + + return fileAppended; +}, + +/********************* APPEND ***************************/ + +/********************* VALIDATE PERMISSIONS *************/ + +validatePermissions : function(num){ + + dump("Checking for valid permission\n\n"); + + if ( parseInt(num.toString(10).length) < 3 ) + return false; + + return true; + +}, + +/********************* VALIDATE PERMISSIONS *************/ + +/********************* CLOSE ****************************/ + +close : function(){ + + /***************** Destroy Instances *********************/ + + dump("**** destroying any object instances ****\n\n"); + + if(this.fileInst) delete this.fileInst; + if(this.fileChannel) delete this.fileChannel; + if(this.inputStream) delete this.inputStream; + if(this.mode) this.mode=null; + + /***************** Destroy Instances *********************/ + + +} + +/********************* CLOSE ****************************/ + +}; + +////////////////// End File Object Class ///////////////////// + + +/************** Create an instance of file object *************/ + +//file = new File(); // commenting out for now, the user can initialize the object . . . + +/************** Create an instance of file object *************/ + + +