1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "webrtc/test/testsupport/fileutils.h"
12 #include "webrtc/voice_engine/test/auto_test/fixtures/after_streaming_fixture.h"
13 #include "webrtc/voice_engine/test/auto_test/voe_standard_test.h"
14 
15 
16 class FileTest : public AfterStreamingFixture {
17  protected:
18   // Creates the string åäö.pcm.
19 // TODO(henrika): enable this test once CreateTrickyFilenameInUtf8 no longer
20 // prevents compilation on Windows. Likely webrtc/base can be used here.
21 #if 0
22   std::string CreateTrickyFilenameInUtf8() {
23     char filename[16] = { (char)0xc3, (char)0xa5,
24                           (char)0xc3, (char)0xa4,
25                           (char)0xc3, (char)0xb6,
26                           static_cast<char>(0) };
27     return std::string(filename) + ".pcm";
28   }
29 #endif  // 0
30 };
31 
32 // TODO(henrika): enable this test once CreateTrickyFilenameInUtf8 no longer
33 // prevents compilation on Windows. Likely webrtc/base can be used here.
34 #if 0
35 TEST_F(FileTest, ManualRecordToFileForThreeSecondsAndPlayback) {
36   if (!FLAGS_include_timing_dependent_tests) {
37     TEST_LOG("Skipping test - running in slow execution environment...\n");
38     return;
39   }
40 
41   SwitchToManualMicrophone();
42 
43   std::string recording_filename =
44       webrtc::test::OutputPath() + CreateTrickyFilenameInUtf8();
45 
46   TEST_LOG("Recording to %s for 3 seconds.\n", recording_filename.c_str());
47   EXPECT_EQ(0, voe_file_->StartRecordingMicrophone(recording_filename.c_str()));
48   Sleep(3000);
49   EXPECT_EQ(0, voe_file_->StopRecordingMicrophone());
50 
51   TEST_LOG("Playing back %s.\n", recording_filename.c_str());
52   EXPECT_EQ(0, voe_file_->StartPlayingFileLocally(
53       channel_, recording_filename.c_str()));
54 
55   // Play the file to the user and ensure the is-playing-locally.
56   // The clip is 3 seconds long.
57   Sleep(250);
58   EXPECT_EQ(1, voe_file_->IsPlayingFileLocally(channel_));
59   Sleep(1500);
60 }
61 #endif  // 0
62 
TEST_F(FileTest,ManualRecordPlayoutToWavFileForThreeSecondsAndPlayback)63 TEST_F(FileTest, ManualRecordPlayoutToWavFileForThreeSecondsAndPlayback) {
64   webrtc::CodecInst send_codec;
65   voe_codec_->GetSendCodec(channel_, send_codec);
66 
67   std::string recording_filename =
68       webrtc::test::OutputPath() + "playout.wav";
69 
70   TEST_LOG("Recording playout to %s.\n", recording_filename.c_str());
71   EXPECT_EQ(0, voe_file_->StartRecordingPlayout(
72       channel_, recording_filename.c_str(), &send_codec));
73   Sleep(3000);
74   EXPECT_EQ(0, voe_file_->StopRecordingPlayout(channel_));
75 
76   TEST_LOG("Playing back the recording in looping mode.\n");
77   EXPECT_EQ(0, voe_file_->StartPlayingFileAsMicrophone(
78       channel_, recording_filename.c_str(), true, false,
79       webrtc::kFileFormatWavFile));
80 
81   Sleep(2000);
82   EXPECT_EQ(1, voe_file_->IsPlayingFileAsMicrophone(channel_));
83   Sleep(2000);
84   // We should still be playing since we're looping.
85   EXPECT_EQ(1, voe_file_->IsPlayingFileAsMicrophone(channel_));
86 }
87