mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
84 lines
2.7 KiB
Dart
84 lines
2.7 KiB
Dart
// 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:convert';
|
|
import 'dart:html' as html;
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:test_api/expect.dart' show fail;
|
|
|
|
import 'goldens.dart';
|
|
|
|
/// An unsupported [GoldenFileComparator] that exists for API compatibility.
|
|
class LocalFileComparator extends GoldenFileComparator {
|
|
@override
|
|
Future<bool> compare(Uint8List imageBytes, Uri golden) {
|
|
throw UnsupportedError('LocalFileComparator is not supported on the web.');
|
|
}
|
|
|
|
@override
|
|
Future<void> update(Uri golden, Uint8List imageBytes) {
|
|
throw UnsupportedError('LocalFileComparator is not supported on the web.');
|
|
}
|
|
}
|
|
|
|
/// Returns whether [test] and [master] are pixel by pixel identical.
|
|
///
|
|
/// This method is not supported on the web and throws an [UnsupportedError]
|
|
/// when called.
|
|
Future<ComparisonResult> compareLists(List<int> test, List<int> master) async {
|
|
throw UnsupportedError('Golden testing is not supported on the web.');
|
|
}
|
|
|
|
/// The default [WebGoldenComparator] implementation for `flutter test`.
|
|
///
|
|
/// This comparator will send a request to the test server for golden comparison
|
|
/// which will then defer the comparison to [goldenFileComparator].
|
|
///
|
|
/// See also:
|
|
///
|
|
/// * [matchesGoldenFile], the function from [flutter_test] that invokes the
|
|
/// comparator.
|
|
class DefaultWebGoldenComparator extends WebGoldenComparator {
|
|
/// Creates a new [DefaultWebGoldenComparator] for the specified [testFile].
|
|
///
|
|
/// Golden file keys will be interpreted as file paths relative to the
|
|
/// directory in which [testFile] resides.
|
|
///
|
|
/// The [testFile] URL must represent a file.
|
|
DefaultWebGoldenComparator(this.testUri);
|
|
|
|
/// The test file currently being executed.
|
|
///
|
|
/// Golden file keys will be interpreted as file paths relative to the
|
|
/// directory in which this file resides.
|
|
Uri testUri;
|
|
|
|
@override
|
|
Future<bool> compare(double width, double height, Uri golden) async {
|
|
final String key = golden.toString();
|
|
final html.HttpRequest request = await html.HttpRequest.request(
|
|
'flutter_goldens',
|
|
method: 'POST',
|
|
sendData: json.encode(<String, Object>{
|
|
'testUri': testUri.toString(),
|
|
'key': key,
|
|
'width': width.round(),
|
|
'height': height.round(),
|
|
}),
|
|
);
|
|
final String response = request.response as String;
|
|
if (response == 'true') {
|
|
return true;
|
|
}
|
|
fail(response);
|
|
}
|
|
|
|
@override
|
|
Future<void> update(double width, double height, Uri golden) async {
|
|
// Update is handled on the server side, just use the same logic here
|
|
await compare(width, height, golden);
|
|
}
|
|
}
|