Skip to content
This repository has been archived by the owner on May 30, 2023. It is now read-only.

Commit

Permalink
Implement the plumbing for CommonJS System module support.
Browse files Browse the repository at this point in the history
  • Loading branch information
ariya committed Mar 15, 2012
1 parent 6e929f5 commit 119e1ba
Show file tree
Hide file tree
Showing 10 changed files with 135 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -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') {

This comment has been minimized.

Copy link
@n1k0

n1k0 Mar 15, 2012

Contributor

you probably meant || name === 'system' :)

This comment has been minimized.

Copy link
@ariya

ariya Mar 15, 2012

Author Owner

Good catch! Thanks.

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;
Expand Down
6 changes: 6 additions & 0 deletions src/modules/system.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/*
* CommonJS System/1.0
* Spec: http://wiki.commonjs.org/wiki/System/1.0
*/

exports.platform = 'phantomjs';
10 changes: 10 additions & 0 deletions src/phantom.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#include "webpage.h"
#include "webserver.h"
#include "repl.h"
#include "system.h"


// public:
Expand All @@ -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();
Expand Down Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions src/phantom.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "encoding.h"
#include "config.h"
#include "replcompletable.h"
#include "system.h"

class WebPage;
class WebServer;
Expand Down Expand Up @@ -77,6 +78,7 @@ public slots:
QObject *createWebPage();
QObject *createWebServer();
QObject *createFilesystem();
QObject *createSystem();
QString loadModuleSource(const QString &name);
bool injectJs(const QString &jsFilePath);

Expand All @@ -102,6 +104,7 @@ private slots:
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;
Expand Down
2 changes: 2 additions & 0 deletions src/phantomjs.pro
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ HEADERS += csconverter.h \
networkaccessmanager.h \
cookiejar.h \
filesystem.h \
system.h \
terminal.h \
encoding.h \
config.h \
Expand All @@ -34,6 +35,7 @@ SOURCES += phantom.cpp \
networkaccessmanager.cpp \
cookiejar.cpp \
filesystem.cpp \
system.cpp \
terminal.cpp \
encoding.cpp \
config.cpp \
Expand Down
1 change: 1 addition & 0 deletions src/phantomjs.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -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>
40 changes: 40 additions & 0 deletions src/system.cpp
Original file line number Diff line number Diff line change
@@ -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");
}
53 changes: 53 additions & 0 deletions src/system.h
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions test/run-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
16 changes: 16 additions & 0 deletions test/system-spec.js
Original file line number Diff line number Diff line change
@@ -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');
});
});

0 comments on commit 119e1ba

Please sign in to comment.