fix prepending code to builders

pull/183/head
Rich-Harris 9 years ago
parent 3e57814b76
commit a9c4b92493

@ -12,33 +12,49 @@ export default class CodeBuilder {
addLine ( line ) { addLine ( line ) {
if ( this.last === BLOCK ) { if ( this.last === BLOCK ) {
this.result += `\n\n${line}`; this.result += `\n\n${line}`;
} else { } else if ( this.last === LINE ) {
this.result += `\n${line}`; this.result += `\n${line}`;
} else {
this.result += line;
} }
this.last = LINE; this.last = LINE;
if ( !this.first ) this.first = LINE;
} }
addLineAtStart ( line ) { addLineAtStart ( line ) {
if ( this.first === BLOCK ) { if ( this.first === BLOCK ) {
this.result = `${line}\n\n${this.result}`; this.result = `${line}\n\n${this.result}`;
} else { } else if ( this.first === LINE ) {
this.result = `${line}\n${this.result}`; this.result = `${line}\n${this.result}`;
} else {
this.result += line;
} }
this.first = LINE; this.first = LINE;
if ( !this.last ) this.last = LINE;
} }
addBlock ( block ) { addBlock ( block ) {
this.result += `\n\n${block}`; if ( this.result ) {
this.result += `\n\n${block}`;
} else {
this.result += block;
}
this.last = BLOCK; this.last = BLOCK;
if ( !this.first ) this.first = BLOCK;
} }
addBlockAtStart ( block ) { addBlockAtStart ( block ) {
this.result = `${block}\n\n${this.result}`; if ( this.result ) {
this.result = `${block}\n\n${this.result}`;
} else {
this.result += block;
}
this.first = BLOCK; this.first = BLOCK;
if ( !this.last ) this.last = BLOCK;
} }
isEmpty () { isEmpty () {

@ -118,4 +118,55 @@ describe( 'CodeBuilder', () => {
// line 4 // line 4
` ); ` );
}); });
it( 'adds a line at start', () => {
const builder = new CodeBuilder();
builder.addLine( '// second' );
builder.addLineAtStart( '// first' );
assert.equal( builder.toString(), deindent`
// first
// second
` );
});
it( 'adds a line at start before a block', () => {
const builder = new CodeBuilder();
builder.addBlock( '// second' );
builder.addLineAtStart( '// first' );
assert.equal( builder.toString(), deindent`
// first
// second
` );
});
it( 'adds a block at start', () => {
const builder = new CodeBuilder();
builder.addLine( '// second' );
builder.addBlockAtStart( '// first' );
assert.equal( builder.toString(), deindent`
// first
// second
` );
});
it( 'adds a block at start before a block', () => {
const builder = new CodeBuilder();
builder.addBlock( '// second' );
builder.addBlockAtStart( '// first' );
assert.equal( builder.toString(), deindent`
// first
// second
` );
});
}); });

Loading…
Cancel
Save