blob: 21c88c0b46860782e27b77104316fb062ee9239e [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.
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui';
import 'package:litetest/litetest.dart';
import 'package:path/path.dart' as path;
void main() {
test('basic image descriptor - encoded - greyscale', () async {
final Uint8List bytes = await readFile('2x2.png');
final ImmutableBuffer buffer = await ImmutableBuffer.fromUint8List(bytes);
final ImageDescriptor descriptor = await ImageDescriptor.encoded(buffer);
expect(descriptor.width, 2);
expect(descriptor.height, 2);
expect(descriptor.bytesPerPixel, 1);
final Codec codec = await descriptor.instantiateCodec();
expect(codec.frameCount, 1);
});
test('basic image descriptor - encoded - square', () async {
final Uint8List bytes = await readFile('square.png');
final ImmutableBuffer buffer = await ImmutableBuffer.fromUint8List(bytes);
final ImageDescriptor descriptor = await ImageDescriptor.encoded(buffer);
expect(descriptor.width, 10);
expect(descriptor.height, 10);
expect(descriptor.bytesPerPixel, 4);
final Codec codec = await descriptor.instantiateCodec();
expect(codec.frameCount, 1);
});
test('basic image descriptor - encoded - animated', () async {
final Uint8List bytes = await _getSkiaResource('test640x479.gif').readAsBytes();
final ImmutableBuffer buffer = await ImmutableBuffer.fromUint8List(bytes);
final ImageDescriptor descriptor = await ImageDescriptor.encoded(buffer);
expect(descriptor.width, 640);
expect(descriptor.height, 479);
expect(descriptor.bytesPerPixel, 4);
final Codec codec = await descriptor.instantiateCodec();
expect(codec.frameCount, 4);
expect(codec.repetitionCount, -1);
});
test('basic image descriptor - raw', () async {
final Uint8List bytes = Uint8List.fromList(List<int>.filled(16, 0xFFABCDEF));
final ImmutableBuffer buffer = await ImmutableBuffer.fromUint8List(bytes);
final ImageDescriptor descriptor = ImageDescriptor.raw(
buffer,
width: 4,
height: 4,
rowBytes: 4 * 4,
pixelFormat: PixelFormat.rgba8888,
);
expect(descriptor.width, 4);
expect(descriptor.height, 4);
expect(descriptor.bytesPerPixel, 4);
final Codec codec = await descriptor.instantiateCodec();
expect(codec.frameCount, 1);
});
test('HEIC image', () async {
final Uint8List bytes = await readFile('grill_chicken.heic');
final ImmutableBuffer buffer = await ImmutableBuffer.fromUint8List(bytes);
final ImageDescriptor descriptor = await ImageDescriptor.encoded(buffer);
expect(descriptor.width, 300);
expect(descriptor.height, 400);
expect(descriptor.bytesPerPixel, 4);
final Codec codec = await descriptor.instantiateCodec();
expect(codec.frameCount, 1);
}, skip: !(Platform.isAndroid || Platform.isIOS || Platform.isMacOS || Platform.isWindows));
}
Future<Uint8List> readFile(String fileName, ) async {
final File file =
File(path.join('flutter', 'testing', 'resources', fileName));
return file.readAsBytes();
}
/// Returns a File handle to a file in the skia/resources directory.
File _getSkiaResource(String fileName) {
// As Platform.script is not working for flutter_tester
// (https://github.com/flutter/flutter/issues/12847), this is currently
// assuming the curent working directory is engine/src.
// This is fragile and should be changed once the Platform.script issue is
// resolved.
final String assetPath =
path.join('third_party', 'skia', 'resources', 'images', fileName);
return File(assetPath);
}