// 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/bootstrap/browser.dart'; import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; const bool _defaultUseCanvasText = true; void main() { internalBootstrapBrowserTest(() => testMain); } void testMain() { setUp(() { WebExperiments.ensureInitialized(); }); tearDown(() { WebExperiments.instance.reset(); }); test('default web experiment values', () { expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); }); 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, _defaultUseCanvasText); }); test('ignores unknown experiments', () { expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); WebExperiments.instance.updateExperiment('foobarbazqux', true); expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); WebExperiments.instance.updateExperiment('foobarbazqux', false); expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); }); test('can reset web experiments', () { WebExperiments.instance.updateExperiment('useCanvasText', false); WebExperiments.instance.reset(); expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); WebExperiments.instance.updateExperiment('useCanvasText', false); WebExperiments.instance.updateExperiment('foobarbazqux', true); WebExperiments.instance.reset(); expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); }); test('js interop also works', () { expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); expect(() => jsUpdateExperiment('useCanvasText', true), returnsNormally); expect(WebExperiments.instance.useCanvasText, true); expect(() => jsUpdateExperiment('useCanvasText', null), returnsNormally); expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText); }); 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', [name, enabled], ); }