// 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_driver/src/common/wait.dart'; import '../common.dart'; void main() { group('WaitForCondition', () { test('WaitForCondition serialize', () { expect( const WaitForCondition(NoTransientCallbacks()).serialize(), {'command': 'waitForCondition', 'conditionName': 'NoTransientCallbacksCondition'}); }); test('WaitForCondition serialize with timeout', () { expect( const WaitForCondition(NoTransientCallbacks(), timeout: Duration(milliseconds: 10)).serialize(), {'command': 'waitForCondition', 'timeout': '10', 'conditionName': 'NoTransientCallbacksCondition'}); }); test('WaitForCondition deserialize', () { final Map jsonMap = { 'command': 'waitForCondition', 'conditionName': 'NoTransientCallbacksCondition', }; final WaitForCondition waitForCondition = WaitForCondition.deserialize(jsonMap); expect(waitForCondition.kind, 'waitForCondition'); expect(waitForCondition.condition, equals(const NoTransientCallbacks())); }); test('WaitForCondition deserialize with timeout', () { final Map jsonMap = { 'command': 'waitForCondition', 'timeout': '10', 'conditionName': 'NoTransientCallbacksCondition', }; final WaitForCondition waitForCondition = WaitForCondition.deserialize(jsonMap); expect(waitForCondition.kind, 'waitForCondition'); expect(waitForCondition.condition, equals(const NoTransientCallbacks())); expect(waitForCondition.timeout, equals(const Duration(milliseconds: 10))); }); }); group('NoTransientCallbacksCondition', () { test('NoTransientCallbacksCondition serialize', () { expect( const NoTransientCallbacks().serialize(), {'conditionName': 'NoTransientCallbacksCondition'}); }); test('NoTransientCallbacksCondition deserialize', () { final Map jsonMap = { 'conditionName': 'NoTransientCallbacksCondition', }; final NoTransientCallbacks condition = NoTransientCallbacks.deserialize(jsonMap); expect(condition, equals(const NoTransientCallbacks())); expect(condition.serialize(), equals(jsonMap)); }); test('NoTransientCallbacksCondition deserialize error', () { expect( () => NoTransientCallbacks.deserialize({'conditionName': 'Unknown'}), throwsA(predicate((SerializationException e) => e.message == 'Error occurred during deserializing the NoTransientCallbacksCondition JSON string: {conditionName: Unknown}'))); }); }); group('NoPendingFrameCondition', () { test('NoPendingFrameCondition serialize', () { expect(const NoPendingFrame().serialize(), { 'conditionName': 'NoPendingFrameCondition', }); }); test('NoPendingFrameCondition deserialize', () { final Map jsonMap = { 'conditionName': 'NoPendingFrameCondition', }; final NoPendingFrame condition = NoPendingFrame.deserialize(jsonMap); expect(condition, equals(const NoPendingFrame())); expect(condition.serialize(), equals(jsonMap)); }); test('NoPendingFrameCondition deserialize error', () { expect( () => NoPendingFrame.deserialize({'conditionName': 'Unknown'}), throwsA(predicate((SerializationException e) => e.message == 'Error occurred during deserializing the NoPendingFrameCondition JSON string: {conditionName: Unknown}'))); }); }); group('FirstFrameRasterizedCondition', () { test('FirstFrameRasterizedCondition serialize', () { expect( const FirstFrameRasterized().serialize(), {'conditionName': 'FirstFrameRasterizedCondition'}); }); test('FirstFrameRasterizedCondition deserialize', () { final Map jsonMap = { 'conditionName': 'FirstFrameRasterizedCondition', }; final FirstFrameRasterized condition = FirstFrameRasterized.deserialize(jsonMap); expect(condition, equals(const FirstFrameRasterized())); expect(condition.serialize(), equals(jsonMap)); }); test('FirstFrameRasterizedCondition deserialize error', () { expect( () => FirstFrameRasterized.deserialize({'conditionName': 'Unknown'}), throwsA(predicate((SerializationException e) => e.message == 'Error occurred during deserializing the FirstFrameRasterizedCondition JSON string: {conditionName: Unknown}'))); }); }); group('CombinedCondition', () { test('CombinedCondition serialize', () { const CombinedCondition combinedCondition = CombinedCondition([ NoTransientCallbacks(), NoPendingFrame() ]); expect(combinedCondition.serialize(), { 'conditionName': 'CombinedCondition', 'conditions': '[{"conditionName":"NoTransientCallbacksCondition"},{"conditionName":"NoPendingFrameCondition"}]', }); }); test('CombinedCondition serialize - empty condition list', () { const CombinedCondition combinedCondition = CombinedCondition([]); expect(combinedCondition.serialize(), { 'conditionName': 'CombinedCondition', 'conditions': '[]', }); }); test('CombinedCondition deserialize - empty condition list', () { final Map jsonMap = { 'conditionName': 'CombinedCondition', 'conditions': '[]', }; final CombinedCondition condition = CombinedCondition.deserialize(jsonMap); expect(condition.conditions, equals([])); expect(condition.serialize(), equals(jsonMap)); }); test('CombinedCondition deserialize', () { final Map jsonMap = { 'conditionName': 'CombinedCondition', 'conditions': '[{"conditionName":"NoPendingFrameCondition"},{"conditionName":"NoTransientCallbacksCondition"}]', }; final CombinedCondition condition = CombinedCondition.deserialize(jsonMap); expect( condition.conditions, equals([ const NoPendingFrame(), const NoTransientCallbacks(), ])); expect(condition.serialize(), jsonMap); }); test('CombinedCondition deserialize - no condition list', () { final CombinedCondition condition = CombinedCondition.deserialize({'conditionName': 'CombinedCondition',}); expect(condition.conditions, equals([])); expect(condition.serialize(), { 'conditionName': 'CombinedCondition', 'conditions': '[]', }); }); test('CombinedCondition deserialize error', () { expect( () => CombinedCondition.deserialize({'conditionName': 'Unknown'}), throwsA(predicate((SerializationException e) => e.message == 'Error occurred during deserializing the CombinedCondition JSON string: {conditionName: Unknown}'))); }); test('CombinedCondition deserialize error - Unknown condition type', () { expect( () { return CombinedCondition.deserialize({ 'conditionName': 'CombinedCondition', 'conditions': '[{"conditionName":"UnknownCondition"},{"conditionName":"NoTransientCallbacksCondition"}]', }); }, throwsA(predicate((SerializationException e) => e.message == 'Unsupported wait condition UnknownCondition in the JSON string {conditionName: UnknownCondition}'))); }); }); }