blob: b392edb94b41ad30b57d0b4fb798a364a1dae6e3 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: implementation_imports
import 'package:fidl_fuchsia_modular/fidl_async.dart' as fidl;
import 'package:modular/src/module/_fidl_transformers.dart';
import 'package:modular/src/module/_entity_intent_parameter_data_transformer.dart';
import 'package:test/test.dart';
import '../matchers.dart';
void main() {
group('intent transformers', () {
test('convertFidlIntentToIntent clones correct fields', () {
final fidlIntent = fidl.Intent(
action: 'my-action',
handler: 'my-handler',
parameters: [
fidl.IntentParameter(
name: 'intent-param',
data: fidl.IntentParameterData.withEntityReference('entity-ref')),
],
);
final intent = convertFidlIntentToIntent(fidlIntent);
expect(intent.action, fidlIntent.action);
expect(intent.handler, fidlIntent.handler);
expect(intent.parameters, fidlIntent.parameters);
});
test('convertFidlIntentToIntent handles null fidl intent parametsrs', () {
final fidlIntent = fidl.Intent(
action: 'my-action',
parameters: null,
);
final intent = convertFidlIntentToIntent(fidlIntent);
expect(intent.parameters, isNotNull);
});
test('Intents with const parameter lists can still be modified', () {
final fidlIntent = fidl.Intent(
action: 'action',
parameters: const [],
);
// Should be able to modify the parameters on the intent.
// note: there are helper methods for this task but we want to
// isolate the test to checking for mutability and not the helper methods.
convertFidlIntentToIntent(fidlIntent).parameters.add(fidl.IntentParameter(
name: 'intent-param',
data: fidl.IntentParameterData.withEntityReference('entity-ref')));
});
});
group('intent parameter transformers', () {
test('convertFidlIntentParameterToIntentParameter clones all fields', () {
final fidlIntentParameter = fidl.IntentParameter(
name: 'foo',
data: fidl.IntentParameterData.withEntityReference('entity-ref'),
);
final intentParameter =
convertFidlIntentParameterToIntentParameter(fidlIntentParameter);
expect(intentParameter.name, fidlIntentParameter.name);
expect(intentParameter.data, fidlIntentParameter.data);
expect(intentParameter.dataTransformer, isNotNull);
});
test(
'convertFidlIntentParameterToIntentParameter throws for unsupported data type',
() {
final fidlIntentParameter = fidl.IntentParameter(
name: 'foo',
data: fidl.IntentParameterData.withLinkName('my-link'),
);
expect(() {
convertFidlIntentParameterToIntentParameter(fidlIntentParameter);
}, throwsModuleStateException);
});
test(
'convertFidlIntentParameterToIntentParameter uses correct data transformer for entity ref',
() {
final fidlIntentParameter = fidl.IntentParameter(
name: 'foo',
data: fidl.IntentParameterData.withEntityReference('ref'),
);
expect(
convertFidlIntentParameterToIntentParameter(fidlIntentParameter)
.dataTransformer,
const TypeMatcher<EntityIntentParameterDataTransformer>());
});
});
}