import 'package:belatuk_code_buffer/belatuk_code_buffer.dart';
import 'package:test/test.dart';

void main() {
  var a = CodeBuffer(), b = CodeBuffer();

  setUp(() {
    a.writeln('outer block 1');
    b
      ..writeln('inner block 1')
      ..writeln('inner block 2');
    b.copyInto(a..indent());
    a
      ..outdent()
      ..writeln('outer block 2');
  });

  tearDown(() {
    a.clear();
    b.clear();
  });

  test('sets correct text', () {
    expect(
        a.toString(),
        [
          'outer block 1',
          '  inner block 1',
          '  inner block 2',
          'outer block 2',
        ].join('\n'));
  });

  test('sets lastLine+lastSpan', () {
    var c = CodeBuffer()
      ..indent()
      ..write('>')
      ..writeln('innermost');
    c.copyInto(a);
    expect(a.lastLine!.text, '>innermost');
    expect(a.lastLine!.span.start.column, 2);
    expect(a.lastLine!.lastSpan!.start.line, 4);
    expect(a.lastLine!.lastSpan!.start.column, 3);
    expect(a.lastLine!.lastSpan!.end.line, 4);
    expect(a.lastLine!.lastSpan!.end.column, 12);
  });
}