%PDF- %PDF-
Direktori : /var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/lib/lazy.js-0.5.1/spec/ |
Current File : //var/www/projetos/suporte.iigd.com.br/plugins/glpiinventory/lib/lazy.js-0.5.1/spec/node_spec.js |
var fs = require("fs"), Stream = require("stream"), MemoryStream = require("memorystream"), util = require('../util.js'); require("./lazy_spec.js"); require("./map_spec.js"); require("./filter_spec.js"); require("./reverse_spec.js"); require("./shuffle_spec.js"); require("./concat_spec.js"); require("./flatten_spec.js"); require("./take_spec.js"); require("./drop_spec.js"); require("./initial_spec.js"); require("./sort_by_spec.js"); require("./group_by_spec.js"); require("./count_by_spec.js"); require("./without_spec.js"); require("./union_spec.js"); require("./intersection_spec.js"); require("./uniq_spec.js"); require("./zip_spec.js"); require("./find_spec.js"); require("./min_spec.js"); require("./max_spec.js"); require("./sum_spec.js"); require("./watch_spec.js"); require("./merge_spec.js"); require("./join_spec.js"); require("./memoize_spec.js"); require("./equals_spec.js"); require("./index_of_spec.js"); require("./contains_spec.js"); if (util.isHarmonySupported()) { require('./es6_spec.js'); } // Sequence types require("./object_like_sequence_spec.js"); require("./string_like_sequence_spec.js"); require("./async_sequence_spec.js"); require("./async_handle_spec.js"); describe("working with streams", function() { // TODO: Figure out a smart way to test HTTP streams and other types of // streams as well. it("can split the contents of the stream, as if it were a string", function() { var stream = fs.createReadStream("./spec/data/haiku.txt"), words = []; Lazy(stream).split(/\s+/).each(function(word) { words.push(word); }); waitsFor(toBePopulated(words, 13)); runs(function() { expect(words).toEqual([ 'at', 'the', 'age', 'old', 'pond', 'a', 'frog', 'leaps', 'into', 'water', 'a', 'deep', 'resonance' ]); }); }); it("can split the contents of the stream across chunks", function() { var stream = new MemoryStream(), pieces = []; Lazy(stream).split('to be').each(function(piece) { pieces.push(piece); }); stream.write('this '); stream.write('needs '); stream.write('to '); stream.write('be '); stream.write('split'); stream.end(); waitsFor(toBePopulated(pieces,2)); runs(function() { expect(pieces).toEqual(['this needs ',' split']); }); }); it("can split the contents of the stream across chunks w/ a regex delimiter", function() { var stream = new MemoryStream(), pieces = []; Lazy(stream).split(/[aeiou]/).each(function(piece) { pieces.push(piece); }); // What an absurd test case I've chosen here. stream.write('the'); stream.write(' quick '); stream.write('brown '); stream.write('fox\n'); stream.write('jumped'); stream.write(' over'); stream.write(' the lazy '); stream.write("dog's back"); stream.end(); waitsFor(toBePopulated(pieces, 14)); runs(function() { expect(pieces).toEqual([ 'th', ' q', '', 'ck br', 'wn f', 'x\nj', 'mp', 'd ', 'v', 'r th', ' l', 'zy d', "g's b", 'ck' ]); }); }); it("can also do string-style matching on streams", function() { var stream = fs.createReadStream("./spec/data/haiku.txt"), words = []; Lazy(stream).match(/\ba\w*/).each(function(word) { words.push(word); }); waitsFor(toBePopulated(words)); runs(function() { expect(words).toEqual(['at', 'age', 'a', 'a']); }); }); it("does not insert extra breaks on newlines when splitting", function() { var stream = fs.createReadStream("./spec/data/commas.txt"), chunks = []; Lazy(stream).split(/,\s*/).each(function(chunk) { chunks.push(chunk); }); waitsFor(toBePopulated(chunks)); runs(function() { expect(chunks).toEqual([ 'first chunk', 'second chunk', 'third\nchunk', 'fourth chunk', 'fifth chunk' ]); }); }); describe("file streams", function() { describe("lines", function() { it("reads every line of a file", function() { var lines = []; runs(function() { Lazy.readFile("./spec/data/lines.txt") .lines() .each(function(line) { lines.push(line); }); }); waitsFor(toBePopulated(lines, 25)); runs(function() { expect(lines).toEqual(Lazy.repeat("The quick brown fox jumped over the lazy dog.", 25).toArray()); }); }); it("reads every line of a file (using a handle)", function() { var done = jasmine.createSpy(); runs(function() { Lazy.readFile("./spec/data/lines.txt") .lines() .toArray() .onComplete(function(array) { expect(array).toEqual(Lazy.repeat("The quick brown fox jumped over the lazy dog.", 25).toArray()); done(); }); }); waitsFor(toBeCalled(done)); }); }); describe("wrapping a stream directly", function() { it("works the same as calling a helper, e.g., readFile", function() { var lines = []; runs(function() { Lazy(fs.createReadStream("./spec/data/lines.txt")) .lines() .take(1) .each(function(line) { lines.push(line); }); }); waitsFor(function() { return lines.length > 0; }); runs(function() { expect(lines[0]).toEqual("The quick brown fox jumped over the lazy dog."); }); }); it("exposes an AsyncHandle for reduce()-style operations", function() { var callback = jasmine.createSpy(); Lazy(fs.createReadStream("./spec/data/haiku.txt")) .split(/\s+/) .toArray() .onComplete(function(arr) { callback(arr); }); waitsFor(toBeCalled(callback)); runs(function() { var words = callback.calls[0].args[0]; expect(words.slice(0, 8)).toEqual([ 'at', 'the', 'age', 'old', 'pond', 'a', 'frog', 'leaps' ]); }); }); }); describe("wrapping non-text streams", function() { var JSONStream = require('JSONStream'); it("works with whatever the stream produces, such as objects", function() { var objects = []; runs(function() { var stream = fs.createReadStream("./spec/data/objects.json") .pipe(JSONStream.parse("*")); Lazy(stream).each(function(object) { objects.push(object); }); }); waitsFor(toBePopulated(objects)); runs(function() { var names = Lazy(objects).pluck("name"); expect(names).toComprise(["foobar", "flintstones"]); }); }); }); }); if (typeof Stream.Readable !== "undefined") { describe('toStream', function() { it('creates a readable stream that you can use just like any other stream', function() { var stream = Lazy(fs.createReadStream('./spec/data/lines.txt')) .map(function(chunk) { return chunk.toUpperCase(); }) .toStream(); var finished = jasmine.createSpy(); var output = new MemoryStream(null, { readable: false }); stream.pipe(output); stream.on('end', finished); waitsFor(toBeCalled(finished)); runs(function() { var contents = output.toString(); var expected = Lazy.repeat('The quick brown fox jumped over the lazy dog.'.toUpperCase(), 25).join('\n'); expect(contents).toEqual(expected); }); }); it('respects file delimiter set on the instance (e.g. by .lines())', function() { var stream = Lazy.readFile('./spec/data/lines.txt') .lines() .take(5) .toStream(); var finished = jasmine.createSpy(); var output = new MemoryStream(null, { readable: false }); stream.pipe(output); stream.on('end', finished); waitsFor(toBeCalled(finished)); runs(function() { var contents = output.toString().replace(/\n$/, ''); var expected = Lazy.repeat('The quick brown fox jumped over the lazy dog.', 5).join('\n'); expect(contents).toEqual(expected); }); }); it('supports passing in an encoding', function() { function testEncoding(encoding, expectedOutput) { var lines = []; runs(function() { Lazy.readFile('./spec/data/unicode.txt', encoding) .lines() .each(function(line) { lines.push(line); }); }); waitsFor(function() { return lines.length > 0; }); runs(function() { expect(lines[0]).toEqual(expectedOutput); }); } testEncoding('base64', 'SSDinaQgTlkK') testEncoding('utf8', 'I ❤ NY'); }); }); } });