matchDirectChildrenOf method

Future<List<Widget>> matchDirectChildrenOf(
  1. dynamic selector, {
  2. List<AFWidgetID?>? expectedIds,
  3. bool shouldScroll = true,
  4. bool ignoreUnderWidget = false,
  5. AFFilterWidgetDelegate? filterWidgets,
})

Implementation

Future<List<Widget>> matchDirectChildrenOf(dynamic selector, { List<AFWidgetID?>? expectedIds, bool shouldScroll = true,
  bool ignoreUnderWidget = false, AFFilterWidgetDelegate? filterWidgets }) async {
  final elems = await findElementsFor(selector, ignoreUnderWidget: ignoreUnderWidget, shouldScroll: shouldScroll);
  if(elems.isEmpty) {
    throw AFException("Could not find element $selector");
  }
  if(elems.length > 1) {
    throw AFException("matchDirectChildrenOf should refer to exactly one widget.");
  }

  final sel = AFWidgetSelector.createSelector(activeSelectorPath, selector);
  final elem = elems.first;
  final extractor = AFibF.g.screenTests.findExtractor(AFExtractWidgetAction.extractChildren, elem);
  if(extractor == null) {
    throw AFException("No children extractor for element $selector with widget type ${elem.widget.runtimeType}");
  }
  dynamic resultDyn = extractor.extract(AFExtractWidgetAction.extractChildren, sel, elem);
  if(resultDyn is! List<Widget>) {
    throw AFException("The extractor ${extractor.runtimeType} did not return a list of widget children");
  }

  var result = resultDyn;

  if(filterWidgets != null) {
    result = result.where((e) => filterWidgets(e) ).toList();
  }

  if(expectedIds != null) {
    expectWidgetIds(result, expectedIds);
  }
  return result;
}