UNPKG

vigour-fs

Version:

node's `fs` module with sugar on top + native support.

147 lines (132 loc) 5.08 kB
'use strict' /* global describe, it, expect, after, beforeEach, afterEach */ var path = require('path') var Promise = require('promise') var fs = require('../../../lib/server') var writeFile = Promise.denodeify(fs.writeFile) var readFile = Promise.denodeify(fs.readFile) var unlink = Promise.denodeify(fs.unlink) var remove = Promise.denodeify(fs.remove) var getUrl = require('../../helpers/geturl') var strContent = '南越国是前203年至前111年存在于岭南地区的一个国家,国都位于番禺,疆域包括今天中国的广东、' + '广西两省区的大部份地区,福建省、湖南、贵州、云南的一小部份地区和越南的北部。' + '南越国是秦朝灭亡后,由南海郡尉赵佗于前203年起兵兼并桂林郡和象郡后建立。' + '前196年和前179年,南越国曾先后两次名义上臣属于西汉,成为西汉的“外臣”。前112年,' + '南越国末代君主赵建德与西汉发生战争,被汉武帝于前111年所灭。南越国共存在93年,' + '历经五代君主。南越国是岭南地区的第一个有记载的政权国家,采用封建制和郡县制并存的制度,' + '它的建立保证了秦末乱世岭南地区社会秩序的稳定,有效的改善了岭南地区落后的政治、##济现状。' + '\n' var bufContent = new Buffer(strContent, 'utf8') var numContent = 42 var tmpFilename = path.join(__dirname, 'tmp.txt') describe('fs.writeFile', function () { describe('normal usage', function () { afterEach(function () { return unlink(tmpFilename) }) it('should accept strings', function () { return writeFile(tmpFilename, strContent) .then(function () { return readFile(tmpFilename, 'utf8') }) .then(function (str) { expect(str).to.equal(strContent) }) }) it('should accept buffers', function () { return writeFile(tmpFilename, bufContent) .then(function () { return readFile(tmpFilename) }) .then(function (buffer) { expect(buffer).to.deep.equal(bufContent) }) }) it('should accept numbers', function () { return writeFile(tmpFilename, numContent) .then(function () { return readFile(tmpFilename, 'utf8') }) .then(function (nb) { expect(nb).to.equal(numContent.toString()) }) }) it('should accept URLs', function () { var url = 'http://perdu.com' return Promise.all([ writeFile(tmpFilename, url) .then(function () { return readFile(tmpFilename, 'utf8') }), getUrl(url) ]).then(function (vals) { expect(vals[0]).to.equal(vals[1]) }) }) }) describe('url option', function () { afterEach(function () { return unlink(tmpFilename) }) it('should write the URL to the file if `options.url === false`', function () { var url = 'http://perdu.com' return writeFile(tmpFilename, url, { url: false }) .then(function () { return readFile(tmpFilename, 'utf8') }) .then(function (str) { expect(str).to.equal(url) }) }) }) describe('mkdirp option', function () { var dirpath = path.join(__dirname, 'temporary') var filepath = path.join(dirpath, 'file.txt') beforeEach(function (done) { fs.exists(filepath, function (exists) { expect(exists).to.equal(false) done() }) }) it("should fail with `err.code === ENOENT` if target directory doesn't exist", function () { return writeFile(filepath, strContent, { mkdrip: true }) .catch(function (reason) { expect(reason.code).to.equal('ENOENT') }) }) it('should create necessary directories when `options.mkdirp === true`', function () { after(function () { return remove(dirpath) }) return writeFile(filepath, strContent, { mkdirp: true }) .catch(function (reason) { console.error('OOPS', reason) throw reason }) .then(function () { return readFile(filepath, 'utf8') }) .then(function (str) { expect(str).to.equal(strContent) }) }) }) describe('long file paths', function () { it('should handle 260-character-long file paths', function () { var filenameLen = Math.max(260 - __dirname.length - 1, 1) var filename = path.join(__dirname, new Array(filenameLen + 1).join('x')) after(function () { return unlink(filename) }) return writeFile(filename, strContent) }) it("should fail with `err.code === 'ENAMETOOLONG'` on 1000-character-long file paths", function () { var filenameLen = Math.max(1000 - __dirname.length - 1, 1) var filename = path.join(__dirname, new Array(filenameLen + 1).join('x')) return writeFile(filename, strContent) .catch(function (reason) { expect(reason.code).to.equal('ENAMETOOLONG') }) }) }) })