muxer_tests: Fix windows brokenness.

- Wrap MkvWriter in std::unique_ptr to allow use of the
  MkvWriter(FILE*) ctor (because MuxerTest owns the FILE*).
- Test temporary FILE* in Init(); don't assume it's valid.
- Close output FILE* before attempting to read it in
  CuesBeforeClusters().

Change-Id: I4848adec7a24c8987fdd0924e7474b264837e8a9
This commit is contained in:
Tom Finegan 2016-03-08 10:05:50 -08:00
parent e09251510f
commit b6174be19d

View File

@ -21,6 +21,11 @@
#include "common/libwebm_util.h"
#include "testing/test_util.h"
#ifdef _MSC_VER
// Disable MSVC warnings that suggest making code non-portable.
#pragma warning(disable:4996)
#endif
using ::mkvmuxer::AudioTrack;
using ::mkvmuxer::Chapter;
using ::mkvmuxer::Frame;
@ -50,7 +55,8 @@ class MuxerTest : public testing::Test {
filename_ = GetTempFileName();
ASSERT_GT(filename_.length(), 0u);
temp_file_ = FilePtr(std::fopen(filename_.c_str(), "wb"), FILEDeleter());
ASSERT_TRUE(writer_.Open(filename_.c_str()));
ASSERT_TRUE(temp_file_.get() != nullptr);
writer_.reset(new MkvWriter(temp_file_.get()));
is_writer_open_ = true;
memset(dummy_data_, 0, kFrameLength);
}
@ -73,12 +79,12 @@ class MuxerTest : public testing::Test {
void CloseWriter() {
if (is_writer_open_)
writer_.Close();
writer_->Close();
is_writer_open_ = false;
}
bool SegmentInit(bool output_cues) {
if (!segment_.Init(&writer_))
if (!segment_.Init(writer_.get()))
return false;
SegmentInfo* const info = segment_.GetSegmentInfo();
info->set_writing_app(kAppString);
@ -88,7 +94,7 @@ class MuxerTest : public testing::Test {
}
protected:
MkvWriter writer_;
std::unique_ptr<MkvWriter> writer_;
bool is_writer_open_ = false;
Segment segment_;
std::string filename_;
@ -448,8 +454,13 @@ TEST_F(MuxerTest, CuesBeforeClusters) {
6000000, true));
segment_.Finalize();
CloseWriter();
#ifdef _MSC_VER
// Close the output file: the MS run time won't allow mkvparser::MkvReader
// to open a file for reading when it's still open for writing.
temp_file_.reset();
#endif
mkvparser::MkvReader reader;
reader.Open(filename_.c_str());
ASSERT_EQ(0, reader.Open(filename_.c_str()));
MkvWriter cues_writer;
std::string cues_filename = GetTempFileName();
ASSERT_GT(cues_filename.length(), 0u);