// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

import 'package:flutter_tools/src/base/utils.dart';

import '../src/common.dart';

void main() {
  group('ItemListNotifier', () {
    test('sends notifications', () async {
      final ItemListNotifier<String> list = ItemListNotifier<String>();
      expect(list.items, isEmpty);

      final Future<List<String>> addedStreamItems = list.onAdded.toList();
      final Future<List<String>> removedStreamItems = list.onRemoved.toList();

      list.updateWithNewList(<String>['aaa']);
      list.removeItem('bogus');
      list.updateWithNewList(<String>['aaa', 'bbb', 'ccc']);
      list.updateWithNewList(<String>['bbb', 'ccc']);
      list.removeItem('bbb');

      expect(list.items, <String>['ccc']);
      list.dispose();

      final List<String> addedItems = await addedStreamItems;
      final List<String> removedItems = await removedStreamItems;

      expect(addedItems.length, 3);
      expect(addedItems.first, 'aaa');
      expect(addedItems[1], 'bbb');
      expect(addedItems[2], 'ccc');

      expect(removedItems.length, 2);
      expect(removedItems.first, 'aaa');
      expect(removedItems[1], 'bbb');
    });
  });
}
