diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..8e08f2d2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: node +branches: + only: + - master diff --git a/test/basename.test.js b/test/basename.test.js new file mode 100644 index 00000000..54feb632 --- /dev/null +++ b/test/basename.test.js @@ -0,0 +1,45 @@ +import {basename} from '../lib/index' + +describe('basename', function() { + it('Returns the nothing if no file name given', function() { + expect(basename('')).toEqual(''); + }); + it('Returns the nothing if dir is root', function() { + expect(basename('/')).toEqual(''); + }); + it('Returns the same name if no path given', function() { + expect(basename('some name.txt')).toEqual('some name.txt'); + }); + it('Returns the base name if root path given', function() { + expect(basename('/some name.txt')).toEqual('some name.txt'); + }); + it('Returns the base name if double root path given', function() { + expect(basename('//some name.txt')).toEqual('some name.txt'); + }); + it('Returns the base name if subdir given without root', function() { + expect(basename('subdir/some name.txt')).toEqual('some name.txt'); + }); + it('Returns the base name if subdir given with root', function() { + expect(basename('/subdir/some name.txt')).toEqual('some name.txt'); + }); + it('Returns the base name if subdir given with double root', function() { + expect(basename('//subdir/some name.txt')).toEqual('some name.txt'); + }); + it('Returns the base name if subdir has dot', function() { + expect(basename('/subdir.dat/some name.txt')).toEqual('some name.txt'); + }); + it('Returns dot if file name is dot', function() { + expect(basename('/subdir/.')).toEqual('.'); + }); + // TODO: fix the source to make it work like PHP's basename + it('Returns the dir itself if no file name given', function() { + // TODO: fix the source to make it work like PHP's dirname + // expect(basename('subdir/')).toEqual('subdir'); + expect(basename('subdir/')).toEqual(''); + }); + it('Returns the dir itself if no file name given with root', function() { + // TODO: fix the source to make it work like PHP's dirname + // expect(basename('/subdir/')).toEqual('subdir'); + expect(basename('/subdir/')).toEqual(''); + }); +}); diff --git a/test/dirname.test.js b/test/dirname.test.js new file mode 100644 index 00000000..fdcbf03a --- /dev/null +++ b/test/dirname.test.js @@ -0,0 +1,56 @@ +import {dirname} from '../lib/index' + +describe('dirname', function() { + it('Returns the nothing if no file name given', function() { + expect(dirname('')).toEqual(''); + }); + it('Returns the root if dir is root', function() { + // TODO: fix the source to make it work like PHP's dirname + // expect(dirname('/')).toEqual('/'); + expect(dirname('/')).toEqual(''); + }); + it('Returns the root if dir is double root', function() { + // TODO: fix the source to make it work like PHP's dirname + // expect(dirname('//')).toEqual('/'); + expect(dirname('//')).toEqual('/'); // oh no... + }); + it('Returns dot if dir is dot', function() { + expect(dirname('.')).toEqual('.'); + }); + it('Returns dot if no root given', function() { + // TODO: fix the source to make it work like PHP's dirname + // expect(dirname('some dir')).toEqual('.'); + expect(dirname('some dir')).toEqual('some dir'); // oh no... + }); + it('Returns the dir name if file name and root path given', function() { + // TODO: fix the source to make it work like PHP's dirname + // expect(dirname('/some name.txt')).toEqual('/'); + expect(dirname('/some name.txt')).toEqual(''); + }); + it('Returns the dir name if double root path given', function() { + expect(dirname('//some name.txt')).toEqual('/'); // how lucky... + }); + it('Returns the dir name if subdir given without root', function() { + expect(dirname('subdir/some name.txt')).toEqual('subdir'); + }); + it('Returns the dir name if subdir given with root', function() { + expect(dirname('/subdir/some name.txt')).toEqual('/subdir'); + }); + it('Returns the dir name if subdir given with double root', function() { + // TODO: fix the source to make it work like PHP's dirname + // expect(dirname('//subdir/some name.txt')).toEqual('/subdir'); + expect(dirname('//subdir/some name.txt')).toEqual('//subdir'); // oh... + }); + it('Returns the dir name if subdir has dot', function() { + expect(dirname('/subdir.dat/some name.txt')).toEqual('/subdir.dat'); + }); + it('Returns the dir name if file name is dot', function() { + expect(dirname('/subdir/.')).toEqual('/subdir'); + }); + it('Returns the dir name if no file name given', function() { + expect(dirname('subdir/')).toEqual('subdir'); + }); + it('Returns the dir name if no file name given with root', function() { + expect(dirname('/subdir/')).toEqual('/subdir'); + }); +}); diff --git a/test/isSamePath.test.js b/test/isSamePath.test.js new file mode 100644 index 00000000..43bd8350 --- /dev/null +++ b/test/isSamePath.test.js @@ -0,0 +1,67 @@ +import {isSamePath} from '../lib/index' + +describe('isSamePath', function() { + it('recognizes empty paths are equal', function() { + expect(isSamePath('', '')).toEqual(true); + expect(isSamePath('/', '')).toEqual(true); + expect(isSamePath('//', '')).toEqual(true); + expect(isSamePath('/', '/')).toEqual(true); + expect(isSamePath('/', '//')).toEqual(true); + }); + it('recognizes path with single sections as equal regardless of extra slashes', function() { + expect(isSamePath('abc', 'abc')).toEqual(true); + expect(isSamePath('/abc', 'abc')).toEqual(true); + expect(isSamePath('//abc', 'abc')).toEqual(true); + expect(isSamePath('abc', '/abc')).toEqual(true); + expect(isSamePath('abc/', 'abc')).toEqual(true); + expect(isSamePath('abc/', 'abc/')).toEqual(true); + expect(isSamePath('/abc/', 'abc/')).toEqual(true); + expect(isSamePath('/abc/', '/abc/')).toEqual(true); + expect(isSamePath('//abc/', '/abc/')).toEqual(true); + expect(isSamePath('//abc//', '/abc/')).toEqual(true); + + expect(isSamePath('abc', 'def')).toEqual(false); + expect(isSamePath('/abc', 'def')).toEqual(false); + expect(isSamePath('//abc', 'def')).toEqual(false); + expect(isSamePath('abc', '/def')).toEqual(false); + expect(isSamePath('abc/', 'def')).toEqual(false); + expect(isSamePath('abc/', 'def/')).toEqual(false); + expect(isSamePath('/abc/', 'def/')).toEqual(false); + expect(isSamePath('/abc/', '/def/')).toEqual(false); + expect(isSamePath('//abc/', '/def/')).toEqual(false); + expect(isSamePath('//abc//', '/def/')).toEqual(false); + }); + it('recognizes path with multiple sections as equal regardless of extra slashes', function() { + expect(isSamePath('abc/def', 'abc/def')).toEqual(true); + expect(isSamePath('/abc/def', 'abc/def')).toEqual(true); + expect(isSamePath('abc/def', '/abc/def')).toEqual(true); + expect(isSamePath('abc/def/', '/abc/def/')).toEqual(true); + expect(isSamePath('/abc/def/', '/abc/def/')).toEqual(true); + expect(isSamePath('/abc/def/', 'abc/def/')).toEqual(true); + expect(isSamePath('//abc/def/', 'abc/def/')).toEqual(true); + expect(isSamePath('//abc/def//', 'abc/def/')).toEqual(true); + + expect(isSamePath('abc/def', 'abc/ghi')).toEqual(false); + expect(isSamePath('/abc/def', 'abc/ghi')).toEqual(false); + expect(isSamePath('abc/def', '/abc/ghi')).toEqual(false); + expect(isSamePath('abc/def/', '/abc/ghi/')).toEqual(false); + expect(isSamePath('/abc/def/', '/abc/ghi/')).toEqual(false); + expect(isSamePath('/abc/def/', 'abc/ghi/')).toEqual(false); + expect(isSamePath('//abc/def/', 'abc/ghi/')).toEqual(false); + expect(isSamePath('//abc/def//', 'abc/ghi/')).toEqual(false); + }); + it('recognizes path entries with dot', function() { + expect(isSamePath('.', '')).toEqual(true); + expect(isSamePath('.', '.')).toEqual(true); + expect(isSamePath('.', '/')).toEqual(true); + expect(isSamePath('/.', '/')).toEqual(true); + expect(isSamePath('/./', '/')).toEqual(true); + expect(isSamePath('/./', '/.')).toEqual(true); + expect(isSamePath('/./', '/./')).toEqual(true); + expect(isSamePath('/./', '/./')).toEqual(true); + + expect(isSamePath('a/./b', 'a/b')).toEqual(true); + expect(isSamePath('a/b/.', 'a/b')).toEqual(true); + expect(isSamePath('./a/b', 'a/b')).toEqual(true); + }); +}); \ No newline at end of file diff --git a/test/joinPaths.test.js b/test/joinPaths.test.js new file mode 100644 index 00000000..fd3555ed --- /dev/null +++ b/test/joinPaths.test.js @@ -0,0 +1,47 @@ +import {joinPaths} from '../lib/index' + +describe('joinPaths', function() { + it('returns empty string with no or empty arguments', function() { + expect(joinPaths()).toEqual(''); + expect(joinPaths('')).toEqual(''); + expect(joinPaths('', '')).toEqual(''); + }); + it('returns joined path sections', function() { + expect(joinPaths('abc')).toEqual('abc'); + expect(joinPaths('abc', 'def')).toEqual('abc/def'); + expect(joinPaths('abc', 'def', 'ghi')).toEqual('abc/def/ghi'); + }); + it('keeps leading slashes', function() { + expect(joinPaths('/abc')).toEqual('/abc'); + expect(joinPaths('/abc', '')).toEqual('/abc'); + expect(joinPaths('', '/abc')).toEqual('/abc'); + expect(joinPaths('/abc', 'def')).toEqual('/abc/def'); + expect(joinPaths('/abc', 'def', 'ghi')).toEqual('/abc/def/ghi'); + }); + it('keeps trailing slashes', function() { + expect(joinPaths('', 'abc/')).toEqual('abc/'); + expect(joinPaths('abc/')).toEqual('abc/'); + expect(joinPaths('abc/', '')).toEqual('abc/'); + expect(joinPaths('abc', 'def/')).toEqual('abc/def/'); + expect(joinPaths('abc', 'def', 'ghi/')).toEqual('abc/def/ghi/'); + }); + it('splits paths in specified strings and discards extra slashes', function() { + expect(joinPaths('//abc//')).toEqual('/abc/'); + expect(joinPaths('//abc//def//')).toEqual('/abc/def/'); + expect(joinPaths('//abc//', '//def//')).toEqual('/abc/def/'); + expect(joinPaths('//abc//', '//def//', '//ghi//')).toEqual('/abc/def/ghi/'); + expect(joinPaths('//abc//def//', '//ghi//jkl/mno/', '//pqr//')) + .toEqual('/abc/def/ghi/jkl/mno/pqr/'); + expect(joinPaths('/abc', '/def')).toEqual('/abc/def'); + expect(joinPaths('/abc/', '/def')).toEqual('/abc/def'); + expect(joinPaths('/abc/', 'def')).toEqual('/abc/def'); + }); + it('discards empty sections', function() { + expect(joinPaths('abc', '', 'def')).toEqual('abc/def'); + }); + it('returns root if only slashes', function() { + expect(joinPaths('//')).toEqual('/'); + expect(joinPaths('/', '/')).toEqual('/'); + expect(joinPaths('/', '//', '/')).toEqual('/'); + }); +});