| // Copyright 2019 The Fuchsia 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 'dart:io'; |
| import 'dart:typed_data'; |
| |
| import 'package:mockito/mockito.dart'; |
| import 'package:sl4f/sl4f.dart' as sl4f; |
| import 'package:test/test.dart'; |
| |
| const _timeout = Timeout(Duration(minutes: 1)); |
| |
| class MockFile extends Mock implements File {} |
| |
| void main() { |
| sl4f.Sl4f sl4fDriver; |
| sl4f.Audio audio; |
| |
| setUp(() async { |
| sl4fDriver = sl4f.Sl4f.fromEnvironment(); |
| await sl4fDriver.startServer(); |
| |
| audio = sl4f.Audio(sl4fDriver); |
| }); |
| |
| tearDown(() async { |
| await sl4fDriver.stopServer(); |
| sl4fDriver.close(); |
| }); |
| |
| group(sl4f.Audio, () { |
| test('injects audio', () async { |
| final file = MockFile(); |
| when(file.readAsBytes()).thenAnswer((_) async => Uint8List.fromList([ |
| // Just for fun, here's what these mean: |
| 0x52, 0x49, 0x46, 0x46, // "RIFF" |
| 0x28, 0x00, 0x00, 0x00, // 40 bytes total |
| 0x57, 0x41, 0x56, 0x45, // "WAVE" |
| 0x66, 0x6D, 0x74, 0x20, // "fmt " |
| 0x10, 0x00, 0x00, 0x00, // header size |
| 0x01, 0x00, // PCM encoding |
| 0x02, 0x00, // channels |
| 0x80, 0xBB, 0x00, 0x00, // sample rate |
| 0x00, 0xEE, 0x02, 0x00, // byte rate |
| 0x04, 0x00, // block align |
| 0x10, 0x00, // bits per sample |
| 0x64, 0x61, 0x74, 0x61, // "DATA" |
| 0x04, 0x00, 0x00, 0x00, // data size |
| 0xFF, 0x7F, 0x00, 0x80, // a blip. |
| ])); |
| |
| // If anything throws an exception then we've failed. |
| await audio.putInputAudio(0, file); |
| await audio.startInputInjection(0); |
| |
| // TODO(isma): Figure out why `audio record` cannot open the audio device |
| // so we can use it to test injection. |
| }); |
| |
| test('saves audio playback', () async { |
| // If anything throws an exception then we've failed. |
| await audio.startOutputSave(); |
| await audio.stopOutputSave(); |
| expect(audio.getOutputAudio(), completion(isNotNull)); |
| }); |
| }, timeout: _timeout); |
| } |