blob: 2487efab5f5a5a3caf44c8c6c950970e1f4c31f8 [file] [log] [blame]
// Copyright 2013 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.
// @dart = 2.6
import 'dart:html' show ProgressEvent;
import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart' as ui;
import 'common.dart';
import 'test_data.dart';
void main() {
internalBootstrapBrowserTest(() => testMain);
}
void testMain() {
group('CanvasKit image', () {
setUpAll(() async {
await ui.webOnlyInitializePlatform();
});
test('CkAnimatedImage toString', () {
final SkAnimatedImage skAnimatedImage =
canvasKit.MakeAnimatedImageFromEncoded(kTransparentImage);
final CkAnimatedImage image = CkAnimatedImage(skAnimatedImage);
expect(image.toString(), '[1×1]');
image.dispose();
});
test('CkAnimatedImage can be explicitly disposed of', () {
final SkAnimatedImage skAnimatedImage =
canvasKit.MakeAnimatedImageFromEncoded(kTransparentImage);
final CkAnimatedImage image = CkAnimatedImage(skAnimatedImage);
expect(image.box.isDeleted, false);
expect(image.debugDisposed, false);
image.dispose();
expect(image.box.isDeleted, true);
expect(image.debugDisposed, true);
image.dispose();
expect(image.box.isDeleted, true);
expect(image.debugDisposed, true);
});
test('CkAnimatedImage can be cloned and explicitly disposed of', () async {
final SkAnimatedImage skAnimatedImage =
canvasKit.MakeAnimatedImageFromEncoded(kTransparentImage);
final CkAnimatedImage image = CkAnimatedImage(skAnimatedImage);
final CkAnimatedImage imageClone = image.clone();
expect(image.isCloneOf(imageClone), true);
expect(image.box.isDeleted, false);
await Future<void>.delayed(Duration.zero);
expect(skAnimatedImage.isDeleted(), false);
image.dispose();
expect(image.box.isDeleted, true);
expect(imageClone.box.isDeleted, false);
await Future<void>.delayed(Duration.zero);
expect(skAnimatedImage.isDeleted(), false);
imageClone.dispose();
expect(image.box.isDeleted, true);
expect(imageClone.box.isDeleted, true);
await Future<void>.delayed(Duration.zero);
expect(skAnimatedImage.isDeleted(), true);
});
test('CkImage toString', () {
final SkImage skImage =
canvasKit.MakeAnimatedImageFromEncoded(kTransparentImage)
.getCurrentFrame();
final CkImage image = CkImage(skImage);
expect(image.toString(), '[1×1]');
image.dispose();
});
test('CkImage can be explicitly disposed of', () {
final SkImage skImage =
canvasKit.MakeAnimatedImageFromEncoded(kTransparentImage)
.getCurrentFrame();
final CkImage image = CkImage(skImage);
expect(image.debugDisposed, false);
expect(image.box.isDeleted, false);
image.dispose();
expect(image.debugDisposed, true);
expect(image.box.isDeleted, true);
image.dispose();
expect(image.debugDisposed, true);
expect(image.box.isDeleted, true);
});
test('CkImage can be explicitly disposed of when cloned', () async {
final SkImage skImage =
canvasKit.MakeAnimatedImageFromEncoded(kTransparentImage)
.getCurrentFrame();
final CkImage image = CkImage(skImage);
final CkImage imageClone = image.clone();
expect(image.isCloneOf(imageClone), true);
expect(image.box.isDeleted, false);
await Future<void>.delayed(Duration.zero);
expect(skImage.isDeleted(), false);
image.dispose();
expect(image.box.isDeleted, true);
expect(imageClone.box.isDeleted, false);
await Future<void>.delayed(Duration.zero);
expect(skImage.isDeleted(), false);
imageClone.dispose();
expect(image.box.isDeleted, true);
expect(imageClone.box.isDeleted, true);
await Future<void>.delayed(Duration.zero);
expect(skImage.isDeleted(), true);
});
test('skiaInstantiateWebImageCodec throws exception if given invalid URL',
() async {
expect(skiaInstantiateWebImageCodec('invalid-url', null),
throwsA(isA<ProgressEvent>()));
});
// TODO: https://github.com/flutter/flutter/issues/60040
}, skip: isIosSafari);
}