// Copyright 2018 The Fuchsia 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:test/test.dart';
import 'package:lib.schemas.dart/entity_codec.dart';

void main() {
  group('EntityCodec<T> streaming transform', () {
    final EntityCodec<BasicExample> codec = EntityCodec<BasicExample>(
      type: 'com.example.basic',
      encode: (BasicExample value) => value.name,
      decode: (String data) => BasicExample(data),
    );

    test('stream.transform(codec)', () async {
      List<String> list = <String>['foo', 'bar', 'baz'];

      Stream<String> stream = Stream<String>.fromIterable(list);
      List<String> results = await stream
          .transform(codec.decoder)
          .map((BasicExample e) => e.name)
          .toList();

      expect(results.length, equals(list.length));
    });
  });
}

class BasicExample {
  final String name;

  BasicExample(this.name);
}
