mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-21 07:58:04 +03:00
Remove references to OSX from fs.coffee and make fs specs pass.
This commit is contained in:
parent
3ea7f4d4d3
commit
8cbf4331e4
@ -10,7 +10,7 @@ NSString *stringFromCefV8Value(const CefRefPtr<CefV8Value>& value) {
|
|||||||
NativeHandler::NativeHandler() : CefV8Handler() {
|
NativeHandler::NativeHandler() : CefV8Handler() {
|
||||||
m_object = CefV8Value::CreateObject(NULL);
|
m_object = CefV8Value::CreateObject(NULL);
|
||||||
|
|
||||||
const char *functionNames[] = {"exists", "read", "absolute", "list", "isFile", "isDirectory", "remove", "open", "terminate"};
|
const char *functionNames[] = {"exists", "read", "write", " absolute", "list", "isFile", "isDirectory", "remove", "asyncList", "open", "quit"};
|
||||||
NSUInteger arrayLength = sizeof(functionNames) / sizeof(const char *);
|
NSUInteger arrayLength = sizeof(functionNames) / sizeof(const char *);
|
||||||
for (NSUInteger i = 0; i < arrayLength; i++) {
|
for (NSUInteger i = 0; i < arrayLength; i++) {
|
||||||
const char *functionName = functionNames[i];
|
const char *functionName = functionNames[i];
|
||||||
@ -48,6 +48,23 @@ bool NativeHandler::Execute(const CefString& name,
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (name == "write") {
|
||||||
|
NSString *path = stringFromCefV8Value(arguments[0]);
|
||||||
|
NSString *content = stringFromCefV8Value(arguments[1]);
|
||||||
|
|
||||||
|
|
||||||
|
NSError *error = nil;
|
||||||
|
BOOL success = [content writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
exception = [[error localizedDescription] UTF8String];
|
||||||
|
}
|
||||||
|
else if (!success) {
|
||||||
|
std::string exception = "Cannot write to '";
|
||||||
|
exception += [path UTF8String];
|
||||||
|
exception += "'";
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (name == "absolute") {
|
else if (name == "absolute") {
|
||||||
NSString *path = stringFromCefV8Value(arguments[0]);
|
NSString *path = stringFromCefV8Value(arguments[0]);
|
||||||
|
|
||||||
@ -96,15 +113,6 @@ bool NativeHandler::Execute(const CefString& name,
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (name == "isFile") {
|
|
||||||
NSString *path = stringFromCefV8Value(arguments[0]);
|
|
||||||
|
|
||||||
BOOL isDir = false;
|
|
||||||
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir];
|
|
||||||
retval = CefV8Value::CreateBool(exists && !isDir);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (name == "remove") {
|
else if (name == "remove") {
|
||||||
NSString *path = stringFromCefV8Value(arguments[0]);
|
NSString *path = stringFromCefV8Value(arguments[0]);
|
||||||
|
|
||||||
@ -117,6 +125,41 @@ bool NativeHandler::Execute(const CefString& name,
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (name == "asyncList") {
|
||||||
|
NSString *path = stringFromCefV8Value(arguments[0]);
|
||||||
|
bool recursive = arguments[1]->GetBoolValue();
|
||||||
|
|
||||||
|
NSFileManager *fm = [NSFileManager defaultManager];
|
||||||
|
NSArray *relativePaths = [NSArray array];
|
||||||
|
NSError *error = nil;
|
||||||
|
|
||||||
|
if (recursive) {
|
||||||
|
relativePaths = [fm subpathsOfDirectoryAtPath:path error:&error];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
relativePaths = [fm contentsOfDirectoryAtPath:path error:&error];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
exception = [[error localizedDescription] UTF8String];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CefRefPtr<CefV8Value> paths = CefV8Value::CreateArray();
|
||||||
|
for (NSUInteger i = 0; i < relativePaths.count; i++) {
|
||||||
|
NSString *relativePath = [relativePaths objectAtIndex:i];
|
||||||
|
NSString *fullPath = [path stringByAppendingPathComponent:relativePath];
|
||||||
|
paths->SetValue(i, CefV8Value::CreateString([fullPath UTF8String]));
|
||||||
|
}
|
||||||
|
|
||||||
|
CefV8ValueList args;
|
||||||
|
args.push_back(paths);
|
||||||
|
CefRefPtr<CefV8Exception> e;
|
||||||
|
arguments[2]->ExecuteFunction(arguments[2], args, retval, e, true);
|
||||||
|
exception = e->GetMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if (name == "open") {
|
else if (name == "open") {
|
||||||
NSString *path = stringFromCefV8Value(arguments[0]);
|
NSString *path = stringFromCefV8Value(arguments[0]);
|
||||||
[NSApp open:path];
|
[NSApp open:path];
|
||||||
|
@ -8,7 +8,7 @@ describe "Project", ->
|
|||||||
|
|
||||||
describe ".getFilePaths()", ->
|
describe ".getFilePaths()", ->
|
||||||
it "returns a promise which resolves to a list of all file urls in the project, recursively", ->
|
it "returns a promise which resolves to a list of all file urls in the project, recursively", ->
|
||||||
expectedPaths = (url.replace(project.url, '') for url in fs.list(project.url, true) when fs.isFile url)
|
expectedPaths = (url.replace(project.url, '') for url in fs.listTree(project.url) when fs.isFile url)
|
||||||
|
|
||||||
waitsForPromise ->
|
waitsForPromise ->
|
||||||
project.getFilePaths().done (result) ->
|
project.getFilePaths().done (result) ->
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
fs = require 'fs'
|
fs = require 'fs'
|
||||||
require 'spec-helper'
|
require 'spec-helper'
|
||||||
|
|
||||||
require path for path in fs.listDirectoryTree($atom.loadPath + "/spec") when /-spec\.coffee$/.test path
|
require path for path in fs.listTree($atom.loadPath + "/spec") when /-spec\.coffee$/.test path
|
||||||
|
@ -19,19 +19,19 @@ describe "fs", ->
|
|||||||
expect(fs.join('a', 'b/c/', 'd/')).toBe 'a/b/c/d/'
|
expect(fs.join('a', 'b/c/', 'd/')).toBe 'a/b/c/d/'
|
||||||
|
|
||||||
describe ".async", ->
|
describe ".async", ->
|
||||||
describe ".listFiles(directoryPath, recursive)", ->
|
directoryPath = null
|
||||||
directoryPath = null
|
beforeEach ->
|
||||||
beforeEach -> directoryPath = require.resolve 'fixtures/dir'
|
directoryPath = require.resolve 'fixtures/dir'
|
||||||
|
|
||||||
describe "when recursive is true", ->
|
describe ".listTree(directoryPath)", ->
|
||||||
it "returns a promise that resolves to the recursive contents of that directory that are files", ->
|
it "returns a promise that resolves to the recursive contents of that directory", ->
|
||||||
waitsForPromise ->
|
waitsForPromise ->
|
||||||
fs.async.listFiles(directoryPath, true).done (result) ->
|
fs.async.listTree(directoryPath).done (result) ->
|
||||||
expect(result).toEqual (path for path in fs.list(directoryPath, true) when fs.isFile(path))
|
expect(result).toEqual fs.listTree(directoryPath)
|
||||||
|
|
||||||
describe "when recursive is false", ->
|
describe ".listFiles(directoryPath)", ->
|
||||||
it "returns a promise that resolves to the contents of that directory that are files", ->
|
it "returns a promise that resolves to the contents of that directory", ->
|
||||||
waitsForPromise ->
|
waitsForPromise ->
|
||||||
fs.async.listFiles(directoryPath).done (result) ->
|
fs.async.listFiles(directoryPath).done (result) ->
|
||||||
expect(result).toEqual (path for path in fs.list(directoryPath) when fs.isFile(path))
|
expect(result).toEqual fs.list(directoryPath)
|
||||||
|
|
||||||
|
@ -21,10 +21,10 @@ module.exports =
|
|||||||
# Return the dirname of the given path. That is the path with any trailing
|
# Return the dirname of the given path. That is the path with any trailing
|
||||||
# non-directory component removed.
|
# non-directory component removed.
|
||||||
directory: (path) ->
|
directory: (path) ->
|
||||||
if @isDirectory(absPath)
|
if @isDirectory(path)
|
||||||
absPath.replace(/\/?$/, '/')
|
path.replace(/\/?$/, '/')
|
||||||
else
|
else
|
||||||
absPath.replace(new RegExp("/#{@base(path)}$"), '/')
|
path.replace(new RegExp("/#{@base(path)}$"), '/')
|
||||||
|
|
||||||
# Returns true if the file specified by path exists
|
# Returns true if the file specified by path exists
|
||||||
exists: (path) ->
|
exists: (path) ->
|
||||||
@ -43,19 +43,14 @@ module.exports =
|
|||||||
# Returns true if the file specified by path exists and is a
|
# Returns true if the file specified by path exists and is a
|
||||||
# regular file.
|
# regular file.
|
||||||
isFile: (path) ->
|
isFile: (path) ->
|
||||||
$native.isFile path
|
not $native.isDirectory path
|
||||||
|
|
||||||
# Returns an array with all the names of files contained
|
# Returns an array with all the names of files contained
|
||||||
# in the directory path.
|
# in the directory path.
|
||||||
list: (path) ->
|
list: (path) ->
|
||||||
$native.list(path, false)
|
$native.list(path, false)
|
||||||
|
|
||||||
# Returns an Array that starts with the given directory, and all the
|
listTree: (path) ->
|
||||||
# directories relative to the given path, discovered by a depth first
|
|
||||||
# traversal of every directory in any visited directory, not traversing
|
|
||||||
# symbolic links to directories, in lexically sorted order within
|
|
||||||
# directories.
|
|
||||||
listDirectoryTree: (path) ->
|
|
||||||
$native.list(path, true)
|
$native.list(path, true)
|
||||||
|
|
||||||
# Remove a file at the given path. Throws an error if path is not a
|
# Remove a file at the given path. Throws an error if path is not a
|
||||||
@ -69,14 +64,18 @@ module.exports =
|
|||||||
|
|
||||||
# Open, write, flush, and close a file, writing the given content.
|
# Open, write, flush, and close a file, writing the given content.
|
||||||
write: (path, content) ->
|
write: (path, content) ->
|
||||||
str = OSX.NSString.stringWithUTF8String content
|
$native.write(path, content)
|
||||||
enc = OSX.NSUTF8StringEncoding
|
|
||||||
str.writeToFile_atomically_encoding_error path, true, enc, null
|
|
||||||
|
|
||||||
async:
|
async:
|
||||||
listFiles: (path, recursive) ->
|
listFiles: (path) ->
|
||||||
deferred = $.Deferred()
|
deferred = $.Deferred()
|
||||||
$atomController.fs.listFilesAtPath_recursive_onComplete path, recursive, (subpaths) ->
|
$native.asyncList path, false, (subpaths) ->
|
||||||
|
deferred.resolve subpaths
|
||||||
|
deferred
|
||||||
|
|
||||||
|
listTree: (path) ->
|
||||||
|
deferred = $.Deferred()
|
||||||
|
$native.asyncList path, true, (subpaths) ->
|
||||||
deferred.resolve subpaths
|
deferred.resolve subpaths
|
||||||
deferred
|
deferred
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user