| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 | var fs = Npm.require('fs');var temp = Npm.require('temp');// Automatically track and cleanup files at exittemp.track();// Set up HTTP method URL used by client testsHTTP.methods({  'test': {    get: function () {      var buf = new Buffer('Hello World');      this.setContentType('text/plain');      return buf;    },    head: function () {      var buf = new Buffer('Hello World');      this.setContentType('text/plain');      this.addHeader('Content-Length', buf.length);      buf = null;    }  }});// Save temp file for testing withfunction openTempFile(name, callback) {  return temp.open(name, callback);}var openTempFileSync = Meteor.wrapAsync(openTempFile);var info = openTempFileSync(null);var tempFilePath = info.path;fs.writeSync(info.fd, 'Hello World');fs.closeSync(info.fd);var bufferData;var arrayBufferData;var binaryData;var dataUriData;var urlData;var filePathData;var streamData;// Init with BufferTinytest.addAsync('cfs-data - server - Init with Buffer', function(test, onComplete) {  bufferData = new DataMan(new Buffer('Hello World'), "text/plain");  test.instanceOf(bufferData.source, DataMan.Buffer);  test.equal(bufferData.type(), "text/plain");  onComplete();});// Init with ArrayBufferTinytest.addAsync('cfs-data - server - Init with ArrayBuffer', function(test, onComplete) {  arrayBufferData = new DataMan(str2ab('Hello World'), "text/plain");  // Should be converted upon init to a Buffer  test.instanceOf(arrayBufferData.source, DataMan.Buffer);  test.equal(arrayBufferData.type(), "text/plain");  onComplete();});// Init with BinaryTinytest.addAsync('cfs-data - server - Init with Binary', function(test, onComplete) {  binaryData = new DataMan(new Uint8Array(str2ab('Hello World')), "text/plain");  // Should be converted upon init to a Buffer  test.instanceOf(arrayBufferData.source, DataMan.Buffer);  test.equal(binaryData.type(), "text/plain");  onComplete();});// Init with data URI stringTinytest.addAsync('cfs-data - server - Init with data URI string', function(test, onComplete) {  var dataUri = 'data:text/plain;base64,SGVsbG8gV29ybGQ='; //'Hello World'  dataUriData = new DataMan(dataUri);  // Data URIs are not converted to Buffers upon init  test.instanceOf(dataUriData.source, DataMan.DataURI);  test.equal(dataUriData.type(), "text/plain"); //should be extracted from data URI  onComplete();});// Init with URL stringTinytest.addAsync('cfs-data - server - Init with URL string', function(test, onComplete) {  var url = Meteor.absoluteUrl('test');  urlData = new DataMan(url, "text/plain"); //'Hello World'  // URLs are not converted to Buffers upon init  test.instanceOf(urlData.source, DataMan.URL);  test.equal(urlData.type(), "text/plain");  onComplete();});// Init with filepath stringTinytest.addAsync('cfs-data - server - Init with filepath string', function(test, onComplete) {  filePathData = new DataMan(tempFilePath, "text/plain");  // filepaths are not converted to Buffers upon init  test.instanceOf(filePathData.source, DataMan.FilePath);  test.equal(filePathData.type(), "text/plain");  onComplete();});// Init with readable streamTinytest.addAsync('cfs-data - server - Init with readable stream', function(test, onComplete) {  streamData = new DataMan(fs.createReadStream(tempFilePath), "text/plain");  // filepaths are not converted to Buffers upon init  test.instanceOf(streamData.source, DataMan.ReadStream);  test.equal(streamData.type(), "text/plain");  onComplete();});// getBufferTinytest.addAsync('cfs-data - server - getBuffer', function(test, onComplete) {  var total = 12, done = 0;  function testBuffer(error, buffer, testType) {    test.isFalse(!!error, testType + ' got error: ' + (error && error.message));    test.instanceOf(buffer, Buffer);    if (buffer instanceof Buffer) {      test.equal(buffer.toString(), 'Hello World', testType + ' got back buffer with incorrect data');    }    done++;    if (total === done) {      onComplete();    }  }  // from Buffer (async)  bufferData.getBuffer(function (error, buffer) {    testBuffer(error, buffer, 'getBuffer from Buffer async');  });  // from Buffer (sync)  testBuffer(null, bufferData.getBuffer(), 'getBuffer from Buffer sync');  // from ArrayBuffer (async)  arrayBufferData.getBuffer(function (error, buffer) {    testBuffer(error, buffer, 'getBuffer from ArrayBuffer async');  });  // from ArrayBuffer (sync)  testBuffer(null, arrayBufferData.getBuffer(), 'getBuffer from ArrayBuffer sync');  // from binary (async)  binaryData.getBuffer(function (error, buffer) {    testBuffer(error, buffer, 'getBuffer from binary async');  });  // from binary (sync)  testBuffer(null, binaryData.getBuffer(), 'getBuffer from binary sync');  // from data URI (async)  dataUriData.getBuffer(function (error, buffer) {    testBuffer(error, buffer, 'getBuffer from data URI async');  });  // from data URI (sync)  testBuffer(null, dataUriData.getBuffer(), 'getBuffer from data URI sync');  // from URL (async)  urlData.getBuffer(function (error, buffer) {    testBuffer(error, buffer, 'getBuffer from URL async');  });  // from URL (sync)  testBuffer(null, urlData.getBuffer(), 'getBuffer from URL sync');  // from filepath (async)  filePathData.getBuffer(function (error, buffer) {    testBuffer(error, buffer, 'getBuffer filepath async');  });  // from filepath (sync)  testBuffer(null, filePathData.getBuffer(), 'getBuffer filepath sync');});// getDataUriTinytest.addAsync('cfs-data - server - getDataUri', function(test, onComplete) {  var total = 12, done = 0;  function testURI(error, uri, testType) {    test.isFalse(!!error, testType + ' got error: ' + (error && error.message));    test.equal(typeof uri, "string", testType + ' got no URI string');    test.equal(uri, 'data:text/plain;base64,SGVsbG8gV29ybGQ=', testType + ' got invalid URI');    done++;    if (total === done) {      onComplete();    }  }  // from Buffer (async)  bufferData.getDataUri(function (error, uri) {    testURI(error, uri, 'getDataUri from Buffer async');  });  // from Buffer (sync)  testURI(null, bufferData.getDataUri(), 'getDataUri from Buffer sync');  // from ArrayBuffer (async)  arrayBufferData.getDataUri(function (error, uri) {    testURI(error, uri, 'getDataUri from ArrayBuffer async');  });  // from ArrayBuffer (sync)  testURI(null, arrayBufferData.getDataUri(), 'getDataUri from ArrayBuffer sync');  // from binary (async)  binaryData.getDataUri(function (error, uri) {    testURI(error, uri, 'getDataUri from binary async');  });  // from binary (sync)  testURI(null, binaryData.getDataUri(), 'getDataUri from binary sync');  // from data URI (async)  dataUriData.getDataUri(function (error, uri) {    testURI(error, uri, 'getDataUri from data URI async');  });  // from data URI (sync)  testURI(null, dataUriData.getDataUri(), 'getDataUri from data URI sync');  // from URL (async)  urlData.getDataUri(function (error, uri) {    testURI(error, uri, 'getDataUri from URL async');  });  // from URL (sync)  testURI(null, urlData.getDataUri(), 'getDataUri from URL sync');  // from filepath (async)  filePathData.getDataUri(function (error, uri) {    testURI(error, uri, 'getDataUri filepath async');  });  // from filepath (sync)  testURI(null, filePathData.getDataUri(), 'getDataUri filepath sync');});// sizeTinytest.addAsync('cfs-data - server - size', function(test, onComplete) {  var total = 6, done = 0;  function testSize(size, testType) {    test.equal(size, 11, testType + ' got wrong size');    done++;    if (total === done) {      onComplete();    }  }  // from Buffer  testSize(bufferData.size(), 'size from Buffer');  // from ArrayBuffer  testSize(arrayBufferData.size(), 'size from ArrayBuffer');  // from binary  testSize(binaryData.size(), 'size from binary');  // from data URI  testSize(dataUriData.size(), 'size from data URI');  // from URL  testSize(urlData.size(), 'size from URL');  // from filepath  testSize(filePathData.size(), 'size from filepath');});// saveToFile// Since saveToFile uses createReadStream, this tests that function alsoTinytest.addAsync('cfs-data - server - saveToFile', function(test, onComplete) {  var total = 12, done = 0;  function testSave(dataInstance) {    var tempName = temp.path({suffix: '.txt'});    dataInstance.saveToFile(tempName, function (error) {      test.isFalse(!!error);      test.equal(fs.readFileSync(tempName, {encoding: 'utf8'}), 'Hello World', 'file was not saved with correct data');      done++;      if (total === done) {        onComplete();      }    });  }  function testSaveSync(dataInstance) {    var tempName = temp.path({suffix: '.txt'});    dataInstance.saveToFile(tempName);    test.equal(fs.readFileSync(tempName, {encoding: 'utf8'}), 'Hello World', 'file was not saved with correct data');    done++;    if (total === done) {      onComplete();    }  }  // from Buffer  testSave(bufferData);  testSaveSync(bufferData);  // from ArrayBuffer  testSave(arrayBufferData);  testSaveSync(arrayBufferData);  // from binary  testSave(binaryData);  testSaveSync(binaryData);  // from data URI  testSave(dataUriData);  testSaveSync(dataUriData);  // from URL  testSave(urlData);  testSaveSync(urlData);  // from filepath  testSave(filePathData);  testSaveSync(filePathData);});// Ensure that URL createReadStream can be piped after delay// https://github.com/mikeal/request/issues/887Tinytest.addAsync('cfs-data - server - createReadStream delay', function(test, onComplete) {  var readStream = urlData.createReadStream();  // wait for 5 seconds, then pipe  Meteor.setTimeout(function() {    var tempName = temp.path({suffix: '.txt'});    try {      var writeStream = readStream.pipe(fs.createWriteStream(tempName));      writeStream.on('finish', Meteor.bindEnvironment(function() {        test.equal(fs.readFileSync(tempName, {encoding: 'utf8'}), 'Hello World', 'file was not saved with correct data');        onComplete();      }));            writeStream.on('error', Meteor.bindEnvironment(function(err) {        test.isFalse(!!err);      }));    } catch (err) {      test.isFalse(!!err);      onComplete();    }          }, 5000);});//Test API://test.isFalse(v, msg)//test.isTrue(v, msg)//test.equalactual, expected, message, not//test.length(obj, len)//test.include(s, v)//test.isNaN(v, msg)//test.isUndefined(v, msg)//test.isNotNull//test.isNull//test.throws(func)//test.instanceOf(obj, klass)//test.notEqual(actual, expected, message)//test.runId()//test.exception(exception)//test.expect_fail()//test.ok(doc)//test.fail(doc)//test.equal(a, b, msg)
 |