Skip to content

Commit

Permalink
Merge branch 'master' of github.com:flutter/devtools into path
Browse files Browse the repository at this point in the history
  • Loading branch information
polina-c committed Jul 4, 2023
2 parents 315cea1 + 0f72e7d commit 7e64790
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 123 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ class HttpTextResponseViewer extends StatelessWidget {
responseBody,
style: textStyle,
),
_ => const SizedBox()
_ => const SizedBox(),
};
},
);
Expand Down
250 changes: 128 additions & 122 deletions packages/devtools_app/test/network/network_request_inspector_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -134,154 +134,160 @@ void main() {

group('HttpResponseTrailingDropDown', () {
testWidgets(
'drop down value should update when response view type changes',
(tester) async {
NetworkResponseViewType? getCurrentDropDownValue() {
final RoundedDropDownButton<NetworkResponseViewType> dropDownWidget =
find
.byType(RoundedDropDownButton<NetworkResponseViewType>)
.evaluate()
.first
.widget as RoundedDropDownButton<NetworkResponseViewType>;
return dropDownWidget.value;
}

final currentResponseViewType = ValueNotifier<NetworkResponseViewType>(
NetworkResponseViewType.auto,
);

// Matches Drop Down value with currentResponseViewType
void checkDropDownValue() {
final currentDropDownValue = getCurrentDropDownValue();
expect(currentDropDownValue, equals(currentResponseViewType.value));
}

await tester.pumpWidget(
wrapWithControllers(
HttpResponseTrailingDropDown(
httpGet,
currentResponseViewType: currentResponseViewType,
onChanged: (value) {
currentResponseViewType.value = value;
},
'drop down value should update when response view type changes',
(tester) async {
NetworkResponseViewType? getCurrentDropDownValue() {
final RoundedDropDownButton<NetworkResponseViewType>
dropDownWidget = find
.byType(RoundedDropDownButton<NetworkResponseViewType>)
.evaluate()
.first
.widget as RoundedDropDownButton<NetworkResponseViewType>;
return dropDownWidget.value;
}

final currentResponseViewType =
ValueNotifier<NetworkResponseViewType>(
NetworkResponseViewType.auto,
);

// Matches Drop Down value with currentResponseViewType
void checkDropDownValue() {
final currentDropDownValue = getCurrentDropDownValue();
expect(currentDropDownValue, equals(currentResponseViewType.value));
}

await tester.pumpWidget(
wrapWithControllers(
HttpResponseTrailingDropDown(
httpGet,
currentResponseViewType: currentResponseViewType,
onChanged: (value) {
currentResponseViewType.value = value;
},
),
debugger: createMockDebuggerControllerWithDefaults(),
),
debugger: createMockDebuggerControllerWithDefaults(),
),
);
);

await tester.pumpAndSettle();
checkDropDownValue();
await tester.pumpAndSettle();
checkDropDownValue();

currentResponseViewType.value = NetworkResponseViewType.text;
await tester.pumpAndSettle();
checkDropDownValue();
currentResponseViewType.value = NetworkResponseViewType.text;
await tester.pumpAndSettle();
checkDropDownValue();

currentResponseViewType.value = NetworkResponseViewType.auto;
await tester.pumpAndSettle();
checkDropDownValue();
currentResponseViewType.value = NetworkResponseViewType.auto;
await tester.pumpAndSettle();
checkDropDownValue();

// pumpAndSettle so residual http timers can clear.
await tester.pumpAndSettle(const Duration(seconds: 1));
});
// pumpAndSettle so residual http timers can clear.
await tester.pumpAndSettle(const Duration(seconds: 1));
},
);

testWidgets(
'onChanged handler should trigger when changing drop down value',
(tester) async {
final currentResponseViewType = ValueNotifier<NetworkResponseViewType>(
NetworkResponseViewType.auto,
);
String initial = 'Not changed';
const String afterOnChanged = 'changed';

await tester.pumpWidget(
wrapWithControllers(
HttpResponseTrailingDropDown(
httpGet,
currentResponseViewType: currentResponseViewType,
onChanged: (value) {
initial = afterOnChanged;
},
'onChanged handler should trigger when changing drop down value',
(tester) async {
final currentResponseViewType =
ValueNotifier<NetworkResponseViewType>(
NetworkResponseViewType.auto,
);
String initial = 'Not changed';
const String afterOnChanged = 'changed';

await tester.pumpWidget(
wrapWithControllers(
HttpResponseTrailingDropDown(
httpGet,
currentResponseViewType: currentResponseViewType,
onChanged: (value) {
initial = afterOnChanged;
},
),
debugger: createMockDebuggerControllerWithDefaults(),
),
debugger: createMockDebuggerControllerWithDefaults(),
),
);
);

final dropDownFinder = find.byType(
RoundedDropDownButton<NetworkResponseViewType>,
);
final dropDownFinder = find.byType(
RoundedDropDownButton<NetworkResponseViewType>,
);

await tester.tap(dropDownFinder);
await tester.pumpAndSettle();
await tester.tap(dropDownFinder);
await tester.pumpAndSettle();

// Select Json from drop down
await tester.tap(
find.text(
NetworkResponseViewType.json.toString(),
),
);
// Select Json from drop down
await tester.tap(
find.text(
NetworkResponseViewType.json.toString(),
),
);

await tester.pumpAndSettle();
await tester.pumpAndSettle();

expect(
initial,
afterOnChanged,
);
expect(
initial,
afterOnChanged,
);

// pumpAndSettle so residual http timers can clear.
await tester.pumpAndSettle(const Duration(seconds: 1));
});
// pumpAndSettle so residual http timers can clear.
await tester.pumpAndSettle(const Duration(seconds: 1));
},
);
});

testWidgets(
'should update response view display when drop down value changes',
(tester) async {
final currentResponseNotifier =
ValueNotifier<NetworkResponseViewType>(NetworkResponseViewType.auto);
const contentType = 'application/json';
final responseBody = httpGet.requestBody ?? '{}';
const textStyle = TextStyle();
'should update response view display when drop down value changes',
(tester) async {
final currentResponseNotifier = ValueNotifier<NetworkResponseViewType>(
NetworkResponseViewType.auto,
);
const contentType = 'application/json';
final responseBody = httpGet.requestBody ?? '{}';
const textStyle = TextStyle();

await tester.pumpWidget(
wrapWithControllers(
Column(
children: [
HttpTextResponseViewer(
contentType: contentType,
responseBody: responseBody,
currentResponseNotifier: currentResponseNotifier,
textStyle: textStyle,
),
HttpResponseTrailingDropDown(
httpGet,
currentResponseViewType: currentResponseNotifier,
onChanged: (value) {},
),
],
await tester.pumpWidget(
wrapWithControllers(
Column(
children: [
HttpTextResponseViewer(
contentType: contentType,
responseBody: responseBody,
currentResponseNotifier: currentResponseNotifier,
textStyle: textStyle,
),
HttpResponseTrailingDropDown(
httpGet,
currentResponseViewType: currentResponseNotifier,
onChanged: (value) {},
),
],
),
debugger: createMockDebuggerControllerWithDefaults(),
),
debugger: createMockDebuggerControllerWithDefaults(),
),
);
);

await tester.pumpAndSettle();
await tester.pumpAndSettle();

currentResponseNotifier.value = NetworkResponseViewType.json;
currentResponseNotifier.value = NetworkResponseViewType.json;

await tester.pumpAndSettle();
await tester.pumpAndSettle();

// Check that Json viewer is visible
Finder jsonViewer = find.byType(JsonViewer);
expect(jsonViewer, findsOneWidget);
// Check that Json viewer is visible
Finder jsonViewer = find.byType(JsonViewer);
expect(jsonViewer, findsOneWidget);

currentResponseNotifier.value = NetworkResponseViewType.text;
currentResponseNotifier.value = NetworkResponseViewType.text;

await tester.pumpAndSettle();
await tester.pumpAndSettle();

// Check that Json viewer is not visible
jsonViewer = find.byType(JsonViewer);
expect(jsonViewer, findsNothing);
// Check that Json viewer is not visible
jsonViewer = find.byType(JsonViewer);
expect(jsonViewer, findsNothing);

// pumpAndSettle so residual http timers can clear.
await tester.pumpAndSettle(const Duration(seconds: 1));
});
// pumpAndSettle so residual http timers can clear.
await tester.pumpAndSettle(const Duration(seconds: 1));
},
);
});
}
9 changes: 9 additions & 0 deletions packages/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# This file exists to serve analysis_options.yaml
name: devtools_root
publish_to: none

environment:
sdk: '>=3.0.0 <4.0.0'

dev_dependencies:
flutter_lints: ^2.0.0

0 comments on commit 7e64790

Please sign in to comment.