diff --git a/webrtc/build/ios/tests/common_tests.json b/webrtc/build/ios/tests/common_tests.json index 2d3f649f7d..767fc1233f 100644 --- a/webrtc/build/ios/tests/common_tests.json +++ b/webrtc/build/ios/tests/common_tests.json @@ -1,7 +1,31 @@ { "tests": [ + { + "app": "audio_decoder_unittests" + }, + { + "app": "common_audio_unittests" + }, + { + "app": "common_video_unittests" + }, + { + "app": "modules_tests" + }, { "app": "modules_unittests" + }, + { + "app": "rtc_api_objc_tests" + }, + { + "app": "rtc_pc_unittests" + }, + { + "app": "system_wrappers_unittests" + }, + { + "app": "voice_engine_unittests" } ] } diff --git a/webrtc/common_video/common_video_unittests.gyp b/webrtc/common_video/common_video_unittests.gyp index b5e892caf0..20203f1c9c 100644 --- a/webrtc/common_video/common_video_unittests.gyp +++ b/webrtc/common_video/common_video_unittests.gyp @@ -35,6 +35,11 @@ '<(DEPTH)/testing/android/native_test.gyp:native_test_native_code', ], }], + ['OS=="ios"', { + 'mac_bundle_resources': [ + '<(DEPTH)/resources/foreman_cif.yuv', + ], + }], ], }, ], # targets diff --git a/webrtc/common_video/libyuv/libyuv_unittest.cc b/webrtc/common_video/libyuv/libyuv_unittest.cc index e7cf0759f6..826fc0e16a 100644 --- a/webrtc/common_video/libyuv/libyuv_unittest.cc +++ b/webrtc/common_video/libyuv/libyuv_unittest.cc @@ -103,8 +103,8 @@ TestLibYuv::TestLibYuv() } void TestLibYuv::SetUp() { - const std::string input_file_name = webrtc::test::ProjectRootPath() + - "resources/foreman_cif.yuv"; + const std::string input_file_name = webrtc::test::ResourcePath("foreman_cif", + "yuv"); source_file_ = fopen(input_file_name.c_str(), "rb"); ASSERT_TRUE(source_file_ != NULL) << "Cannot read file: "<< input_file_name << "\n"; diff --git a/webrtc/media/media_tests.gypi b/webrtc/media/media_tests.gypi index 307033b467..fcac6b4549 100644 --- a/webrtc/media/media_tests.gypi +++ b/webrtc/media/media_tests.gypi @@ -164,6 +164,15 @@ 'sources!': [ 'sctp/sctpdataengine_unittest.cc', ], + 'mac_bundle_resources': [ + '<(DEPTH)/resources/media/captured-320x240-2s-48.frames', + '<(DEPTH)/resources/media/faces.1280x720_P420.yuv', + '<(DEPTH)/resources/media/faces_I420.jpg', + '<(DEPTH)/resources/media/faces_I422.jpg', + '<(DEPTH)/resources/media/faces_I444.jpg', + '<(DEPTH)/resources/media/faces_I411.jpg', + '<(DEPTH)/resources/media/faces_I400.jpg', + ], }], ], }, # target rtc_media_unittests diff --git a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc index 3a3b7bcb1a..58dd6c6680 100644 --- a/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc +++ b/webrtc/modules/audio_coding/neteq/audio_decoder_unittest.cc @@ -96,9 +96,9 @@ double MseInputOutput(const std::vector& input, class AudioDecoderTest : public ::testing::Test { protected: AudioDecoderTest() - : input_audio_(webrtc::test::ProjectRootPath() + - "resources/audio_coding/testfile32kHz.pcm", - 32000), + : input_audio_( + webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm"), + 32000), codec_input_rate_hz_(32000), // Legacy default value. encoded_(NULL), frame_size_(0), diff --git a/webrtc/modules/audio_coding/neteq/neteq.gypi b/webrtc/modules/audio_coding/neteq/neteq.gypi index 50b8425c87..ead9586f5c 100644 --- a/webrtc/modules/audio_coding/neteq/neteq.gypi +++ b/webrtc/modules/audio_coding/neteq/neteq.gypi @@ -159,6 +159,11 @@ '<(DEPTH)/testing/android/native_test.gyp:native_test_native_code', ], }], + ['OS=="ios"', { + 'mac_bundle_resources': [ + '<(DEPTH)/resources/audio_coding/testfile32kHz.pcm', + ], + }], ], }, # audio_decoder_unittests diff --git a/webrtc/modules/modules.gyp b/webrtc/modules/modules.gyp index b49a5d3dca..f1e88b7d41 100644 --- a/webrtc/modules/modules.gyp +++ b/webrtc/modules/modules.gyp @@ -107,6 +107,14 @@ '<(DEPTH)/testing/android/native_test.gyp:native_test_native_code', ], }], + ['OS=="ios"', { + 'mac_bundle_resources': [ + '<(DEPTH)/resources/audio_coding/testfile32kHz.pcm', + '<(DEPTH)/resources/audio_coding/teststereo32kHz.pcm', + '<(DEPTH)/resources/foreman_cif.yuv', + '<(DEPTH)/resources/paris_qcif.yuv', + ], + }], ], }, ], diff --git a/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc b/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc index b164b7e04c..0a1ae6272e 100644 --- a/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc +++ b/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc @@ -81,7 +81,13 @@ void ReceivePackets( } } -TEST(FecTest, FecTest) { +// Too slow to finish before timeout on iOS. See webrtc:4755. +#if defined(WEBRTC_IOS) +#define MAYBE_FecTest DISABLED_FecTest +#else +#define MAYBE_FecTest FecTest +#endif +TEST(FecTest, MAYBE_FecTest) { // TODO(marpan): Split this function into subroutines/helper functions. enum { kMaxNumberMediaPackets = 48 }; enum { kMaxNumberFecPackets = 48 }; diff --git a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc index 79d75c903b..3df258a64d 100644 --- a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc +++ b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc @@ -84,7 +84,9 @@ struct RateControlMetrics { // Sequence used is foreman (CIF): may be better to use VGA for resize test. const int kCIFWidth = 352; const int kCIFHeight = 288; +#if !defined(WEBRTC_IOS) const int kNbrFramesShort = 100; // Some tests are run for shorter sequence. +#endif const int kNbrFramesLong = 299; // Parameters from VP8 wrapper, which control target size of key frames. @@ -621,6 +623,9 @@ TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossH264) { #endif // defined(WEBRTC_VIDEOPROCESSOR_H264_TESTS) +// Fails on iOS. See webrtc:4755. +#if !defined(WEBRTC_IOS) + // VP9: Run with no packet loss and fixed bitrate. Quality should be very high. // One key frame (first frame only) in sequence. Setting |key_frame_interval| // to -1 below means no periodic key frames in test. @@ -842,6 +847,8 @@ TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) { rc_metrics); } +#endif // !defined(WEBRTC_IOS) + // The tests below are currently disabled for Android. For ARM, the encoder // uses |cpu_speed| = 12, as opposed to default |cpu_speed| <= 6 for x86, // which leads to significantly different quality. The quality and rate control @@ -855,7 +862,8 @@ TEST_F(VideoProcessorIntegrationTest, Process10PercentPacketLoss) { // low to high to medium. Check that quality and encoder response to the new // target rate/per-frame bandwidth (for each rate update) is within limits. // One key frame (first frame only) in sequence. -#if defined(WEBRTC_ANDROID) +// Too slow to finish before timeout on iOS. See webrtc:4755. +#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) #define MAYBE_ProcessNoLossChangeBitRateVP8 \ DISABLED_ProcessNoLossChangeBitRateVP8 #else @@ -892,7 +900,8 @@ TEST_F(VideoProcessorIntegrationTest, MAYBE_ProcessNoLossChangeBitRateVP8) { // for the rate control metrics can be lower. One key frame (first frame only). // Note: quality after update should be higher but we currently compute quality // metrics averaged over whole sequence run. -#if defined(WEBRTC_ANDROID) +// Too slow to finish before timeout on iOS. See webrtc:4755. +#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) #define MAYBE_ProcessNoLossChangeFrameRateFrameDropVP8 \ DISABLED_ProcessNoLossChangeFrameRateFrameDropVP8 #else @@ -927,7 +936,8 @@ TEST_F(VideoProcessorIntegrationTest, // Run with no packet loss, at low bitrate. During this time we should've // resized once. Expect 2 key frames generated (first and one for resize). -#if defined(WEBRTC_ANDROID) +// Too slow to finish before timeout on iOS. See webrtc:4755. +#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) #define MAYBE_ProcessNoLossSpatialResizeFrameDropVP8 \ DISABLED_ProcessNoLossSpatialResizeFrameDropVP8 #else @@ -961,7 +971,8 @@ TEST_F(VideoProcessorIntegrationTest, // encoding rate mismatch are applied to each layer. // No dropped frames in this test, and internal spatial resizer is off. // One key frame (first frame only) in sequence, so no spatial resizing. -#if defined(WEBRTC_ANDROID) +// Too slow to finish before timeout on iOS. See webrtc:4755. +#if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) #define MAYBE_ProcessNoLossTemporalLayersVP8 \ DISABLED_ProcessNoLossTemporalLayersVP8 #else diff --git a/webrtc/modules/video_coding/test/test_util.cc b/webrtc/modules/video_coding/test/test_util.cc index 7ff663e395..8f5c55f9ba 100644 --- a/webrtc/modules/video_coding/test/test_util.cc +++ b/webrtc/modules/video_coding/test/test_util.cc @@ -26,7 +26,7 @@ CmdArgs::CmdArgs() width(352), height(288), rtt(0), - inputFile(webrtc::test::ProjectRootPath() + "/resources/foreman_cif.yuv"), + inputFile(webrtc::test::ResourcePath("foreman_cif", "yuv")), outputFile(webrtc::test::OutputPath() + "video_coding_test_output_352x288.yuv") {} diff --git a/webrtc/modules/video_coding/test/tester_main.cc b/webrtc/modules/video_coding/test/tester_main.cc index 33ca82007d..1aa2780f0f 100644 --- a/webrtc/modules/video_coding/test/tester_main.cc +++ b/webrtc/modules/video_coding/test/tester_main.cc @@ -21,7 +21,7 @@ DEFINE_int32(width, 352, "Width in pixels of the frames in the input file."); DEFINE_int32(height, 288, "Height in pixels of the frames in the input file."); DEFINE_int32(rtt, 0, "RTT (round-trip time), in milliseconds."); DEFINE_string(input_filename, - webrtc::test::ProjectRootPath() + "/resources/foreman_cif.yuv", + webrtc::test::ResourcePath("foreman_cif", "yuv"), "Input file."); DEFINE_string(output_filename, webrtc::test::OutputPath() + diff --git a/webrtc/test/testsupport/fileutils.cc b/webrtc/test/testsupport/fileutils.cc index 4ff0034dea..2fab425a31 100644 --- a/webrtc/test/testsupport/fileutils.cc +++ b/webrtc/test/testsupport/fileutils.cc @@ -43,6 +43,7 @@ namespace test { #if defined(WEBRTC_IOS) // Defined in iosfileutils.mm. No header file to discourage use elsewhere. +std::string IOSOutputPath(); std::string IOSResourcePath(std::string name, std::string extension); #endif @@ -59,9 +60,12 @@ const char* kRootDirName = "/sdcard/"; #else // The file we're looking for to identify the project root dir. const char* kProjectRootFileName = "DEPS"; +#if !defined(WEBRTC_IOS) const char* kOutputDirName = "out"; -const char* kFallbackPath = "./"; #endif +const char* kFallbackPath = "./"; +#endif // !defined(WEBRTC_ANDROID) + #if !defined(WEBRTC_IOS) const char* kResourcesDirName = "resources"; #endif @@ -140,6 +144,9 @@ std::string ProjectRootPath() { } std::string OutputPath() { +#if defined(WEBRTC_IOS) + return IOSOutputPath(); +#else std::string path = ProjectRootPath(); if (path == kCannotFindProjectRootDir) { return kFallbackPath; @@ -149,6 +156,7 @@ std::string OutputPath() { return kFallbackPath; } return path + kPathDelimiter; +#endif } std::string WorkingDir() { diff --git a/webrtc/test/testsupport/iosfileutils.mm b/webrtc/test/testsupport/iosfileutils.mm index f3615ed681..87b7397c79 100644 --- a/webrtc/test/testsupport/iosfileutils.mm +++ b/webrtc/test/testsupport/iosfileutils.mm @@ -54,6 +54,18 @@ std::string IOSResourcePath(std::string name, std::string extension) { } } +// For iOS, we don't have access to the output directory. Return the path to the +// temporary directory instead. This is mostly used by tests that need to write +// output files to disk. +std::string IOSOutputPath() { + @autoreleasepool { + NSString* tempDir = NSTemporaryDirectory(); + if (tempDir == nil) + tempDir = @"/tmp"; + return StdStringFromNSString(tempDir); + } +} + } // namespace test } // namespace webrtc diff --git a/webrtc/webrtc_tests.gypi b/webrtc/webrtc_tests.gypi index 7b01ad1451..3563fee0f5 100644 --- a/webrtc/webrtc_tests.gypi +++ b/webrtc/webrtc_tests.gypi @@ -204,6 +204,12 @@ '<(DEPTH)/testing/android/native_test.gyp:native_test_native_code', ], }], + ['OS=="ios"', { + 'mac_bundle_resources': [ + '<(DEPTH)/resources/foreman_cif_short.yuv', + '<(DEPTH)/resources/voice_engine/audio_long16.pcm', + ], + }], ['enable_protobuf==1', { 'defines': [ 'ENABLE_RTC_EVENT_LOG',