mirror of https://github.com/vitalif/phantomjs
Implement require('fs').
This is mostly based on Ivan's work, see https://github.com/ariya/phantomjs/pull/153 http://code.google.com/p/phantomjs/issues/detail?id=471.3
parent
67be09ec80
commit
6a79ea7e6d
|
@ -1,4 +1,5 @@
|
|||
# echoToFile.coffee - Write in a given file all the parameters passed on the CLI
|
||||
fs = require 'fs'
|
||||
|
||||
if phantom.args.length < 2
|
||||
console.log "Usage: echoToFile.js DESTINATION_FILE <arguments to echo...>"
|
||||
|
@ -15,4 +16,4 @@ else
|
|||
f.writeLine content
|
||||
catch e
|
||||
console.log e
|
||||
phantom.exit()
|
||||
phantom.exit()
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// echoToFile.js - Write in a given file all the parameters passed on the CLI
|
||||
var fs = require('fs');
|
||||
|
||||
if (phantom.args.length < 2) {
|
||||
console.log("Usage: echoToFile.js DESTINATION_FILE <arguments to echo...>");
|
||||
|
@ -18,4 +19,4 @@ if (phantom.args.length < 2) {
|
|||
}
|
||||
|
||||
phantom.exit();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ if phantom.args.length != 1
|
|||
console.log "Usage: phantomjs scandir.js DIRECTORY_TO_SCAN"
|
||||
phantom.exit()
|
||||
scanDirectory = (path) ->
|
||||
fs = require 'fs'
|
||||
if fs.exists(path) and fs.isFile(path)
|
||||
console.log path
|
||||
else if fs.isDirectory(path)
|
||||
|
@ -11,4 +12,4 @@ scanDirectory = (path) ->
|
|||
scanDirectory path + "/" + e if e != "." and e != ".."
|
||||
|
||||
scanDirectory phantom.args[0]
|
||||
phantom.exit()
|
||||
phantom.exit()
|
||||
|
|
|
@ -6,6 +6,7 @@ if (phantom.args.length !== 1) {
|
|||
}
|
||||
|
||||
var scanDirectory = function (path) {
|
||||
var fs = require('fs');
|
||||
if (fs.exists(path) && fs.isFile(path)) {
|
||||
console.log(path);
|
||||
} else if (fs.isDirectory(path)) {
|
||||
|
@ -17,4 +18,4 @@ var scanDirectory = function (path) {
|
|||
}
|
||||
};
|
||||
scanDirectory(phantom.args[0]);
|
||||
phantom.exit();
|
||||
phantom.exit();
|
||||
|
|
|
@ -0,0 +1,180 @@
|
|||
/*jslint sloppy: true, nomen: true */
|
||||
/*global window:true,phantom:true,fs:true */
|
||||
|
||||
/*
|
||||
This file is part of the PhantomJS project from Ofi Labs.
|
||||
|
||||
Copyright (C) 2011 Ivan De Marino <ivan.de.marino@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the <organization> nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
function require (name) {
|
||||
|
||||
var exports;
|
||||
|
||||
if (name === 'fs') {
|
||||
|
||||
exports = phantom.createFilesystem();
|
||||
|
||||
// JavaScript "shim" to throw exceptions in case a critical operation fails.
|
||||
|
||||
/** Open and return a "file" object.
|
||||
* It will throw exception if it fails.
|
||||
*
|
||||
* @param path Path of the file to open
|
||||
* @param mode Open Mode. A string made of 'r', 'w', 'a/+' characters.
|
||||
* @return "file" object
|
||||
*/
|
||||
exports.open = function (path, mode) {
|
||||
var file = exports._open(path, mode);
|
||||
if (file) {
|
||||
return file;
|
||||
}
|
||||
throw "Unable to open file '" + path + "'";
|
||||
};
|
||||
|
||||
/** Open, read and return content of a file.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param path Path of the file to read from
|
||||
* @return file content
|
||||
*/
|
||||
exports.read = function (path) {
|
||||
var f = fs.open(path, 'r'),
|
||||
content = f.read();
|
||||
|
||||
f.close();
|
||||
return content;
|
||||
};
|
||||
|
||||
/** Open and write content to a file
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param path Path of the file to read from
|
||||
* @param content Content to write to the file
|
||||
* @param mode Open Mode. A string made of 'w' or 'a / +' characters.
|
||||
*/
|
||||
exports.write = function (path, content, mode) {
|
||||
var f = fs.open(path, mode);
|
||||
|
||||
f.write(content);
|
||||
f.close();
|
||||
};
|
||||
|
||||
/** Return the size of a file, in bytes.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param path Path of the file to read the size of
|
||||
* @return File size in bytes
|
||||
*/
|
||||
exports.size = function (path) {
|
||||
var size = fs._size(path);
|
||||
if (size !== -1) {
|
||||
return size;
|
||||
}
|
||||
throw "Unable to read file '" + path + "' size";
|
||||
};
|
||||
|
||||
/** Copy a file.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param source Path of the source file
|
||||
* @param destination Path of the destination file
|
||||
*/
|
||||
exports.copy = function (source, destination) {
|
||||
if (!fs._copy(source, destination)) {
|
||||
throw "Unable to copy file '" + source + "' at '" + destination + "'";
|
||||
}
|
||||
};
|
||||
|
||||
/** Copy a directory tree.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param source Path of the source directory tree
|
||||
* @param destination Path of the destination directory tree
|
||||
*/
|
||||
exports.copyTree = function (source, destination) {
|
||||
if (!fs._copyTree(source, destination)) {
|
||||
throw "Unable to copy directory tree '" + source + "' at '" + destination + "'";
|
||||
}
|
||||
};
|
||||
|
||||
/** Move a file.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param source Path of the source file
|
||||
* @param destination Path of the destination file
|
||||
*/
|
||||
exports.move = function (source, destination) {
|
||||
fs.copy(source, destination);
|
||||
fs.remove(source);
|
||||
};
|
||||
|
||||
/** Removes a file.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param path Path of the file to remove
|
||||
*/
|
||||
exports.remove = function (path) {
|
||||
if (!fs._remove(path)) {
|
||||
throw "Unable to remove file '" + path + "'";
|
||||
}
|
||||
};
|
||||
|
||||
/** Removes a directory.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param path Path of the directory to remove
|
||||
*/
|
||||
exports.removeDirectory = function (path) {
|
||||
if (!fs._removeDirectory(path)) {
|
||||
throw "Unable to remove directory '" + path + "'";
|
||||
}
|
||||
};
|
||||
|
||||
/** Removes a directory tree.
|
||||
* It will throw an exception if it fails.
|
||||
*
|
||||
* @param path Path of the directory tree to remove
|
||||
*/
|
||||
exports.removeTree = function (path) {
|
||||
if (!fs._removeTree(path)) {
|
||||
throw "Unable to remove directory tree '" + path + "'";
|
||||
}
|
||||
};
|
||||
|
||||
exports.touch = function (path) {
|
||||
fs.write(path, "", 'a');
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
if (typeof exports === 'undefined') {
|
||||
throw 'Unknown module ' + name + ' for require()';
|
||||
}
|
||||
|
||||
return exports;
|
||||
}
|
||||
|
|
@ -110,12 +110,11 @@ Phantom::Phantom(QObject *parent)
|
|||
|
||||
// Add 'phantom' and 'fs' object to the global scope
|
||||
m_page->mainFrame()->addToJavaScriptWindowObject("phantom", this);
|
||||
m_page->mainFrame()->addToJavaScriptWindowObject("fs", &m_filesystem);
|
||||
|
||||
// Load all the required JavaScript 'shims'
|
||||
QString jsShims[2] = {
|
||||
":/webpage-shim.js",
|
||||
":/filesystem-shim.js"
|
||||
":/bootstrap.js",
|
||||
":/webpage-shim.js"
|
||||
};
|
||||
for (int i = 0, len = 2; i < len; ++i) {
|
||||
QFile f(jsShims[i]);
|
||||
|
@ -200,6 +199,11 @@ QObject *Phantom::createWebPage()
|
|||
return page;
|
||||
}
|
||||
|
||||
QObject *Phantom::createFilesystem()
|
||||
{
|
||||
return &m_filesystem;
|
||||
}
|
||||
|
||||
bool Phantom::injectJs(const QString &jsFilePath) {
|
||||
return Utils::injectJsInFrame(jsFilePath, libraryPath(), m_page->mainFrame());
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ public:
|
|||
|
||||
public slots:
|
||||
QObject *createWebPage();
|
||||
QObject *createFilesystem();
|
||||
bool injectJs(const QString &jsFilePath);
|
||||
void exit(int code = 0);
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ SOURCES += phantom.cpp \
|
|||
|
||||
OTHER_FILES += usage.txt \
|
||||
webpage-shim.js \
|
||||
filesystem-shim.js \
|
||||
bootstrap.js \
|
||||
configurator.js
|
||||
|
||||
include(gif/gif.pri)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<file>coffee-script.js</file>
|
||||
<file>usage.txt</file>
|
||||
<file>webpage-shim.js</file>
|
||||
<file>filesystem-shim.js</file>
|
||||
<file>bootstrap.js</file>
|
||||
<file>configurator.js</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -54,6 +54,7 @@ function expectHasPropertyString(o, name) {
|
|||
}
|
||||
|
||||
// Load specs
|
||||
var fs = require('fs');
|
||||
phantom.injectJs("./phantom-spec.js");
|
||||
phantom.injectJs("./webpage-spec.js");
|
||||
phantom.injectJs("./fs-spec-01.js"); //< Filesystem Specs 01 (Basic)
|
||||
|
|
Loading…
Reference in New Issue