// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:pub/src/transcript.dart';
import 'package:test/test.dart';

void main() {
  test('discards from the middle once it reaches the maximum', () {
    final transcript = Transcript<String>(4);
    String forEachToString() {
      var result = '';
      transcript.forEach((entry) => result += entry, (n) => result += '[$n]');
      return result;
    }

    expect(forEachToString(), equals(''));
    transcript.add('a');
    expect(forEachToString(), equals('a'));
    transcript.add('b');
    expect(forEachToString(), equals('ab'));
    transcript.add('c');
    expect(forEachToString(), equals('abc'));
    transcript.add('d');
    expect(forEachToString(), equals('abcd'));
    transcript.add('e');
    expect(forEachToString(), equals('ab[1]de'));
    transcript.add('f');
    expect(forEachToString(), equals('ab[2]ef'));
  });

  test("does not discard if it doesn't reach the maximum", () {
    final transcript = Transcript<String>(40);
    String forEachToString() {
      var result = '';
      transcript.forEach((entry) => result += entry, (n) => result += '[$n]');
      return result;
    }

    expect(forEachToString(), equals(''));
    transcript.add('a');
    expect(forEachToString(), equals('a'));
    transcript.add('b');
    expect(forEachToString(), equals('ab'));
    transcript.add('c');
    expect(forEachToString(), equals('abc'));
    transcript.add('d');
    expect(forEachToString(), equals('abcd'));
    transcript.add('e');
    expect(forEachToString(), equals('abcde'));
    transcript.add('f');
    expect(forEachToString(), equals('abcdef'));
  });
}
