mirror of https://github.com/vitalif/phantomjs
Implement the plumbing for CommonJS System module support.
See http://wiki.commonjs.org/wiki/System. Based on the initial work from execjosh: https://github.com/ariya/phantomjs/pull/192 http://code.google.com/p/phantomjs/issues/detail?id=2701.5
parent
6e929f5fe2
commit
119e1ba516
|
@ -37,12 +37,14 @@ function require(name) {
|
|||
|
||||
var code, func, exports;
|
||||
|
||||
if (name === 'webpage' || name === 'fs' || name === 'webserver') {
|
||||
if (name === 'webpage' || name === 'fs' || name === 'webserver' | name === 'system') {
|
||||
code = phantom.loadModuleSource(name);
|
||||
func = new Function("exports", "window", code);
|
||||
exports = {};
|
||||
if (name === 'fs') {
|
||||
exports = phantom.createFilesystem();
|
||||
} else if (name === 'system') {
|
||||
exports = phantom.createSystem();
|
||||
}
|
||||
func.call({}, exports, {});
|
||||
return exports;
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
/*
|
||||
* CommonJS System/1.0
|
||||
* Spec: http://wiki.commonjs.org/wiki/System/1.0
|
||||
*/
|
||||
|
||||
exports.platform = 'phantomjs';
|
|
@ -42,6 +42,7 @@
|
|||
#include "webpage.h"
|
||||
#include "webserver.h"
|
||||
#include "repl.h"
|
||||
#include "system.h"
|
||||
|
||||
|
||||
// public:
|
||||
|
@ -50,6 +51,7 @@ Phantom::Phantom(QObject *parent)
|
|||
, m_terminated(false)
|
||||
, m_returnValue(0)
|
||||
, m_filesystem(0)
|
||||
, m_system(0)
|
||||
{
|
||||
// second argument: script name
|
||||
QStringList args = QApplication::arguments();
|
||||
|
@ -239,6 +241,14 @@ QObject *Phantom::createFilesystem()
|
|||
return m_filesystem;
|
||||
}
|
||||
|
||||
QObject *Phantom::createSystem()
|
||||
{
|
||||
if (!m_system)
|
||||
m_system = new System(this);
|
||||
|
||||
return m_system;
|
||||
}
|
||||
|
||||
QString Phantom::loadModuleSource(const QString &name)
|
||||
{
|
||||
QString moduleSource;
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "encoding.h"
|
||||
#include "config.h"
|
||||
#include "replcompletable.h"
|
||||
#include "system.h"
|
||||
|
||||
class WebPage;
|
||||
class WebServer;
|
||||
|
@ -77,6 +78,7 @@ public slots:
|
|||
QObject *createWebPage();
|
||||
QObject *createWebServer();
|
||||
QObject *createFilesystem();
|
||||
QObject *createSystem();
|
||||
QString loadModuleSource(const QString &name);
|
||||
bool injectJs(const QString &jsFilePath);
|
||||
|
||||
|
@ -102,6 +104,7 @@ private:
|
|||
QString m_script;
|
||||
QVariantMap m_defaultPageSettings;
|
||||
FileSystem *m_filesystem;
|
||||
System *m_system;
|
||||
QList<QPointer<WebPage> > m_pages;
|
||||
QList<QPointer<WebServer> > m_servers;
|
||||
Config m_config;
|
||||
|
|
|
@ -19,6 +19,7 @@ HEADERS += csconverter.h \
|
|||
networkaccessmanager.h \
|
||||
cookiejar.h \
|
||||
filesystem.h \
|
||||
system.h \
|
||||
terminal.h \
|
||||
encoding.h \
|
||||
config.h \
|
||||
|
@ -34,6 +35,7 @@ SOURCES += phantom.cpp \
|
|||
networkaccessmanager.cpp \
|
||||
cookiejar.cpp \
|
||||
filesystem.cpp \
|
||||
system.cpp \
|
||||
terminal.cpp \
|
||||
encoding.cpp \
|
||||
config.cpp \
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<file>modules/webpage.js</file>
|
||||
<file>modules/webserver.js</file>
|
||||
<file>modules/fs.js</file>
|
||||
<file>modules/system.js</file>
|
||||
<file>repl.js</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
This file is part of the PhantomJS project from Ofi Labs.
|
||||
|
||||
Copyright (C) 2012 execjosh, http://execjosh.blogspot.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.
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
||||
System::System(QObject *parent) :
|
||||
REPLCompletable(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void System::initCompletions()
|
||||
{
|
||||
addCompletion("platform");
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
This file is part of the PhantomJS project from Ofi Labs.
|
||||
|
||||
Copyright (C) 2012 execjosh, http://execjosh.blogspot.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.
|
||||
*/
|
||||
|
||||
#ifndef SYSTEM_H
|
||||
#define SYSTEM_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QStringList>
|
||||
#include <QVariantMap>
|
||||
#include <QTextStream>
|
||||
|
||||
#include "replcompletable.h"
|
||||
|
||||
// This class implements the CommonJS System/1.0 spec.
|
||||
// See: http://wiki.commonjs.org/wiki/System/1.0
|
||||
class System : public REPLCompletable
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit System(QObject *parent = 0);
|
||||
|
||||
private:
|
||||
virtual void initCompletions();
|
||||
};
|
||||
|
||||
#endif // SYSTEM_H
|
|
@ -63,6 +63,7 @@ phantom.injectJs("./fs-spec-01.js"); //< Filesystem Specs 01 (Basic)
|
|||
phantom.injectJs("./fs-spec-02.js"); //< Filesystem Specs 02 (Attributes)
|
||||
phantom.injectJs("./fs-spec-03.js"); //< Filesystem Specs 03 (Paths)
|
||||
phantom.injectJs("./fs-spec-04.js"); //< Filesystem Specs 04 (Tests)
|
||||
phantom.injectJs("./system-spec.js");
|
||||
|
||||
// Launch tests
|
||||
var jasmineEnv = jasmine.getEnv();
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
describe("System object", function() {
|
||||
var system = require('system');
|
||||
|
||||
it("should exist", function() {
|
||||
expect(typeof system).toEqual('object');
|
||||
expect(system).toNotEqual(null);
|
||||
});
|
||||
|
||||
it("should have platform as string", function() {
|
||||
expect(typeof system.platform).toEqual('string');
|
||||
});
|
||||
|
||||
it("should have platform set to 'phantomjs'", function() {
|
||||
expect(system.platform).toEqual('phantomjs');
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue