blob: 034cbba04b94518c02570b071aa76e41602457ec [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' as html;
import 'dart:js_util' as js_util;
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
void main() {
setUp(() {
WebExperiments.ensureInitialized();
});
tearDown(() {
WebExperiments.instance.reset();
});
test('default web experiment values', () {
expect(WebExperiments.instance.useCanvasText, false);
});
test('can turn on/off web experiments', () {
WebExperiments.instance.updateExperiment('useCanvasText', true);
expect(WebExperiments.instance.useCanvasText, true);
WebExperiments.instance.updateExperiment('useCanvasText', false);
expect(WebExperiments.instance.useCanvasText, false);
WebExperiments.instance.updateExperiment('useCanvasText', null);
// Goes back to default value.
expect(WebExperiments.instance.useCanvasText, false);
});
test('ignores unknown experiments', () {
expect(WebExperiments.instance.useCanvasText, false);
WebExperiments.instance.updateExperiment('foobarbazqux', true);
expect(WebExperiments.instance.useCanvasText, false);
WebExperiments.instance.updateExperiment('foobarbazqux', false);
expect(WebExperiments.instance.useCanvasText, false);
});
test('can reset web experiments', () {
WebExperiments.instance.updateExperiment('useCanvasText', true);
WebExperiments.instance.reset();
expect(WebExperiments.instance.useCanvasText, false);
WebExperiments.instance.updateExperiment('useCanvasText', true);
WebExperiments.instance.updateExperiment('foobarbazqux', true);
WebExperiments.instance.reset();
expect(WebExperiments.instance.useCanvasText, false);
});
test('js interop also works', () {
expect(WebExperiments.instance.useCanvasText, false);
expect(() => jsUpdateExperiment('useCanvasText', true), returnsNormally);
expect(WebExperiments.instance.useCanvasText, true);
expect(() => jsUpdateExperiment('useCanvasText', null), returnsNormally);
expect(WebExperiments.instance.useCanvasText, false);
});
test('js interop throws on wrong type', () {
expect(() => jsUpdateExperiment(123, true), throwsA(anything));
expect(() => jsUpdateExperiment('foo', 123), throwsA(anything));
expect(() => jsUpdateExperiment('foo', 'bar'), throwsA(anything));
expect(() => jsUpdateExperiment(false, 'foo'), throwsA(anything));
});
}
void jsUpdateExperiment(dynamic name, dynamic enabled) {
js_util.callMethod(
html.window,
'_flutter_internal_update_experiment',
<dynamic>[name, enabled],
);
}