UNPKG

ionic

Version:

A tool for creating and developing Ionic Framework mobile apps.

277 lines (260 loc) 10.2 kB
'use strict'; var path = require('path'); var fs = require('fs'); var file = require('..'); var _ = require('lodash'); var helpers = require('./helpers/helpers'); var defLogger = require('../lib/logger'); var Tempdir = require('temporary/lib/dir'); var tmpdir = new Tempdir(); exports['Env()'] = { 'setUp': function(done) { this.fixtures = file.createEnv({ base: path.join(__dirname, 'fixtures') }); this.env = file.createEnv({ base: path.join(tmpdir.path, '/env/scope') }); done(); }, 'inherits from global file config': function(test) { test.expect(3); var logger = { bar: 'foo' }; file.option('logger', logger); file.option('write', false); var env = file.createEnv(); test.deepEqual(env.option('logger'), logger, 'logger should be inherited'); test.deepEqual(env.log, file.log, 'logger should be inherited'); test.equal(env.option('write'), false, 'write state should be inherited'); file.option('write', true); file.option('logger', defLogger); test.done(); }, 'read': function(test) { test.expect(1); helpers.assertTextEqual(this.fixtures.read('utf8.txt'), 'Ação é isso aí\n', test, 'file should be read from base path.'); test.done(); }, 'readJSON': function(test) { test.expect(1); var obj = {foo: 'Ação é isso aí', bar: ['ømg', 'pønies']}; var fileContent = this.fixtures.readJSON('utf8.json'); test.deepEqual(fileContent, obj, 'file should be read from base path and parsed correctly.'); test.done(); }, 'write': function(test) { test.expect(1); var str = 'foo bar'; this.env.write('write.txt', str); test.strictEqual(fs.readFileSync(path.join(tmpdir.path, '/env/scope', 'write.txt'), 'utf8'), str, 'file should be written in the root dir.'); test.done(); }, 'copy': function(test) { test.expect(1); var root = 'utf8.txt'; var dest = path.join( tmpdir.path, 'copy.txt'); this.fixtures.copy(root, dest); var initial = this.fixtures.read(root); var copied = fs.readFileSync(dest, 'utf8'); test.strictEqual(initial, copied, 'File should be copied from the root dir'); test.done(); }, 'copy with dest': function(test) { test.expect(1); var dest = path.join(tmpdir.path, '/copy'); var env = file.createEnv({ base: path.join(__dirname, 'fixtures'), dest: dest }); env.copy('utf8.txt', 'utf-8.txt'); var initial = this.fixtures.read('utf8.txt'); var copied = fs.readFileSync(dest + '/utf-8.txt', 'utf8'); test.strictEqual(initial, copied, 'File should be copied from the root dir to the dest dir'); test.done(); }, 'delete': function(test) { test.expect(3); this.env.write('delete.txt', 'foo'); test.ok(file.exists(path.join(tmpdir.path, '/env/scope', 'delete.txt')), 'file should exist'); test.ok(this.env.delete('delete.txt'), 'return true if it delete the file'); test.ok(!file.exists(path.join(tmpdir.path, '/env/scope', 'delete.txt')), 'file should\'ve been deleted'); test.done(); }, 'mkdir': function(test) { test.expect(2); test.doesNotThrow(function() { this.env.mkdir('aa/bb/cc'); }.bind(this), 'Should also not explode'); test.ok(file.isDir(this.env.fromBase('aa/bb/cc')), 'path should have been created.'); this.env.delete('aa/bb/cc'); test.done(); }, 'recurse': function(test) { test.expect(1); var rootdir = this.fixtures.fromBase('expand').replace(/\\/g, '/'); var expected = {}; expected[rootdir + '/css/baz.css'] = [rootdir, 'css', 'baz.css']; expected[rootdir + '/css/qux.css'] = [rootdir, 'css', 'qux.css']; expected[rootdir + '/deep/deep.txt'] = [rootdir, 'deep', 'deep.txt']; expected[rootdir + '/deep/deeper/deeper.txt'] = [rootdir, 'deep/deeper', 'deeper.txt']; expected[rootdir + '/deep/deeper/deepest/deepest.txt'] = [rootdir, 'deep/deeper/deepest', 'deepest.txt']; expected[rootdir + '/js/bar.js'] = [rootdir, 'js', 'bar.js']; expected[rootdir + '/js/foo.js'] = [rootdir, 'js', 'foo.js']; expected[rootdir + '/README.md'] = [rootdir, undefined, 'README.md']; var actual = {}; this.fixtures.recurse('expand', function(abspath, rootdir, subdir, filename) { actual[abspath] = [rootdir.replace(/\\/g, '/'), subdir, filename]; }); test.deepEqual(actual, expected, 'paths and arguments should match.'); test.done(); }, 'setBase': function(test) { this.env.setBase('foo'); test.equal(this.env.fromBase('bar').replace(/\\/g, '/'), 'foo/bar'); test.done(); }, 'setDestBase': function(test) { this.env.setDestBase('foo'); test.equal(this.env.fromDestBase('bar').replace(/\\/g, '/'), 'foo/bar'); test.done(); } }; exports['Env() filters'] = { 'setUp': function(done) { this.env = file.createEnv({ base: tmpdir.path }); done(); }, '.registerWriteFilter() synchronous and apply output': function(test) { test.expect(3); this.env.registerWriteFilter('tmp', function(file) { test.equal(file.path, 'foo'); test.equal(file.contents, 'bar'); return { path: 'simple-filter', contents: 'test' }; }); this.env.write('foo', 'bar'); var written = this.env.read('simple-filter'); test.equal(written, 'test', 'should have written the filtered file and path'); test.done(); }, 'pipe all filters': function(test) { test.expect(4); this.env.registerWriteFilter('1', function(file) { test.equal(file.path, 'foo'); test.equal(file.contents, 'bar'); return { path: 'piped-filter', contents: 'test' }; }); this.env.registerWriteFilter('2', function(file) { test.equal(file.path, 'piped-filter'); test.equal(file.contents, 'test'); return file; }); this.env.write('foo', 'bar'); test.done(); }, '.removeWriteFilter()': function(test) { test.expect(1); this.env.registerWriteFilter('broke', function(file) { test.ok(false); return { path: 'broke', contents: 'broke' }; }); this.env.removeWriteFilter('broke'); this.env.write('no-filter', 'bar'); var written = this.env.read('no-filter'); test.equal(written, 'bar', 'should have removed the filter'); test.done(); }, 'Async write filter': function(test) { test.expect(2); this.env._actualWrite = function(filepath, contents) { test.equal(filepath, 'async-write'); test.equal(contents, 'puts async'); test.done(); }; this.env.registerWriteFilter('async', function() { var done = this.async(); setTimeout(function() { done({ path: 'async-write', contents: 'puts async' }); }, 10); }); this.env.write('foo', 'bar'); }, '.registerValidationFilter': { 'setUp': function(done) { var self = this; this.env.option('logger', _.extend({}, require('../lib/logger'), { write: function(msg) { self.errMsg = msg; } })); done(); }, 'passing validation': function(test) { test.expect(3); this.env.registerValidationFilter('tmp', function(file) { test.equal(file.path, 'foo'); test.equal(file.contents, 'bar'); return true; }); this.env.write('foo', 'bar'); var written = this.env.read('simple-filter'); test.equal(written, 'test', 'should have written the filtered file and path'); test.done(); }, 'failing validation': function(test) { test.expect(2); this.env.registerValidationFilter('tmp', function(file) { return false; }); this.env.write('failing-filter', 'bar'); test.ok(!file.exists(this.env.fromBase('failing-filter')), 'should have written the filtered file and path'); test.equal(this.errMsg, 'Not actually writing to failing-filter haven\'t pass validation', 'default error message is log'); test.done(); }, 'validation with text file': function(test) { test.expect(1); this.env.registerValidationFilter('tmp', function(file) { test.ok(typeof file.contents === 'string'); test.done(); return 'abort'; }); var textPath = path.join(__dirname, 'fixtures/utf8.txt'); this.env.copy(textPath, textPath); }, 'validation with binary file': function(test) { test.expect(1); this.env.registerValidationFilter('tmp', function(file) { test.ok(file.contents instanceof Buffer); test.done(); return 'abort'; }); var binaryPath = path.join(__dirname, 'fixtures/octocat.png'); this.env.copy(binaryPath, binaryPath); }, 'failing validation and custom error message': function(test) { test.expect(2); this.env.registerValidationFilter('tmp', function(file) { return 'a bad error'; }); this.env.write('failing-filter', 'bar'); test.ok(!file.exists(this.env.fromBase('failing-filter')), 'should not have written'); test.equal(this.errMsg, 'a bad error', 'custom error message is log'); test.done(); }, 'async validator': function(test) { var self = this; test.expect(1); this.env._actualWrite = function() { test.ok(false, 'should not be call') }; this.env.registerValidationFilter('tmp', function(file) { var done = this.async(); setTimeout(function() { done('a bad error'); test.equal(self.errMsg, 'a bad error', 'custom error message is log'); test.done(); }, 10); }); this.env.write('async-failing-filter', 'bar'); } }, '.removeValidationFilter': function(test) { test.expect(1); this.env.registerValidationFilter('no-run', function() { test.ok(false, 'shouldn\'t run the filter'); }); this.env.removeValidationFilter('no-run'); this.env.write('removed-validation', 'bar'); test.ok(true); test.done(); } };