mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
226 lines
7.3 KiB
Dart
226 lines
7.3 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:async';
|
|
import 'dart:io' show Platform;
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:flutter/gestures.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_driver/driver_extension.dart';
|
|
|
|
import 'src/basic_messaging.dart';
|
|
import 'src/method_calls.dart';
|
|
import 'src/pair.dart';
|
|
import 'src/test_step.dart';
|
|
|
|
void main() {
|
|
enableFlutterDriverExtension();
|
|
// TODO(goderbauer): Remove this once https://github.com/flutter/flutter/issues/116663 is diagnosed.
|
|
debugPrintHitTestResults = true;
|
|
runApp(const TestApp());
|
|
}
|
|
|
|
class TestApp extends StatefulWidget {
|
|
const TestApp({super.key});
|
|
|
|
@override
|
|
State<TestApp> createState() => _TestAppState();
|
|
}
|
|
|
|
class _TestAppState extends State<TestApp> {
|
|
static final dynamic anUnknownValue = DateTime.fromMillisecondsSinceEpoch(1520777802314);
|
|
static final List<dynamic> aList = <dynamic>[
|
|
false,
|
|
0,
|
|
0.0,
|
|
'hello',
|
|
<dynamic>[
|
|
<String, dynamic>{'key': 42},
|
|
],
|
|
];
|
|
static final Map<String, dynamic> aMap = <String, dynamic>{
|
|
'a': false,
|
|
'b': 0,
|
|
'c': 0.0,
|
|
'd': 'hello',
|
|
'e': <dynamic>[
|
|
<String, dynamic>{'key': 42},
|
|
],
|
|
};
|
|
static final Uint8List someUint8s = Uint8List.fromList(<int>[
|
|
0xBA,
|
|
0x5E,
|
|
0xBA,
|
|
0x11,
|
|
]);
|
|
static final Int32List someInt32s = Int32List.fromList(<int>[
|
|
-0x7fffffff - 1,
|
|
0,
|
|
0x7fffffff,
|
|
]);
|
|
static final Int64List someInt64s = Int64List.fromList(<int>[
|
|
-0x7fffffffffffffff - 1,
|
|
0,
|
|
0x7fffffffffffffff,
|
|
]);
|
|
static final Float32List someFloat32s = Float32List.fromList(<double>[
|
|
double.nan,
|
|
double.negativeInfinity,
|
|
-double.maxFinite,
|
|
-double.minPositive,
|
|
-0.0,
|
|
0.0,
|
|
double.minPositive,
|
|
double.maxFinite,
|
|
double.infinity,
|
|
]);
|
|
static final Float64List someFloat64s =
|
|
Float64List.fromList(<double>[
|
|
double.nan,
|
|
double.negativeInfinity,
|
|
-double.maxFinite,
|
|
-double.minPositive,
|
|
-0.0,
|
|
0.0,
|
|
double.minPositive,
|
|
double.maxFinite,
|
|
double.infinity,
|
|
]);
|
|
static final dynamic aCompoundUnknownValue = <dynamic>[
|
|
anUnknownValue,
|
|
Pair(anUnknownValue, aList),
|
|
];
|
|
static final List<TestStep> steps = <TestStep>[
|
|
() => methodCallJsonSuccessHandshake(null),
|
|
() => methodCallJsonSuccessHandshake(true),
|
|
() => methodCallJsonSuccessHandshake(7),
|
|
() => methodCallJsonSuccessHandshake('world'),
|
|
() => methodCallJsonSuccessHandshake(aList),
|
|
() => methodCallJsonSuccessHandshake(aMap),
|
|
() => methodCallJsonNotImplementedHandshake(),
|
|
() => methodCallStandardSuccessHandshake(null),
|
|
() => methodCallStandardSuccessHandshake(true),
|
|
() => methodCallStandardSuccessHandshake(7),
|
|
() => methodCallStandardSuccessHandshake('world'),
|
|
() => methodCallStandardSuccessHandshake(aList),
|
|
() => methodCallStandardSuccessHandshake(aMap),
|
|
() => methodCallStandardSuccessHandshake(anUnknownValue),
|
|
() => methodCallStandardSuccessHandshake(aCompoundUnknownValue),
|
|
() => methodCallJsonErrorHandshake(null),
|
|
() => methodCallJsonErrorHandshake('world'),
|
|
() => methodCallStandardErrorHandshake(null),
|
|
() => methodCallStandardErrorHandshake('world'),
|
|
() => methodCallStandardNotImplementedHandshake(),
|
|
() => basicBinaryHandshake(null),
|
|
if (!Platform.isMacOS)
|
|
// Note, it was decided that this will function differently on macOS. See
|
|
// also: https://github.com/flutter/flutter/issues/110865.
|
|
() => basicBinaryHandshake(ByteData(0)),
|
|
() => basicBinaryHandshake(ByteData(4)..setUint32(0, 0x12345678)),
|
|
() => basicStringHandshake('hello, world'),
|
|
() => basicStringHandshake('hello \u263A \u{1f602} unicode'),
|
|
if (!Platform.isMacOS)
|
|
// Note, it was decided that this will function differently on macOS. See
|
|
// also: https://github.com/flutter/flutter/issues/110865.
|
|
() => basicStringHandshake(''),
|
|
() => basicStringHandshake(null),
|
|
() => basicJsonHandshake(null),
|
|
() => basicJsonHandshake(true),
|
|
() => basicJsonHandshake(false),
|
|
() => basicJsonHandshake(0),
|
|
() => basicJsonHandshake(-7),
|
|
() => basicJsonHandshake(7),
|
|
() => basicJsonHandshake(1 << 32),
|
|
() => basicJsonHandshake(1 << 56),
|
|
() => basicJsonHandshake(0.0),
|
|
() => basicJsonHandshake(-7.0),
|
|
() => basicJsonHandshake(7.0),
|
|
() => basicJsonHandshake(''),
|
|
() => basicJsonHandshake('hello, world'),
|
|
() => basicJsonHandshake('hello, "world"'),
|
|
() => basicJsonHandshake('hello \u263A \u{1f602} unicode'),
|
|
() => basicJsonHandshake(<dynamic>[]),
|
|
() => basicJsonHandshake(aList),
|
|
() => basicJsonHandshake(<String, dynamic>{}),
|
|
() => basicJsonHandshake(aMap),
|
|
() => basicStandardHandshake(null),
|
|
() => basicStandardHandshake(true),
|
|
() => basicStandardHandshake(false),
|
|
() => basicStandardHandshake(0),
|
|
() => basicStandardHandshake(-7),
|
|
() => basicStandardHandshake(7),
|
|
() => basicStandardHandshake(1 << 32),
|
|
() => basicStandardHandshake(1 << 64),
|
|
() => basicStandardHandshake(1 << 128),
|
|
() => basicStandardHandshake(0.0),
|
|
() => basicStandardHandshake(-7.0),
|
|
() => basicStandardHandshake(7.0),
|
|
() => basicStandardHandshake(''),
|
|
() => basicStandardHandshake('hello, world'),
|
|
() => basicStandardHandshake('hello \u263A \u{1f602} unicode'),
|
|
() => basicStandardHandshake(someUint8s),
|
|
() => basicStandardHandshake(someInt32s),
|
|
() => basicStandardHandshake(someInt64s),
|
|
() => basicStandardHandshake(someFloat32s),
|
|
() => basicStandardHandshake(someFloat64s),
|
|
() => basicStandardHandshake(<dynamic>[]),
|
|
() => basicStandardHandshake(aList),
|
|
() => basicStandardHandshake(<String, dynamic>{}),
|
|
() => basicStandardHandshake(<dynamic, dynamic>{7: true, false: -7}),
|
|
() => basicStandardHandshake(aMap),
|
|
() => basicStandardHandshake(anUnknownValue),
|
|
() => basicStandardHandshake(aCompoundUnknownValue),
|
|
() => basicBinaryMessageToUnknownChannel(),
|
|
() => basicStringMessageToUnknownChannel(),
|
|
() => basicJsonMessageToUnknownChannel(),
|
|
() => basicStandardMessageToUnknownChannel(),
|
|
if (Platform.isIOS || Platform.isAndroid || Platform.isMacOS)
|
|
() => basicBackgroundStandardEcho(123),
|
|
];
|
|
Future<TestStepResult>? _result;
|
|
int _step = 0;
|
|
|
|
void _executeNextStep() {
|
|
setState(() {
|
|
if (_step < steps.length) {
|
|
_result = steps[_step++]();
|
|
} else {
|
|
_result = Future<TestStepResult>.value(TestStepResult.complete);
|
|
}
|
|
});
|
|
}
|
|
|
|
Widget _buildTestResultWidget(
|
|
BuildContext context,
|
|
AsyncSnapshot<TestStepResult> snapshot,
|
|
) {
|
|
return TestStepResult.fromSnapshot(snapshot).asWidget(context);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: 'Channels Test',
|
|
home: Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text('Channels Test'),
|
|
),
|
|
body: Padding(
|
|
padding: const EdgeInsets.all(20.0),
|
|
child: FutureBuilder<TestStepResult>(
|
|
future: _result,
|
|
builder: _buildTestResultWidget,
|
|
),
|
|
),
|
|
floatingActionButton: FloatingActionButton(
|
|
key: const ValueKey<String>('step'),
|
|
onPressed: _executeNextStep,
|
|
child: const Icon(Icons.navigate_next),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|