blob: 6c6f5b5707c27ec4d075d19a6b029e64040394bd [file] [log] [blame]
// 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 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'sensitive_content_utils.dart';
void main() {
// Default content sensitivity setting for testing.
const ContentSensitivity defaultContentSensitivitySetting = ContentSensitivity.autoSensitive;
// The state of content sensitivity in the app.
final SensitiveContentHost sensitiveContentHost = SensitiveContentHost.instance;
// The ContentSenstivity levels that get set by the native platform via calls to
// `SensitiveContent.setContentSensitivity`.
var setContentSensitivityArgs = <ContentSensitivity>[];
setUp(() {
// Reset number of method channel calls to `SensitiveContent.setContentSensitivity`.
setContentSensitivityArgs = <ContentSensitivity>[];
// Mock calls to the sensitive content method channel.
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(
SystemChannels.sensitiveContent,
(MethodCall methodCall) async {
if (methodCall.method == 'SensitiveContent.setContentSensitivity') {
setContentSensitivityArgs.add(
ContentSensitivity.values.firstWhere(
(ContentSensitivity cs) => cs.index == methodCall.arguments as int,
),
);
} else if (methodCall.method == 'SensitiveContent.getContentSensitivity') {
return defaultContentSensitivitySetting.index;
} else if (methodCall.method == 'SensitiveContent.isSupported') {
return true;
}
return null;
},
);
});
tearDown(() {
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger.setMockMethodCallHandler(
SystemChannels.sensitiveContent,
null,
);
});
testWidgets('one SenstiveContent widget sets content sensitivity for tree as expected', (
WidgetTester tester,
) async {
await tester.pumpWidget(
SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container()),
);
expect(sensitiveContentHost.calculatedContentSensitivity, equals(ContentSensitivity.sensitive));
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets(
'disposing only SensitiveContent widget in the tree sets content sensitivity back to the default as expected',
(WidgetTester tester) async {
await tester.pumpWidget(
SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container()),
);
await tester.pumpWidget(Container());
expect(sensitiveContentHost.calculatedContentSensitivity, isNull);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
defaultContentSensitivitySetting,
]);
},
);
group(
'one sensitive SensitiveContent widget in the tree determines content sensitivity for tree as expected',
() {
// Tests with other sensitive widget(s):
testWidgets('with another sensitive widget', (WidgetTester tester) async {
await tester.pumpWidget(
Column(
children: <Widget>[
SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container()),
SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container()),
],
),
);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(
setContentSensitivityArgs.every(
(ContentSensitivity arg) => arg == ContentSensitivity.sensitive,
),
isTrue,
);
});
testWidgets('when it gets disposed with another sensitive widget', (
WidgetTester tester,
) async {
const sc1Key = Key('sc1');
final sc1 = DisposeTester(
child: SensitiveContent(
key: sc1Key,
sensitivity: ContentSensitivity.sensitive,
child: Container(),
),
);
final sc2 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2]));
final DisposeTesterState sc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(sc1Key),
);
sc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('with two other sensitive widgets', (WidgetTester tester) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
final sc2 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
final sc3 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2, sc3]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('with two other sensitive widgets and one gets disposed', (
WidgetTester tester,
) async {
const sc1Key = Key('sc1');
final sc1 = DisposeTester(
child: SensitiveContent(
key: sc1Key,
sensitivity: ContentSensitivity.sensitive,
child: Container(),
),
);
final sc2 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
final sc3 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2, sc3]));
final DisposeTesterState sc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(sc1Key),
);
sc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
// Tests with auto sensitive widget(s):
testWidgets('with one auto sensitive widget', (WidgetTester tester) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('when it gets disposed with one auto sensitive widget', (
WidgetTester tester,
) async {
const sc1Key = Key('sc1');
final sc1 = DisposeTester(
child: SensitiveContent(
key: sc1Key,
sensitivity: ContentSensitivity.sensitive,
child: Container(),
),
);
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1]));
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
final DisposeTesterState sc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(sc1Key),
);
sc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.autoSensitive,
]);
});
testWidgets('with one auto sensitive widget that gets disposed', (WidgetTester tester) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('with two auto sensitive widgets and one gets disposed', (
WidgetTester tester,
) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, asc2]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
// Tests with not sensitive widget(s):
testWidgets('with one not sensitive widget', (WidgetTester tester) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, nsc1]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('when it gets disposed with one not sensitive widget', (
WidgetTester tester,
) async {
const sc1Key = Key('sc1');
final sc1 = DisposeTester(
child: SensitiveContent(
key: sc1Key,
sensitivity: ContentSensitivity.sensitive,
child: Container(),
),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, nsc1]));
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
final DisposeTesterState sc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(sc1Key),
);
sc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.notSensitive,
]);
});
testWidgets('with one not sensitive widget that gets disposed', (WidgetTester tester) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, nsc1]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('with two not sensitive widgets and one gets disposed', (
WidgetTester tester,
) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
const nsc1Key = Key('nsc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
final nsc2 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, nsc2]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
// Tests with an auto sensitive and a not sensitive widget(s):
testWidgets('with one not sensitive widget and one auto sensitive widget', (
WidgetTester tester,
) async {
final sc1 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, nsc1]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets(
'when it gets disposed with one not sensitive widget and one auto sensitive widget',
(WidgetTester tester) async {
const sc1Key = Key('sc1');
final sc1 = DisposeTester(
child: SensitiveContent(
key: sc1Key,
sensitivity: ContentSensitivity.sensitive,
child: Container(),
),
);
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, nsc1]));
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
final DisposeTesterState sc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(sc1Key),
);
sc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.autoSensitive,
]);
},
);
testWidgets(
'with one not sensitive widget and one auto sensitive widget and auto sensitive widget gets disposed',
(WidgetTester tester) async {
final sc1 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, nsc1]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'with one not sensitive widget and one auto sensitive widget and not sensitive widget gets disposed',
(WidgetTester tester) async {
final sc1 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, nsc1]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
// Tests with another sensitive widget, an auto sensitive, and a not sensitive widget:
testWidgets(
'with another sensitive widget, one not sensitive widget, and one auto sensitive widget',
(WidgetTester tester) async {
final sc1 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final sc2 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2, asc1, nsc1]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when it gets disposed with another sensitive widget, one not sensitive widget, and one auto sensitive widget',
(WidgetTester tester) async {
const sc1Key = Key('sc1');
final sc1 = DisposeTester(
child: SensitiveContent(
key: sc1Key,
sensitivity: ContentSensitivity.sensitive,
child: Container(),
),
);
final sc2 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2, asc1, nsc1]));
final DisposeTesterState sc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(sc1Key),
);
sc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'with another sensitive widget, one not sensitive widget, and one auto sensitive widget and the auto sensitive widget is disposed',
(WidgetTester tester) async {
final sc1 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final sc2 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2, asc1, nsc1]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'with another sensitive widget, one not sensitive widget, and one auto sensitive widget and the not sensitive widget is disposed',
(WidgetTester tester) async {
final sc1 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final sc2 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2, asc1, nsc1]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
// Tests with mutliple non-sensitive (auto sensitive, not sensitive) widgets:
testWidgets(
'with two auto sensitive widgets and one not sensitive widget and one auto sensitive widget gets disposed',
(WidgetTester tester) async {
final sc1 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, asc2, nsc1]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'with one auto sensitive widgets and two not sensitive widgets and one not sensitive widget gets disposed',
(WidgetTester tester) async {
final sc1 = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
final nsc2 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc1, asc1, nsc1, nsc2]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
},
);
group(
'one auto-sensitive (with no sensitive SensitiveContent widgets in the tree) determines content sensitivity for tree as expected',
() {
// Tests with other auto sensitive widget(s):
testWidgets('with another auto sensitive widget', (WidgetTester tester) async {
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, asc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
});
testWidgets('when it gets disposed with another auto sensitive widget', (
WidgetTester tester,
) async {
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, asc2]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
});
// Tests with not sensitive widget(s):
testWidgets('with one not sensitive widget', (WidgetTester tester) async {
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, nsc1]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
});
testWidgets('when it gets disposed with one not sensitive widget', (
WidgetTester tester,
) async {
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, nsc1]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
});
testWidgets('with one not sensitive widget that gets disposed', (WidgetTester tester) async {
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, nsc1]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
});
testWidgets('with two not sensitive widgets and one gets disposed', (
WidgetTester tester,
) async {
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
final nsc2 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, nsc1, nsc2]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
});
// Tests with another auto sensitive widget and a not sensitive widget(s):
testWidgets('with another auto sensitive widget and one not sensitive widget', (
WidgetTester tester,
) async {
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, asc2, nsc1]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
});
testWidgets(
'when it gets disposed with another auto sensitive widget and one not sensitive widget',
(WidgetTester tester) async {
const asc1Key = Key('asc1');
final asc1 = DisposeTester(
child: SensitiveContent(
key: asc1Key,
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
),
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, asc2, nsc1]));
final DisposeTesterState asc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(asc1Key),
);
asc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
},
);
testWidgets(
'with another auto sensitive widget and one not sensitive widget and the not sensitive widget gets disposed',
(WidgetTester tester) async {
final asc1 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, asc2, nsc1]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
},
);
},
);
group(
'one not sensitive (with no sensitive or auto sensitive SensitiveContent widgets in the tree) SensitiveContent widget in the tree determines content sensitivity for tree as expected',
() {
testWidgets('with another not sensitive widget', (WidgetTester tester) async {
final nsc1 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
final nsc2 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[nsc1, nsc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs.length, 1);
});
testWidgets('when it gets disposed with one not sensitive widget', (
WidgetTester tester,
) async {
const nsc1Key = Key('nsc1');
final nsc1 = DisposeTester(
child: SensitiveContent(
key: nsc1Key,
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
),
);
final nsc2 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[nsc1, nsc2]));
final DisposeTesterState nsc1DiposeTesterState = tester.firstState<DisposeTesterState>(
find.byKey(nsc1Key),
);
nsc1DiposeTesterState.disposeWidget();
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
});
},
);
group('changing SensitiveContent sensitivityLevel updates sensitive content setting as expected', () {
// Tests for one SensitiveContent widget changing sensitivity:
testWidgets('when one sensitive SensitiveContent widget changes to sensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.sensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change content sensitivity to sensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('when one sensitive SensitiveContent widget changes to autoSensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.sensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.autoSensitive,
]);
});
testWidgets('when one sensitive SensitiveContent widget changes to notSensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.sensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.notSensitive,
]);
});
testWidgets('when one autoSensitive SensitiveContent widget changes to sensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
// Change content sensitivity to sensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
});
testWidgets('when one autoSensitive SensitiveContent widget changes to autoSensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
// Change content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
});
testWidgets('when one autoSensitive SensitiveContent widget changes to notSensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
// Change content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
});
testWidgets('when one notSensitive SensitiveContent widget changes to sensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
// Change content sensitivity to sensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.sensitive,
]);
});
testWidgets('when one notSensitive SensitiveContent widget changes to autoSensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
// Change content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.autoSensitive,
]);
});
testWidgets('when one notSensitive SensitiveContent widget changes to notSensitive', (
WidgetTester tester,
) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
// Change content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
});
// Test cases with two SensitiveContent widgets, where one changes states:
testWidgets(
'when one sensitive SensitiveContent widget changes to autoSensitive with another sensitive SensitiveContent widget',
(WidgetTester tester) async {
const sc1Key = Key('sc1Key');
const sc1 = ChangeContentSensitivityTester(
key: sc1Key,
initialContentSensitivity: ContentSensitivity.sensitive,
);
final sc2 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change sc1 content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState sc1State = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(sc1Key));
sc1State.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when one sensitive SensitiveContent widget changes to notSensitive with another sensitive SensitiveContent widget',
(WidgetTester tester) async {
const sc1Key = Key('sc1Key');
const sc1 = ChangeContentSensitivityTester(
key: sc1Key,
initialContentSensitivity: ContentSensitivity.sensitive,
);
final sc2 = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[sc1, sc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change sc1 content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState sc1State = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(sc1Key));
sc1State.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when one sensitive SensitiveContent widget changes to autoSensitive with an autoSensitive SensitiveContent widget',
(WidgetTester tester) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.sensitive,
);
final asc = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc, asc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change sc content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.autoSensitive,
]);
},
);
testWidgets(
'when one sensitive SensitiveContent widget changes to notSensitive with an autoSensitive SensitiveContent widget',
(WidgetTester tester) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.sensitive,
);
final asc = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc, asc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change sc content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.autoSensitive,
]);
},
);
testWidgets(
'when one sensitive SensitiveContent widget changes to autoSensitive with a notSensitive SensitiveContent widget',
(WidgetTester tester) async {
const scKey = Key('sc1Key');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.sensitive,
);
final nsc = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc, nsc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change sc content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.autoSensitive,
]);
},
);
testWidgets(
'when one sensitive SensitiveContent widget changes to notSensitive with a notSensitive SensitiveContent widget',
(WidgetTester tester) async {
const scKey = Key('scKey');
const sc = ChangeContentSensitivityTester(
key: scKey,
initialContentSensitivity: ContentSensitivity.sensitive,
);
final nsc = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[sc, nsc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change sc content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState scState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(scKey));
scState.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.sensitive,
ContentSensitivity.notSensitive,
]);
},
);
testWidgets(
'when one autoSensitive SensitiveContent widget changes to sensitive with a sensitive SensitiveContent widget',
(WidgetTester tester) async {
const ascKey = Key('ascKey');
const asc = ChangeContentSensitivityTester(
key: ascKey,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
final sc = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[asc, sc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change asc content sensitivity to sensitive.
final ChangeContentSensitivityTesterState ascState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(ascKey));
ascState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when one autoSensitive SensitiveContent widget changes to notSensitive with a sensitive SensitiveContent widget',
(WidgetTester tester) async {
const ascKey = Key('ascKey');
const asc = ChangeContentSensitivityTester(
key: ascKey,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
final sc = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[asc, sc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
// Change asc content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState ascState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(ascKey));
ascState.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when one autoSensitive SensitiveContent widget changes to sensitive with another autoSensitive SensitiveContent widget',
(WidgetTester tester) async {
const asc1Key = Key('asc1Key');
const asc1 = ChangeContentSensitivityTester(
key: asc1Key,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, asc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
// Change asc1 content sensitivity to sensitive.
final ChangeContentSensitivityTesterState asc1State = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(asc1Key));
asc1State.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when one autoSensitive SensitiveContent widget changes to notSensitive with another autoSensitive SensitiveContent widget',
(WidgetTester tester) async {
const asc1Key = Key('asc1Key');
const asc1 = ChangeContentSensitivityTester(
key: asc1Key,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc1, asc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
// Change asc1 content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState asc1State = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(asc1Key));
asc1State.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
},
);
testWidgets(
'when one autoSensitive SensitiveContent widget changes to sensitive with a notSensitive SensitiveContent widget',
(WidgetTester tester) async {
const ascKey = Key('ascKey');
const asc = ChangeContentSensitivityTester(
key: ascKey,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
final nsc = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc, nsc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
// Change asc content sensitivity to sensitive.
final ChangeContentSensitivityTesterState ascState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(ascKey));
ascState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when one autoSensitive SensitiveContent widget changes to notSensitive with a notSensitive SensitiveContent widget',
(WidgetTester tester) async {
const ascKey = Key('ascKey');
const asc = ChangeContentSensitivityTester(
key: ascKey,
initialContentSensitivity: ContentSensitivity.autoSensitive,
);
final nsc = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[asc, nsc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
// Change asc content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState ascState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(ascKey));
ascState.changeContentSensitivityTo(ContentSensitivity.notSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
},
);
testWidgets(
'when one notSensitive SensitiveContent widget changes to sensitive with a sensitive SensitiveContent widget',
(WidgetTester tester) async {
const nscKey = Key('nscKey');
const nsc = ChangeContentSensitivityTester(
key: nscKey,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
final sc = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[nsc, sc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.sensitive,
]);
// Change nsc content sensitivity to sensitive.
final ChangeContentSensitivityTesterState nscState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(nscKey));
nscState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.sensitive,
]);
},
);
testWidgets(
'when one notSensitive SensitiveContent widget changes to autoSensitive with a sensitive SensitiveContent widget',
(WidgetTester tester) async {
const nscKey = Key('nscKey');
const nsc = ChangeContentSensitivityTester(
key: nscKey,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
final sc = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: Container());
await tester.pumpWidget(Column(children: <Widget>[nsc, sc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.sensitive,
]);
// Change nsc content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState nscState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(nscKey));
nscState.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.sensitive,
]);
},
);
testWidgets(
'when one notSensitive SensitiveContent widget changes to sensitive with an autoSensitive SensitiveContent widget',
(WidgetTester tester) async {
const nscKey = Key('nscKey');
const nsc = ChangeContentSensitivityTester(
key: nscKey,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
final asc2 = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[nsc, asc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.autoSensitive,
]);
// Change nsc content sensitivity to sensitive.
final ChangeContentSensitivityTesterState nscState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(nscKey));
nscState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.autoSensitive,
ContentSensitivity.sensitive,
]);
},
);
testWidgets(
'when one notSensitive SensitiveContent widget changes to autoSensitive with an autoSensitive SensitiveContent widget',
(WidgetTester tester) async {
const nscKey = Key('nscKey');
const nsc = ChangeContentSensitivityTester(
key: nscKey,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
final asc = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[nsc, asc]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.autoSensitive,
]);
// Change nsc content sensitivity to autoSensitive.
final ChangeContentSensitivityTesterState nscState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(nscKey));
nscState.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.autoSensitive,
]);
},
);
testWidgets(
'when one notSensitive SensitiveContent widget changes to sensitive with another notSensitive SensitiveContent widget',
(WidgetTester tester) async {
const nsc1Key = Key('nsc1Key');
const nsc1 = ChangeContentSensitivityTester(
key: nsc1Key,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
final nsc2 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[nsc1, nsc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
// Change nsc content sensitivity to sensitive.
final ChangeContentSensitivityTesterState nscState = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(nsc1Key));
nscState.changeContentSensitivityTo(ContentSensitivity.sensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.sensitive,
]);
},
);
testWidgets(
'when one notSensitive SensitiveContent widget changes to autoSensitive with another notSensitive SensitiveContent widget',
(WidgetTester tester) async {
const nsc1Key = Key('nsc1Key');
const nsc1 = ChangeContentSensitivityTester(
key: nsc1Key,
initialContentSensitivity: ContentSensitivity.notSensitive,
);
final nsc2 = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
await tester.pumpWidget(Column(children: <Widget>[nsc1, nsc2]));
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.notSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.notSensitive]);
// Change nsc1 content sensitivity to notSensitive.
final ChangeContentSensitivityTesterState nsc1State = tester
.firstState<ChangeContentSensitivityTesterState>(find.byKey(nsc1Key));
nsc1State.changeContentSensitivityTo(ContentSensitivity.autoSensitive);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.autoSensitive,
]);
},
);
});
group('SensitiveContent children of SensitiveContent widgets behaves as expected', () {
testWidgets('when a sensitive SensitiveContent widget has any SensitiveContent children', (
WidgetTester tester,
) async {
for (final ContentSensitivity contentSensitivity in ContentSensitivity.values) {
if (contentSensitivity != ContentSensitivity.autoSensitive ||
contentSensitivity != ContentSensitivity.sensitive ||
contentSensitivity != ContentSensitivity.notSensitive) {
// Ignore ContentSensitivity.unknown for this test.
break;
}
final scChild = SensitiveContent(sensitivity: contentSensitivity, child: Container());
final sc = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: scChild);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
}
});
testWidgets(
'when an autoSensitive SensitiveContent widget has a sensitive SensitiveContent child',
(WidgetTester tester) async {
final ascChild = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final sc = SensitiveContent(sensitivity: ContentSensitivity.sensitive, child: ascChild);
await tester.pumpWidget(sc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[ContentSensitivity.sensitive]);
},
);
testWidgets(
'when an autoSensitive SensitiveContent widget has an autoSensitive SensitiveContent child',
(WidgetTester tester) async {
final ascChild = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final asc = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: ascChild,
);
await tester.pumpWidget(asc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
},
);
testWidgets(
'when an autoSensitive SensitiveContent widget has an notSensitive SensitiveContent child',
(WidgetTester tester) async {
final nscChild = SensitiveContent(
sensitivity: ContentSensitivity.notSensitive,
child: Container(),
);
final asc = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: nscChild,
);
await tester.pumpWidget(asc);
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs.length, 0);
},
);
testWidgets(
'when an notSensitive SensitiveContent widget has a sensitive SensitiveContent child',
(WidgetTester tester) async {
final scChild = SensitiveContent(
sensitivity: ContentSensitivity.sensitive,
child: Container(),
);
final nsc = SensitiveContent(sensitivity: ContentSensitivity.notSensitive, child: scChild);
await tester.pumpWidget(nsc);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.sensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.sensitive,
]);
},
);
testWidgets(
'when an notSensitive SensitiveContent widget has an autoSensitive SensitiveContent child',
(WidgetTester tester) async {
final ascChild = SensitiveContent(
sensitivity: ContentSensitivity.autoSensitive,
child: Container(),
);
final nsc = SensitiveContent(sensitivity: ContentSensitivity.notSensitive, child: ascChild);
await tester.pumpWidget(nsc);
await tester.pump();
expect(
sensitiveContentHost.calculatedContentSensitivity,
equals(ContentSensitivity.autoSensitive),
);
expect(setContentSensitivityArgs, <ContentSensitivity>[
ContentSensitivity.notSensitive,
ContentSensitivity.autoSensitive,
]);
},
);
});
}