• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5import 'dart:async';
6import 'dart:typed_data';
7import 'dart:ui' as ui show Image;
8import 'dart:ui';
9
10import 'package:flutter/foundation.dart';
11import 'package:flutter/painting.dart';
12
13class TestImageInfo implements ImageInfo {
14  const TestImageInfo(this.value, { this.image, this.scale = 1.0 });
15
16  @override
17  final ui.Image image;
18
19  @override
20  final double scale;
21
22  final int value;
23
24  @override
25  String toString() => '$runtimeType($value)';
26}
27
28class TestImageProvider extends ImageProvider<int> {
29  const TestImageProvider(this.key, this.imageValue, { this.image });
30  final int key;
31  final int imageValue;
32  final ui.Image image;
33
34  @override
35  Future<int> obtainKey(ImageConfiguration configuration) {
36    return Future<int>.value(key);
37  }
38
39  @override
40  ImageStreamCompleter load(int key) {
41    return OneFrameImageStreamCompleter(
42      SynchronousFuture<ImageInfo>(TestImageInfo(imageValue, image: image))
43    );
44  }
45
46  @override
47  String toString() => '$runtimeType($key, $imageValue)';
48}
49
50class FailingTestImageProvider extends TestImageProvider {
51  const FailingTestImageProvider(int key, int imageValue, { ui.Image image }) : super(key, imageValue, image: image);
52
53  @override
54  ImageStreamCompleter load(int key) {
55    return OneFrameImageStreamCompleter(Future<ImageInfo>.sync(() => Future<ImageInfo>.error('loading failed!')));
56  }
57}
58
59Future<ImageInfo> extractOneFrame(ImageStream stream) {
60  final Completer<ImageInfo> completer = Completer<ImageInfo>();
61  ImageStreamListener listener;
62  listener = ImageStreamListener((ImageInfo image, bool synchronousCall) {
63    completer.complete(image);
64    stream.removeListener(listener);
65  });
66  stream.addListener(listener);
67  return completer.future;
68}
69
70class TestImage implements ui.Image {
71  const TestImage({this.height = 0, this.width = 0});
72  @override
73  final int height;
74  @override
75  final int width;
76
77  @override
78  void dispose() { }
79
80  @override
81  Future<ByteData> toByteData({ ImageByteFormat format = ImageByteFormat.rawRgba }) {
82    throw UnimplementedError();
83  }
84}
85
86class ErrorImageProvider extends ImageProvider<ErrorImageProvider> {
87  @override
88  ImageStreamCompleter load(ErrorImageProvider key) {
89    throw Error();
90  }
91
92  @override
93  Future<ErrorImageProvider> obtainKey(ImageConfiguration configuration) {
94    return SynchronousFuture<ErrorImageProvider>(this);
95  }
96}
97
98class ObtainKeyErrorImageProvider extends ImageProvider<ObtainKeyErrorImageProvider> {
99  @override
100  ImageStreamCompleter load(ObtainKeyErrorImageProvider key) {
101    throw Error();
102  }
103
104  @override
105  Future<ObtainKeyErrorImageProvider> obtainKey(ImageConfiguration configuration) {
106    throw Error();
107  }
108}
109
110class LoadErrorImageProvider extends ImageProvider<LoadErrorImageProvider> {
111  @override
112  ImageStreamCompleter load(LoadErrorImageProvider key) {
113    throw Error();
114  }
115
116   @override
117  Future<LoadErrorImageProvider> obtainKey(ImageConfiguration configuration) {
118    return SynchronousFuture<LoadErrorImageProvider>(this);
119  }
120}
121
122class LoadErrorCompleterImageProvider extends ImageProvider<LoadErrorCompleterImageProvider> {
123  @override
124  ImageStreamCompleter load(LoadErrorCompleterImageProvider key) {
125    final Completer<void> completer = Completer<void>.sync();
126    completer.completeError(Error());
127    return OneFrameImageStreamCompleter(completer.future);
128  }
129
130   @override
131  Future<LoadErrorCompleterImageProvider> obtainKey(ImageConfiguration configuration) {
132    return SynchronousFuture<LoadErrorCompleterImageProvider>(this);
133  }
134}
135
136class TestImageStreamCompleter extends ImageStreamCompleter {}
137