// Copyright 2019 The Chromium 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/gestures.dart'; import '../flutter_test_alternative.dart'; class TestPointerSignalListener { TestPointerSignalListener(this.event); final PointerSignalEvent event; bool callbackRan = false; void callback(PointerSignalEvent event) { expect(event, equals(this.event)); expect(callbackRan, isFalse); callbackRan = true; } } class PointerSignalTester { final PointerSignalResolver resolver = PointerSignalResolver(); PointerSignalEvent event = const PointerScrollEvent(); TestPointerSignalListener addListener() { final TestPointerSignalListener listener = TestPointerSignalListener(event); resolver.register(event, listener.callback); return listener; } /// Simulates a new event dispatch cycle by resolving the current event and /// setting a new event to use for future calls. void resolve() { resolver.resolve(event); event = const PointerScrollEvent(); } } void main() { test('Resolving with no entries should be a no-op', () { final PointerSignalTester tester = PointerSignalTester(); tester.resolver.resolve(tester.event); }); test('First entry should always win', () { final PointerSignalTester tester = PointerSignalTester(); final TestPointerSignalListener first = tester.addListener(); final TestPointerSignalListener second = tester.addListener(); tester.resolve(); expect(first.callbackRan, isTrue); expect(second.callbackRan, isFalse); }); test('Re-use after resolve should work', () { final PointerSignalTester tester = PointerSignalTester(); final TestPointerSignalListener first = tester.addListener(); final TestPointerSignalListener second = tester.addListener(); tester.resolve(); expect(first.callbackRan, isTrue); expect(second.callbackRan, isFalse); final TestPointerSignalListener newEventListener = tester.addListener(); tester.resolve(); expect(newEventListener.callbackRan, isTrue); // Nothing should have changed for the previous event's listeners. expect(first.callbackRan, isTrue); expect(second.callbackRan, isFalse); }); }