json-q
Version:
Retrieves values from JSON objects (and JavaScript objects) by css-selector-like query (includes attribute filters and array flattening).
116 lines (100 loc) • 3.78 kB
JavaScript
var expect = require('chai').expect,
requireRelative = require('require-relative'),
modifyBabelPreset = require('..'),
serializePreset = require('../lib/serialize'),
es2015Preset = callFn(require('babel-preset-es2015')),
transform = requireRelative('babel-preset-es2015', 'babel-plugin-transform-es2015-typeof-symbol'),
jsxCore = require('babel-plugin-transform-react-jsx'),
jsx = require('./fixtures/two/node_modules/one/node_modules/babel-plugin-transform-react-jsx');
function callFn(r) {
if (typeof r==='function') r = r();
return r;
}
describe('modify-babel-preset', function() {
it('should import string presets', function() {
var out = modifyBabelPreset('babel-preset-es2015');
expect(out).to.deep.equal(es2015Preset);
});
it('should import string presets without babel-preset- prefix', function() {
var out = modifyBabelPreset('es2015');
expect(out).to.deep.equal(es2015Preset);
});
it('should remove for false values', function() {
var out = modifyBabelPreset('es2015', {
'transform-es2015-typeof-symbol': false
});
expect(out.plugins).to.have.length(es2015Preset.plugins.length-1);
expect(out.plugins).not.to.include(transform);
});
it('should add for true values', function() {
var out = modifyBabelPreset('es2015', {
// nameDrops: false,
'transform-react-jsx': true
});
expect(out.plugins).to.deep.equal( es2015Preset.plugins.concat(jsxCore) );
});
it('should add values with config', function() {
var out = modifyBabelPreset('es2015', {
nameDrops: false,
'transform-react-jsx': { pragma:'h' }
});
expect(out.plugins).to.deep.equal( es2015Preset.plugins.concat([
[jsxCore, { pragma:'h' }]
]) );
});
xit('should work recursively', function() {
var one = require('./fixtures/two/node_modules/one');
// var reference = serializePreset(require.resolve('babel-preset-es2015')).plugins.map( p => (
// Array.isArray(p) ? [getModuleName(p[0])].concat(p.slice(1)) : getModuleName(p)
// ));
//
// var actual = one.plugins.map( p => (
// Array.isArray(p) ? [getModuleName(p[0]._original_name)].concat(p.slice(1)) : getModuleName(p._original_name)
// ));
//
// // expect(reference).to.deep.equal(actual, 'Equal when serialized');
//
// actual.forEach( (actual, i) => {
// if (actual!==reference[i]) {
// console.log(i+'\n actual: '+ JSON.stringify(actual)+'\n ref: '+ JSON.stringify(reference[i]));
// console.log(' ===json? ', JSON.stringify(actual)===JSON.stringify(reference[i]));
// //console.log(' ===func? ', one.plugins[i][0]===es2015Preset.plugins[i][0]);
// }
// });
//
// function getModuleName(path) {
// return path.replace(/^(.+\/)?node_modules\/([^\/]+)(\/.*)?$/g, '$2');
// }
function stripNames(p) {
if (Array.isArray(p)) delete p[0]._original_name;
else delete p._original_name;
return p;
}
var p = one.plugins.map(stripNames);
expect(p).to.deep.equal( es2015Preset.plugins.concat([
[jsx, { pragma:'h' }]
]).map(function(p) {
var fn = Array.isArray(p) ? p[0] : p;
if (fn===transform || (fn._original_name && ~fn._original_name.indexOf('babel-plugin-transform-es2015-typeof-symbol'))) {
return [fn, { loose:true }];
}
return p;
}).map(stripNames) );
console.log('one matched');
var two = require('./fixtures/two');
two.plugins.forEach(function(p) {
var f = Array.isArray(p) ? p[0] : p;
//delete p._original_name;
});
// delete transform._original_name;
// delete jsx._original_name;
var target = es2015Preset.plugins.concat([
[jsx, { pragma:'z' }]
]);
target.splice(17, 1);
two.plugins = two.plugins.map(p => p+'');
target = target.map(p => p+'');
// console.log(two.plugins[17]===target[17]);
expect(two.plugins).to.deep.equal(target);
});
});