pump method

Pumps a SuperReader widget tree with the desired configuration, and returns a TestDocumentContext, which includes the artifacts connected to the widget tree, e.g., the DocumentEditor, DocumentComposer, etc.

Implementation

Future<TestDocumentContext> pump() async {
  assert(_document != null);

  final layoutKey = GlobalKey();
  final documentContext = SuperReaderContext(
    editor: createDefaultDocumentEditor(
      document: _document!,
      composer: MutableDocumentComposer(),
    ),
    getDocumentLayout: () => layoutKey.currentState as DocumentLayout,
    scroller: DocumentScroller(),
  );
  final testContext = TestDocumentContext._(
    focusNode: _focusNode ?? FocusNode(),
    document: _document!,
    layoutKey: layoutKey,
    documentContext: documentContext,
  );

  final superDocument = _buildConstrainedContent(
    _buildAncestorScrollable(
      child: SuperReaderIosControlsScope(
        controller: SuperReaderIosControlsController(
          toolbarBuilder: _iOSToolbarBuilder,
        ),
        child: SuperReader(
          focusNode: testContext.focusNode,
          autofocus: _autoFocus,
          tapRegionGroupId: _tapRegionGroupId,
          editor: documentContext.editor,
          documentLayoutKey: layoutKey,
          selectionStyle: _selectionStyles,
          gestureMode: _gestureMode ?? _defaultGestureMode,
          stylesheet: _stylesheet,
          componentBuilders: [
            ..._addedComponents,
            ...(_componentBuilders ?? readOnlyDefaultComponentBuilders),
          ],
          scrollController: _scrollController,
          androidToolbarBuilder: _androidToolbarBuilder,
        ),
      ),
    ),
  );

  await _widgetTester.pumpWidget(
    _buildWidgetTree(superDocument),
  );

  return testContext;
}