goog.testing.fs.directoryentry_test.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of google-closure-library
Show all versions of google-closure-library
The Google Closure Library is a collection of JavaScript code
designed for use with the Google Closure JavaScript Compiler.
This non-official distribution was prepared by the ClojureScript
team at http://clojure.org/
// Copyright 2011 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
goog.provide('goog.testing.fs.DirectoryEntryTest');
goog.setTestOnly('goog.testing.fs.DirectoryEntryTest');
goog.require('goog.array');
goog.require('goog.fs.DirectoryEntry');
goog.require('goog.fs.Error');
goog.require('goog.testing.MockClock');
goog.require('goog.testing.TestCase');
goog.require('goog.testing.fs.FileSystem');
goog.require('goog.testing.jsunit');
var Behavior = goog.fs.DirectoryEntry.Behavior;
var fs, dir, mockClock;
function setUpPage() {
// This test has a tendency to timeout on external Travis testing
// infrastructure. Up to 5s from 1s.
goog.testing.TestCase.getActiveTestCase().promiseTimeout = 5000;
}
function setUp() {
// Install the MockClock to create predictable timestamps for new files.
mockClock = new goog.testing.MockClock(true);
fs = new goog.testing.fs.FileSystem();
dir = fs.getRoot().createDirectorySync('foo');
dir.createDirectorySync('subdir').createFileSync('subfile');
dir.createFileSync('file');
mockClock.uninstall();
}
function testIsFile() {
assertFalse(dir.isFile());
}
function testIsDirectory() {
assertTrue(dir.isDirectory());
}
function testRemoveWithChildren() {
dir.getFileSync('bar', Behavior.CREATE);
return dir.remove().then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.INVALID_MODIFICATION, e.code);
});
}
function testRemoveWithoutChildren() {
var emptyDir = dir.getDirectorySync('empty', Behavior.CREATE);
return emptyDir.remove().then(function() {
assertTrue(emptyDir.deleted);
assertFalse(fs.getRoot().hasChild('empty'));
});
}
function testRemoveRootRecursively() {
var root = fs.getRoot();
return root.removeRecursively().then(function() {
assertTrue(dir.deleted);
assertFalse(fs.getRoot().deleted);
});
}
function testGetFile() {
return dir.getFile('file')
.then(function(file) {
assertEquals(dir.getFileSync('file'), file);
assertEquals('file', file.getName());
assertEquals('/foo/file', file.getFullPath());
assertTrue(file.isFile());
return dir.getLastModified();
})
.then(function(date) {
assertEquals(
'Reading a file should not update the modification date.', 0,
date.getTime());
return dir.getMetadata();
})
.then(function(metadata) {
assertEquals(
'Reading a file should not update the metadata.', 0,
metadata.modificationTime.getTime());
});
}
function testGetFileFromSubdir() {
return dir.getFile('subdir/subfile').then(function(file) {
assertEquals(dir.getDirectorySync('subdir').getFileSync('subfile'), file);
assertEquals('subfile', file.getName());
assertEquals('/foo/subdir/subfile', file.getFullPath());
assertTrue(file.isFile());
});
}
function testGetAbsolutePaths() {
return fs.getRoot()
.getFile('/foo/subdir/subfile')
.then(function(subfile) {
assertEquals('/foo/subdir/subfile', subfile.getFullPath());
return fs.getRoot().getDirectory('//foo////');
})
.then(function(foo) {
assertEquals('/foo', foo.getFullPath());
return foo.getDirectory('/');
})
.then(function(root) {
assertEquals('/', root.getFullPath());
return root.getDirectory('/////');
})
.then(function(root) { assertEquals('/', root.getFullPath()); });
}
function testCreateFile() {
// Advance the clock to an arbitrary, known time.
mockClock.install();
mockClock.tick(43);
var promise =
dir.getLastModified()
.then(function(date) { assertEquals(0, date.getTime()); })
.then(function() { return dir.getFile('bar', Behavior.CREATE); })
.then(function(file) {
mockClock.tick();
assertEquals('bar', file.getName());
assertEquals('/foo/bar', file.getFullPath());
assertEquals(dir, file.parent);
assertTrue(file.isFile());
return dir.getLastModified();
})
.then(function(date) {
assertEquals(43, date.getTime());
return dir.getMetadata();
})
.then(function(metadata) {
assertEquals(43, metadata.modificationTime.getTime());
})
.thenAlways(function() { mockClock.uninstall(); });
mockClock.tick();
return promise;
}
function testCreateFileThatAlreadyExists() {
mockClock.install();
mockClock.tick(47);
var existingFile = dir.getFileSync('file');
var promise = dir.getFile('file', Behavior.CREATE)
.then(function(file) {
assertEquals('file', file.getName());
assertEquals('/foo/file', file.getFullPath());
assertEquals(dir, file.parent);
assertEquals(existingFile, file);
assertTrue(file.isFile());
return dir.getLastModified();
})
.then(function(date) {
assertEquals(47, date.getTime());
return dir.getMetadata();
})
.then(function(metadata) {
assertEquals(47, metadata.modificationTime.getTime());
})
.thenAlways(function() { mockClock.uninstall(); });
mockClock.tick();
return promise;
}
function testCreateFileInSubdir() {
return dir.getFile('subdir/bar', Behavior.CREATE).then(function(file) {
assertEquals('bar', file.getName());
assertEquals('/foo/subdir/bar', file.getFullPath());
assertEquals(dir.getDirectorySync('subdir'), file.parent);
assertTrue(file.isFile());
});
}
function testCreateFileExclusive() {
return dir.getFile('bar', Behavior.CREATE_EXCLUSIVE).then(function(file) {
assertEquals('bar', file.getName());
assertEquals('/foo/bar', file.getFullPath());
assertEquals(dir, file.parent);
assertTrue(file.isFile());
});
}
function testGetNonExistentFile() {
return dir.getFile('bar').then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.NOT_FOUND, e.code);
});
}
function testGetNonExistentFileInSubdir() {
return dir.getFile('subdir/bar').then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.NOT_FOUND, e.code);
});
}
function testGetFileInNonExistentSubdir() {
return dir.getFile('bar/subfile').then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.NOT_FOUND, e.code);
});
}
function testGetFileThatsActuallyADirectory() {
return dir.getFile('subdir').then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.TYPE_MISMATCH, e.code);
});
}
function testCreateFileInNonExistentSubdir() {
return dir.getFile('bar/newfile', Behavior.CREATE).then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.NOT_FOUND, e.code);
});
}
function testCreateFileThatsActuallyADirectory() {
return dir.getFile('subdir', Behavior.CREATE).then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.TYPE_MISMATCH, e.code);
});
}
function testCreateExclusiveExistingFile() {
return dir.getFile('file', Behavior.CREATE_EXCLUSIVE).then(fail, function(e) {
assertEquals(goog.fs.Error.ErrorCode.INVALID_MODIFICATION, e.code);
});
}
function testListEmptyDirectory() {
var emptyDir = fs.getRoot().getDirectorySync('empty', Behavior.CREATE);
return emptyDir.listDirectory().then(function(entryList) {
assertSameElements([], entryList);
});
}
function testListDirectory() {
var root = fs.getRoot();
root.getDirectorySync('dir1', Behavior.CREATE);
root.getDirectorySync('dir2', Behavior.CREATE);
root.getFileSync('file1', Behavior.CREATE);
root.getFileSync('file2', Behavior.CREATE);
return fs.getRoot().listDirectory().then(function(entryList) {
assertSameElements(
['dir1', 'dir2', 'file1', 'file2', 'foo'],
goog.array.map(entryList, function(entry) { return entry.getName(); }));
});
}
function testCreatePath() {
return dir.createPath('baz/bat')
.then(function(batDir) {
assertEquals('/foo/baz/bat', batDir.getFullPath());
return batDir.createPath('../zazzle');
})
.then(function(zazzleDir) {
assertEquals('/foo/baz/zazzle', zazzleDir.getFullPath());
return zazzleDir.createPath('/elements/actinides/neptunium/');
})
.then(function(elDir) {
assertEquals('/elements/actinides/neptunium', elDir.getFullPath());
});
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy