void WriteEmail(MojRefCountedPtr<AsyncEmailWriter> writer, std::string& output) { // Write to a counter output stream MojRefCountedPtr<CounterOutputStream> counter( new CounterOutputStream() ); writer->SetOutputStream(counter); MojRefCountedPtr<AsyncEmailWriterResult> writeResult(new AsyncEmailWriterResult()); writer->WriteEmail(writeResult->GetSlot()); // Make sure it's done writing ASSERT_TRUE( writeResult->Done() ); // Check if any exceptions were reported ASSERT_TRUE( !writeResult->GetException() ); // Now write it again to a buffer writeResult.reset(new AsyncEmailWriterResult()); MojRefCountedPtr<ByteBufferOutputStream> bbos( new ByteBufferOutputStream() ); writer->SetOutputStream(bbos); writer->WriteEmail(writeResult->GetSlot()); // Make sure it's done writing ASSERT_TRUE( writeResult->Done() ); // Check if any exceptions were reported ASSERT_TRUE( !writeResult->GetException() ); // Read generated email into output string ReadBuffer(output, bbos.get()); // Make sure the count matches the actual bytes written ASSERT_EQ(counter->GetBytesWritten(), output.size()); }