blob: 284cca39b656d6752e0452d2b175d258a3655949 [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.
// This file is hand-formatted.
// ignore_for_file: use_raw_strings, avoid_escaping_inner_quotes
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:rfw/formats.dart';
import 'package:rfw/rfw.dart';
const String sourceFile = '''
import core;
widget verify { state: true } = switch args.value.c.0 {
0xDD: ColoredBox(color: 0xFF0D0D0D),
default: ColoredBox(color: args.value),
};
widget remote = SizedBox(child: args.corn.0);
widget root = remote(
corn: [
...for v in data.list:
verify(value: v),
],
);''';
void main() {
testWidgets('parseLibraryFile: source location tracking', (WidgetTester tester) async {
final RemoteWidgetLibrary test = parseLibraryFile(sourceFile);
expect(test.widgets.first.source, isNull);
});
testWidgets('parseLibraryFile: source location tracking', (WidgetTester tester) async {
String extract(BlobNode node) => (node.source!.start.source as String).substring(node.source!.start.offset, node.source!.end.offset);
// We use the actual source text as the sourceIdentifier to make it trivial to find the source contents.
// In normal operation, the sourceIdentifier would be the file name or some similar object.
final RemoteWidgetLibrary test = parseLibraryFile(sourceFile, sourceIdentifier: sourceFile);
expect(extract(test.widgets.first), '''
widget verify { state: true } = switch args.value.c.0 {
0xDD: ColoredBox(color: 0xFF0D0D0D),
default: ColoredBox(color: args.value),
};''');
expect(extract((test.widgets.first.root as Switch).input as ArgsReference), 'args.value.c.0');
});
testWidgets('Runtime: source location tracking', (WidgetTester tester) async {
String extract(BlobNode node) {
if (node.source == null) {
printOnFailure('This node had no source information: ${node.runtimeType} $node');
}
return (node.source!.start.source as String).substring(node.source!.start.offset, node.source!.end.offset);
}
final Runtime runtime = Runtime()
..update(const LibraryName(<String>['core']), createCoreWidgets())
// We use the actual source text as the sourceIdentifier to make it trivial to find the source contents.
// In normal operation, the sourceIdentifier would be the file name or some similar object.
..update(const LibraryName(<String>['test']), parseLibraryFile(sourceFile, sourceIdentifier: sourceFile));
final DynamicContent data = DynamicContent(<String, Object?>{
'list': <Object?>[
<String, Object?>{
'a': <String, Object?>{ 'b': 0xEE },
'c': <Object?>[ 0xDD ],
},
],
});
await tester.pumpWidget(
RemoteWidget(
runtime: runtime,
data: data,
widget: const FullyQualifiedWidgetName(LibraryName(<String>['test']), 'root'),
onEvent: (String eventName, DynamicMap eventArguments) {
fail('unexpected event $eventName');
},
),
);
expect(extract(Runtime.blobNodeFor(tester.firstElement(find.byType(ColoredBox)))!), 'ColoredBox(color: 0xFF0D0D0D)');
});
}