mirror of https://github.com/vitalif/phantomjs
Filesystem API: added the "Attributes" API group from CommonJS/Filesystem definition
* Tests for this new API are also provided * The 'fs.size()' method is implemented with a shim in 'bootstrap.js' to cover the exception throwing behaviour1.3
parent
5adc92aec0
commit
512ff9658e
|
@ -133,3 +133,17 @@ window.fs.write = function(path, content, mode) {
|
||||||
f.write(content);
|
f.write(content);
|
||||||
f.close();
|
f.close();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Return the size of a file, in bytes.
|
||||||
|
* It will throw an exception if it fails.
|
||||||
|
*
|
||||||
|
* @param path Path fo the file to read the size of
|
||||||
|
* @return File size in bytes
|
||||||
|
*/
|
||||||
|
window.fs.size = function(path) {
|
||||||
|
var size = fs._size(path);
|
||||||
|
if (size !== -1) {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
throw "Unable to read file '"+ path +"' size";
|
||||||
|
};
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
// File
|
// File
|
||||||
// public:
|
// public:
|
||||||
|
@ -121,6 +122,26 @@ FileSystem::FileSystem(QObject *parent) :
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// public slots:
|
// public slots:
|
||||||
|
|
||||||
|
// Attributes
|
||||||
|
int FileSystem::_size(const QString &path) const
|
||||||
|
{
|
||||||
|
QFileInfo fi(path);
|
||||||
|
if (fi.exists()) {
|
||||||
|
return fi.size();
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant FileSystem::lastModified(const QString &path) const
|
||||||
|
{
|
||||||
|
QFileInfo fi(path);
|
||||||
|
if (fi.exists()) {
|
||||||
|
return QVariant(fi.lastModified());
|
||||||
|
}
|
||||||
|
return QVariant(QDateTime());
|
||||||
|
}
|
||||||
|
|
||||||
bool FileSystem::exists(const QString &path) const
|
bool FileSystem::exists(const QString &path) const
|
||||||
{
|
{
|
||||||
return QFile::exists(path);
|
return QFile::exists(path);
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
class File : public QObject
|
class File : public QObject
|
||||||
{
|
{
|
||||||
|
@ -71,8 +72,9 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
// Attributes
|
// Attributes
|
||||||
// - int size(const QString &path) const; //< TODO - in bytes, or throw excep if doesn't exists
|
// 'size(path)' implemented in "bootstrap.js" JavaScript shim, using '_size(path)'
|
||||||
// - QDateTime lastModified(const QString &path) const; //< TODO - returns the time that a file was last modified as a Date object.
|
int _size(const QString &path) const;
|
||||||
|
QVariant lastModified(const QString &path) const;
|
||||||
|
|
||||||
// Files / Directories
|
// Files / Directories
|
||||||
// - copy()
|
// - copy()
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
describe("Attributes Files API", function() {
|
||||||
|
var FILENAME = "temp-02.test",
|
||||||
|
CONTENT = "This is a test for PhantomJS, an awesome headless browser to do all sort of stuff :) ",
|
||||||
|
CONTENT_MULTIPLIER = 1024,
|
||||||
|
ABSENT = "absent-02.test";
|
||||||
|
|
||||||
|
it("should throw an exception when trying to read the size of a non existing file", function(){
|
||||||
|
expect(function(){
|
||||||
|
fs.size(ABSENT, "r");
|
||||||
|
}).toThrow("Unable to read file '"+ ABSENT +"' size");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return a null Date object when trying to read the last modified date of a non existing file", function(){
|
||||||
|
expect(fs.lastModified(ABSENT)).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should create temporary file '"+ FILENAME +"' and writes some content in it", function(){
|
||||||
|
try{
|
||||||
|
var f = fs.open(FILENAME, "w");
|
||||||
|
|
||||||
|
expect(f).toBeDefined();
|
||||||
|
for (var i = 1; i <= CONTENT_MULTIPLIER; ++i) {
|
||||||
|
f.write(CONTENT);
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
} catch (e) { }
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to read the size of a temporary file '"+ FILENAME +"'", function() {
|
||||||
|
expect(fs.size(FILENAME)).toEqual(CONTENT.length * CONTENT_MULTIPLIER);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be able to read the Date on which a temporary file '"+ FILENAME +"' was last modified", function() {
|
||||||
|
var flm = fs.lastModified(FILENAME),
|
||||||
|
now = new Date();
|
||||||
|
|
||||||
|
expect(now.getDay()).toEqual(flm.getDay());
|
||||||
|
expect(now.getMonth()).toEqual(flm.getMonth());
|
||||||
|
expect(now.getFullYear()).toEqual(flm.getFullYear());
|
||||||
|
expect(now.getMilliseconds()).toNotEqual(flm.getMilliseconds());
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should remove temporary file '"+ FILENAME +"'", function(){
|
||||||
|
expect(fs.remove(FILENAME)).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
|
@ -3,7 +3,8 @@ phantom.injectJs("./lib/jasmine.js");
|
||||||
phantom.injectJs("./lib/jasmine-console.js");
|
phantom.injectJs("./lib/jasmine-console.js");
|
||||||
|
|
||||||
// Load specs
|
// Load specs
|
||||||
phantom.injectJs("./fs-spec-01.js"); //< Filesystem Specs 01
|
phantom.injectJs("./fs-spec-01.js"); //< Filesystem Specs 01 (Basic)
|
||||||
|
phantom.injectJs("./fs-spec-02.js"); //< Filesystem Specs 02 (Attributes)
|
||||||
|
|
||||||
// Launch tests
|
// Launch tests
|
||||||
var jasmineEnv = jasmine.getEnv();
|
var jasmineEnv = jasmine.getEnv();
|
||||||
|
@ -11,7 +12,7 @@ var jasmineEnv = jasmine.getEnv();
|
||||||
// Add a ConsoleReporter to 1) print with colors on the console 2) exit when finished
|
// Add a ConsoleReporter to 1) print with colors on the console 2) exit when finished
|
||||||
jasmineEnv.addReporter(new jasmine.ConsoleReporter(function(msg){
|
jasmineEnv.addReporter(new jasmine.ConsoleReporter(function(msg){
|
||||||
// Print messages straight to the console
|
// Print messages straight to the console
|
||||||
console.log(msg);
|
console.log(msg.replace('\n', ''));
|
||||||
}, function(reporter){
|
}, function(reporter){
|
||||||
// On complete
|
// On complete
|
||||||
phantom.exit();
|
phantom.exit();
|
||||||
|
|
Loading…
Reference in New Issue