mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
108 lines
4.4 KiB
Dart
108 lines
4.4 KiB
Dart
// 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;
|
|
const bool _defaultUseCanvasRichText = false;
|
|
|
|
void main() {
|
|
internalBootstrapBrowserTest(() => testMain);
|
|
}
|
|
|
|
void testMain() {
|
|
setUp(() {
|
|
WebExperiments.ensureInitialized();
|
|
});
|
|
|
|
tearDown(() {
|
|
WebExperiments.instance.reset();
|
|
});
|
|
|
|
test('default web experiment values', () {
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
});
|
|
|
|
test('can turn on/off web experiments', () {
|
|
WebExperiments.instance.updateExperiment('useCanvasText', true);
|
|
WebExperiments.instance.updateExperiment('useCanvasRichText', true);
|
|
expect(WebExperiments.instance.useCanvasText, true);
|
|
expect(WebExperiments.instance.useCanvasRichText, true);
|
|
|
|
WebExperiments.instance.updateExperiment('useCanvasText', false);
|
|
WebExperiments.instance.updateExperiment('useCanvasRichText', false);
|
|
expect(WebExperiments.instance.useCanvasText, false);
|
|
expect(WebExperiments.instance.useCanvasRichText, false);
|
|
|
|
WebExperiments.instance.updateExperiment('useCanvasText', null);
|
|
WebExperiments.instance.updateExperiment('useCanvasRichText', null);
|
|
// Goes back to default value.
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
});
|
|
|
|
test('ignores unknown experiments', () {
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
WebExperiments.instance.updateExperiment('foobarbazqux', true);
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
WebExperiments.instance.updateExperiment('foobarbazqux', false);
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
});
|
|
|
|
test('can reset web experiments', () {
|
|
WebExperiments.instance.updateExperiment('useCanvasText', false);
|
|
WebExperiments.instance.updateExperiment('useCanvasRichText', false);
|
|
WebExperiments.instance.reset();
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
|
|
WebExperiments.instance.updateExperiment('useCanvasText', false);
|
|
WebExperiments.instance.updateExperiment('useCanvasRichText', false);
|
|
WebExperiments.instance.updateExperiment('foobarbazqux', true);
|
|
WebExperiments.instance.reset();
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
});
|
|
|
|
test('js interop also works', () {
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
|
|
expect(() => jsUpdateExperiment('useCanvasText', true), returnsNormally);
|
|
expect(() => jsUpdateExperiment('useCanvasRichText', true), returnsNormally);
|
|
expect(WebExperiments.instance.useCanvasText, true);
|
|
expect(WebExperiments.instance.useCanvasRichText, true);
|
|
|
|
expect(() => jsUpdateExperiment('useCanvasText', null), returnsNormally);
|
|
expect(() => jsUpdateExperiment('useCanvasRichText', null), returnsNormally);
|
|
expect(WebExperiments.instance.useCanvasText, _defaultUseCanvasText);
|
|
expect(WebExperiments.instance.useCanvasRichText, _defaultUseCanvasRichText);
|
|
});
|
|
|
|
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],
|
|
);
|
|
}
|