123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /*global describe, before, it */
- var fs = require('fs');
- var events = require('events');
- var assert = require('assert');
- var proxyquire = require('proxyquire');
- var conflicter = require('../lib/util/conflicter');
- describe('conflicter', function () {
- beforeEach(conflicter.reset.bind(conflicter));
- conflicter.on('conflict', function () {
- process.nextTick(function () {
- process.stdin.write('Y\n');
- process.stdin.emit('data', 'Y\n');
- });
- });
- it('is an event emitter', function () {
- assert.ok(conflicter instanceof events.EventEmitter);
- });
- it('conflicter#add(conflict)`', function () {
- conflicter.add(__filename);
- var conflict = conflicter.conflicts.pop();
- assert.deepEqual(conflict.file, __filename);
- assert.deepEqual(conflict.content, fs.readFileSync(__filename, 'utf8'));
- });
- describe('conflicter#resolve(cb)', function (done) {
- it('wihout conflict', function (done) {
- conflicter.resolve(done);
- });
- it('with at least one, without async callback handling', function (done) {
- var conflicts = 0;
- var callbackExecuted = false;
- conflicter.add(__filename);
- conflicter.add({
- file: 'foo.js',
- content: 'var foo = "foo";\n'
- });
- // called.
- conflicter.once('resolved:' + __filename, function (config) {
- conflicts++;
- });
- // not called.
- conflicter.once('resolved:foo.js', function (config) {
- conflicts++;
- });
- conflicter.resolve(function(){
- callbackExecuted = true;
- });
- assert(conflicts, 1);
- assert(!callbackExecuted);
- done();
- });
- it('with at least one, with async callback handling', function (done) {
- var called = 0;
- conflicter.add(__filename);
- conflicter.add({
- file: 'foo.js',
- content: 'var foo = "foo";\n'
- });
- conflicter.once('resolved:' + __filename, function (config) {
- called++;
- config.callback();
- });
- conflicter.once('resolved:foo.js', function (config) {
- called++;
- config.callback();
- });
- conflicter.resolve(function(){
- assert(called, 2);
- done();
- });
- });
- });
- describe.skip('conflicter#collision(filepath, content, cb)', function (done) {
- var me = fs.readFileSync(__filename, 'utf8');
- it('identical status', function(done) {
- conflicter.collision(__filename, me, function (status) {
- assert.equal(status, 'identical');
- done();
- });
- });
- it('create status', function (done) {
- conflicter.collision('foo.js', '', function (status) {
- assert.equal(status, 'create');
- done();
- });
- });
- it('conflict status', function (done) {
- conflicter.collision(__filename, '', function (status) {
- assert.equal(status, 'force');
- done();
- });
- });
- });
- it('conflicter#diff(actual, expected)', function () {
- var diff = conflicter.diff('var', 'let');
- assert.equal(diff, '\n\u001b[41mremoved\u001b[49m \u001b[42madded\u001b[49m\n\n\u001b[42mlet\u001b[49m\u001b[41mvar\u001b[49m\n');
- });
- describe('conflicter#_ask', function () {
- var promptMock = {
- prompt: function (config, cb) {
- cb({ overwrite: this.answer });
- },
- err: null,
- answer: null
- };
- before(function () {
- this.conflicter = proxyquire('../lib/util/conflicter', {
- '../actions/prompt': promptMock.prompt.bind(promptMock)
- });
- });
- it('Calls answer related function and pass a callback', function (done) {
- var callCount = 0;
- promptMock.answer = function (cb) { callCount++; cb(); };
- this.conflicter._ask('/tmp/file', 'my file contents', function (result) {
- assert(callCount, 1);
- done();
- });
- });
- });
- });
|