@yugu/gogocode
Version:
The simplest tool to parse/transform/generate code on ast
179 lines (164 loc) • 6.24 kB
JavaScript
const $ = require('../index');
const config = require('./config');
const jc1 = require('./code/simple1');
const jc2 = require('./code/simple2');
const hc1 = require('./code/simple1.html');
test('$.generate: simple js code', () => {
expect(()=>{
$('var a = 1;').generate();
}).not.toThrow();
})
test('$.generate: this[0] is null', () => {
expect(()=>{
const G = $('var a = 1;');
G[0] = null
G.generate();
}).not.toThrow();
})
test('$.generate:simple js code 1', () => {
const str = $('var a = 1;').generate();
expect(str).toBe('var a = 1;');
})
test('$.generate:simple js code 2', () => {
const str =$('function a() {}').generate();
expect(str).toBe('function a() {}');
})
test('$.generate: append result object should not throw', () => {
const CODE = `
function a(){
var a = 1;
}
`;
const code = $(CODE).append($('var a = 1;').node).generate()
expect(code.indexOf('var a = 1;') > -1).toBeTruthy();
})
test('$.generate: simple html code', () => {
expect(()=>{
$('<div class="test" ><a href=""/></div>',config.html).generate();
}).not.toThrow();
})
test('$.generate: simple html code 1 result should be ok', () => {
const str = $('<div class="test" >test</div>',config.html).generate();
expect(str).toBe('<div class=\"test\">test</div>');
})
test('$.generate: simple1 html code result should be ok', () => {
const str = $(hc1,config.html).generate();
expect(str.length > 1).toBeTruthy();
})
test('$.generate: simple1 html code result should be ok', () => {
const res = $(`
import a from 'a';console.log('get A');var b = console.log();console.log.bind();var c = console.log;console.log = func;
`)
.replace(`var $_$ = console.log()`, `var $_$ = void 0;`)
.replace(`var $_$ = console.log`, `var $_$ = function(){};`)
.find(`console.log()`)
.remove()
.generate({ isPretty: true });
expect(res == `import a from "a";
var b = void 0;
console.log.bind();
var c = function() {};
console.log = func;`).toBeTruthy();
})
// todo magix attr
// test('$.generate: simple html code 2 {{ test', () => {
// const code = `<span class="{{= body_stateColor(this,crowd) }}" {{= body_updateState(this,crowd) }}>{{= body_stateText(this,crowd) }}</span>`;
// const str = $(code, config.html).generate();
// expect(str).toBe('<span class="{{= body_stateColor(this,crowd) }}" {{= body_updateState(this,crowd) }}>{{= body_stateText(this,crowd) }}</span>');
// })
test('$.generate: simple1 html code result should be ok', () => {
const res = $(`
<s-end
a:elif="{{gameSta
tus === 3}}"
pic="{{level.p}}"
last="{{(level.i + 1) >= levelTotal}}"
award="{{award}}"
nextAward="{{nextAward}}"
lastAward="{{lastAward}}"
used="{{used}}"
onUse="handleEndUseTap"
onNext="handleEndNextTap"
/>
`, { parseOptions: { language: 'html' } } )
.generate();
expect(!!res.match(`/>`)).toBeTruthy();
})
test('$.generate: tag generate should be ok', () => {
const str = $(`<template>
<A></A>
</template>`, { parseOptions: { language: 'vue' } }).find('<template></template>')
.generate();
expect(str.match('A')).toBeTruthy();
})
test('$.generate: html generate should be ok', () => {
const str = $(`<image src={{a + 'b/c.png'}} style="s"/>`, { parseOptions: { language: 'html' } })
.generate();
expect(str.indexOf(`{{a + 'b/c.png'}}`) > -1).toBeTruthy();
})
test('$.generate: UpperCase tag generate should be ok', () => {
const str = $(`<Image a="1" />`, { parseOptions: { language: 'html' } })
.generate();
expect(str.indexOf(`Image`) > -1).toBeTruthy();
})
test('$.generate: selfclose tag generate should be ok', () => {
const str = $(`<div >
<div / >
<span />
<span></span>
</div>`, { parseOptions: { language: 'html' } })
.generate();
expect(str.indexOf(`<div>`) > -1 && str.indexOf(`<div/>`) > -1).toBeTruthy();
})
test('$.generate: selfclose tag generate should be ok', () => {
const str = $(`<view class="h-guide-game {{className}}">
<view class="h-guide-game-arrow-v" />
<view class="h-guide-game-hand" />
</view>`, { parseOptions: { language: 'html' } })
.generate();
expect(str.indexOf(`</view>`) > -1 && str.indexOf(`/>`) > -1).toBeTruthy();
})
test('$.generate: selfclose tag generate should be ok', () => {
const str = $(`<!-- sdd -->`, { parseOptions: { language: 'html' } })
.generate();
expect(str.indexOf(`<!-- sdd -->`) > -1).toBeTruthy();
})
test('$.generate: selfclose tag generate should be ok', () => {
const str = $(`<a-table :columns="columns"></a-table>`, { parseOptions: { language: 'html' } })
.find('<$_$ $_$1=$_$2></$_$>')
.each((item) => {
const attrs = item.attr('content.attributes')
attrs.forEach((attr, index) => {
if (attr.key && attr.key.content && attr.key.content.startsWith(':')) {
attr.key.content = attr.key.content.slice('1')
attr.value.content = `{${attr.value.content}}`
delete attr.startWrapper
delete attr.endWrapper
}
})
})
.generate();
expect(str.indexOf(`columns={columns}`) > -1).toBeTruthy();
})
test('$.generate: selfclose tag generate should be ok', () => {
const str = $(`<a-table :columns="columns"></a-table>`, { parseOptions: { language: 'html' } })
.find('<$_$ $_$1=$_$2></$_$>')
.each((item) => {
const attrs = item.attr('content.attributes')
attrs.forEach((attr, index) => {
if (attr.key && attr.key.content && attr.key.content.startsWith(':')) {
attr.key.content = attr.key.content.slice('1')
attr.startWrapper.content = '{'
attr.endWrapper.content = '}'
}
})
})
.generate();
expect(str.indexOf(`columns={columns}`) > -1).toBeTruthy();
})
// test('$.generate: import generate should be ok', () => {
// const res = $(`const baseUrl = import.meta.env.VITE_APP_WEB_API_URL;`)
// .generate();
// expect(res.indexOf(`import`) > -1).toBeTruthy();
// todo
// })