1 // Copyright (c) 2016 The WebM project authors. All Rights Reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the LICENSE file in the root of the source 5 // tree. An additional intellectual property rights grant can be found 6 // in the file PATENTS. All contributing project authors may 7 // be found in the AUTHORS file in the root of the source tree. 8 #ifndef TEST_UTILS_MOCK_CALLBACK_H_ 9 #define TEST_UTILS_MOCK_CALLBACK_H_ 10 11 #include <cstdint> 12 13 #include "gmock/gmock.h" 14 15 #include "webm/callback.h" 16 #include "webm/dom_types.h" 17 #include "webm/reader.h" 18 #include "webm/status.h" 19 20 namespace webm { 21 22 // A simple version of Callback that can be used with Google Mock. By default, 23 // the mocked methods will call through to the corresponding Callback methods. 24 class MockCallback : public Callback { 25 public: MockCallback()26 MockCallback() { 27 using testing::_; 28 using testing::Invoke; 29 30 ON_CALL(*this, OnElementBegin(_, _)) 31 .WillByDefault(Invoke(this, &MockCallback::OnElementBeginConcrete)); 32 ON_CALL(*this, OnUnknownElement(_, _, _)) 33 .WillByDefault(Invoke(this, &MockCallback::OnUnknownElementConcrete)); 34 ON_CALL(*this, OnEbml(_, _)) 35 .WillByDefault(Invoke(this, &MockCallback::OnEbmlConcrete)); 36 ON_CALL(*this, OnVoid(_, _, _)) 37 .WillByDefault(Invoke(this, &MockCallback::OnVoidConcrete)); 38 ON_CALL(*this, OnSegmentBegin(_, _)) 39 .WillByDefault(Invoke(this, &MockCallback::OnSegmentBeginConcrete)); 40 ON_CALL(*this, OnSeek(_, _)) 41 .WillByDefault(Invoke(this, &MockCallback::OnSeekConcrete)); 42 ON_CALL(*this, OnInfo(_, _)) 43 .WillByDefault(Invoke(this, &MockCallback::OnInfoConcrete)); 44 ON_CALL(*this, OnClusterBegin(_, _, _)) 45 .WillByDefault(Invoke(this, &MockCallback::OnClusterBeginConcrete)); 46 ON_CALL(*this, OnSimpleBlockBegin(_, _, _)) 47 .WillByDefault(Invoke(this, &MockCallback::OnSimpleBlockBeginConcrete)); 48 ON_CALL(*this, OnSimpleBlockEnd(_, _)) 49 .WillByDefault(Invoke(this, &MockCallback::OnSimpleBlockEndConcrete)); 50 ON_CALL(*this, OnBlockGroupBegin(_, _)) 51 .WillByDefault(Invoke(this, &MockCallback::OnBlockGroupBeginConcrete)); 52 ON_CALL(*this, OnBlockBegin(_, _, _)) 53 .WillByDefault(Invoke(this, &MockCallback::OnBlockBeginConcrete)); 54 ON_CALL(*this, OnBlockEnd(_, _)) 55 .WillByDefault(Invoke(this, &MockCallback::OnBlockEndConcrete)); 56 ON_CALL(*this, OnBlockGroupEnd(_, _)) 57 .WillByDefault(Invoke(this, &MockCallback::OnBlockGroupEndConcrete)); 58 ON_CALL(*this, OnFrame(_, _, _)) 59 .WillByDefault(Invoke(this, &MockCallback::OnFrameConcrete)); 60 ON_CALL(*this, OnClusterEnd(_, _)) 61 .WillByDefault(Invoke(this, &MockCallback::OnClusterEndConcrete)); 62 ON_CALL(*this, OnTrackEntry(_, _)) 63 .WillByDefault(Invoke(this, &MockCallback::OnTrackEntryConcrete)); 64 ON_CALL(*this, OnCuePoint(_, _)) 65 .WillByDefault(Invoke(this, &MockCallback::OnCuePointConcrete)); 66 ON_CALL(*this, OnEditionEntry(_, _)) 67 .WillByDefault(Invoke(this, &MockCallback::OnEditionEntryConcrete)); 68 ON_CALL(*this, OnTag(_, _)) 69 .WillByDefault(Invoke(this, &MockCallback::OnTagConcrete)); 70 ON_CALL(*this, OnSegmentEnd(_)) 71 .WillByDefault(Invoke(this, &MockCallback::OnSegmentEndConcrete)); 72 } 73 74 // Mocks for methods from Callback. 75 MOCK_METHOD2(OnElementBegin, 76 Status(const ElementMetadata& metadata, Action* action)); 77 78 MOCK_METHOD3(OnUnknownElement, 79 Status(const ElementMetadata& metadata, Reader* reader, 80 std::uint64_t* bytes_remaining)); 81 82 MOCK_METHOD2(OnEbml, 83 Status(const ElementMetadata& metadata, const Ebml& ebml)); 84 85 MOCK_METHOD3(OnVoid, Status(const ElementMetadata& metadata, Reader* reader, 86 std::uint64_t* bytes_remaining)); 87 88 MOCK_METHOD2(OnSegmentBegin, 89 Status(const ElementMetadata& metadata, Action* action)); 90 91 MOCK_METHOD2(OnSeek, 92 Status(const ElementMetadata& metadata, const Seek& seek)); 93 94 MOCK_METHOD2(OnInfo, 95 Status(const ElementMetadata& metadata, const Info& info)); 96 97 MOCK_METHOD3(OnClusterBegin, Status(const ElementMetadata& metadata, 98 const Cluster& cluster, Action* action)); 99 100 MOCK_METHOD3(OnSimpleBlockBegin, 101 Status(const ElementMetadata& metadata, 102 const SimpleBlock& simple_block, Action* action)); 103 104 MOCK_METHOD2(OnSimpleBlockEnd, Status(const ElementMetadata& metadata, 105 const SimpleBlock& simple_block)); 106 107 MOCK_METHOD2(OnBlockGroupBegin, 108 Status(const ElementMetadata& metadata, Action* action)); 109 110 MOCK_METHOD3(OnBlockBegin, Status(const ElementMetadata& metadata, 111 const Block& block, Action* action)); 112 113 MOCK_METHOD2(OnBlockEnd, 114 Status(const ElementMetadata& metadata, const Block& block)); 115 116 MOCK_METHOD2(OnBlockGroupEnd, Status(const ElementMetadata& metadata, 117 const BlockGroup& block_group)); 118 119 MOCK_METHOD3(OnFrame, Status(const FrameMetadata& metadata, Reader* reader, 120 std::uint64_t* bytes_remaining)); 121 122 MOCK_METHOD2(OnClusterEnd, 123 Status(const ElementMetadata& metadata, const Cluster& cluster)); 124 125 MOCK_METHOD2(OnTrackEntry, Status(const ElementMetadata& metadata, 126 const TrackEntry& track_entry)); 127 128 MOCK_METHOD2(OnCuePoint, Status(const ElementMetadata& metadata, 129 const CuePoint& cue_point)); 130 131 MOCK_METHOD2(OnEditionEntry, Status(const ElementMetadata& metadata, 132 const EditionEntry& edition_entry)); 133 134 MOCK_METHOD2(OnTag, Status(const ElementMetadata& metadata, const Tag& tag)); 135 136 MOCK_METHOD1(OnSegmentEnd, Status(const ElementMetadata& metadata)); 137 138 // Concrete implementations that the corresponding mocked method may call, 139 // provided for convenience. These methods just call through to the 140 // corrensponding methods in Callback, and provide an convenient way for the 141 // MockCallback to exhibit the same behavior as Callback. OnElementBeginConcrete(const ElementMetadata & metadata,Action * action)142 Status OnElementBeginConcrete(const ElementMetadata& metadata, 143 Action* action) { 144 return Callback::OnElementBegin(metadata, action); 145 } 146 OnUnknownElementConcrete(const ElementMetadata & metadata,Reader * reader,std::uint64_t * bytes_remaining)147 Status OnUnknownElementConcrete(const ElementMetadata& metadata, 148 Reader* reader, 149 std::uint64_t* bytes_remaining) { 150 return Callback::OnUnknownElement(metadata, reader, bytes_remaining); 151 } 152 OnEbmlConcrete(const ElementMetadata & metadata,const Ebml & ebml)153 Status OnEbmlConcrete(const ElementMetadata& metadata, const Ebml& ebml) { 154 return Callback::OnEbml(metadata, ebml); 155 } 156 OnVoidConcrete(const ElementMetadata & metadata,Reader * reader,std::uint64_t * bytes_remaining)157 Status OnVoidConcrete(const ElementMetadata& metadata, Reader* reader, 158 std::uint64_t* bytes_remaining) { 159 return Callback::OnVoid(metadata, reader, bytes_remaining); 160 } 161 OnSegmentBeginConcrete(const ElementMetadata & metadata,Action * action)162 Status OnSegmentBeginConcrete(const ElementMetadata& metadata, 163 Action* action) { 164 return Callback::OnSegmentBegin(metadata, action); 165 } 166 OnSeekConcrete(const ElementMetadata & metadata,const Seek & seek)167 Status OnSeekConcrete(const ElementMetadata& metadata, const Seek& seek) { 168 return Callback::OnSeek(metadata, seek); 169 } 170 OnInfoConcrete(const ElementMetadata & metadata,const Info & info)171 Status OnInfoConcrete(const ElementMetadata& metadata, const Info& info) { 172 return Callback::OnInfo(metadata, info); 173 } 174 OnClusterBeginConcrete(const ElementMetadata & metadata,const Cluster & cluster,Action * action)175 Status OnClusterBeginConcrete(const ElementMetadata& metadata, 176 const Cluster& cluster, Action* action) { 177 return Callback::OnClusterBegin(metadata, cluster, action); 178 } 179 OnSimpleBlockBeginConcrete(const ElementMetadata & metadata,const SimpleBlock & simple_block,Action * action)180 Status OnSimpleBlockBeginConcrete(const ElementMetadata& metadata, 181 const SimpleBlock& simple_block, 182 Action* action) { 183 return Callback::OnSimpleBlockBegin(metadata, simple_block, action); 184 } 185 OnSimpleBlockEndConcrete(const ElementMetadata & metadata,const SimpleBlock & simple_block)186 Status OnSimpleBlockEndConcrete(const ElementMetadata& metadata, 187 const SimpleBlock& simple_block) { 188 return Callback::OnSimpleBlockEnd(metadata, simple_block); 189 } 190 OnBlockGroupBeginConcrete(const ElementMetadata & metadata,Action * action)191 Status OnBlockGroupBeginConcrete(const ElementMetadata& metadata, 192 Action* action) { 193 return Callback::OnBlockGroupBegin(metadata, action); 194 } 195 OnBlockBeginConcrete(const ElementMetadata & metadata,const Block & block,Action * action)196 Status OnBlockBeginConcrete(const ElementMetadata& metadata, 197 const Block& block, Action* action) { 198 return Callback::OnBlockBegin(metadata, block, action); 199 } 200 OnBlockEndConcrete(const ElementMetadata & metadata,const Block & block)201 Status OnBlockEndConcrete(const ElementMetadata& metadata, 202 const Block& block) { 203 return Callback::OnBlockEnd(metadata, block); 204 } 205 OnBlockGroupEndConcrete(const ElementMetadata & metadata,const BlockGroup & block_group)206 Status OnBlockGroupEndConcrete(const ElementMetadata& metadata, 207 const BlockGroup& block_group) { 208 return Callback::OnBlockGroupEnd(metadata, block_group); 209 } 210 OnFrameConcrete(const FrameMetadata & metadata,Reader * reader,std::uint64_t * bytes_remaining)211 Status OnFrameConcrete(const FrameMetadata& metadata, Reader* reader, 212 std::uint64_t* bytes_remaining) { 213 return Callback::OnFrame(metadata, reader, bytes_remaining); 214 } 215 OnClusterEndConcrete(const ElementMetadata & metadata,const Cluster & cluster)216 Status OnClusterEndConcrete(const ElementMetadata& metadata, 217 const Cluster& cluster) { 218 return Callback::OnClusterEnd(metadata, cluster); 219 } 220 OnTrackEntryConcrete(const ElementMetadata & metadata,const TrackEntry & track_entry)221 Status OnTrackEntryConcrete(const ElementMetadata& metadata, 222 const TrackEntry& track_entry) { 223 return Callback::OnTrackEntry(metadata, track_entry); 224 } 225 OnCuePointConcrete(const ElementMetadata & metadata,const CuePoint & cue_point)226 Status OnCuePointConcrete(const ElementMetadata& metadata, 227 const CuePoint& cue_point) { 228 return Callback::OnCuePoint(metadata, cue_point); 229 } 230 OnEditionEntryConcrete(const ElementMetadata & metadata,const EditionEntry & edition_entry)231 Status OnEditionEntryConcrete(const ElementMetadata& metadata, 232 const EditionEntry& edition_entry) { 233 return Callback::OnEditionEntry(metadata, edition_entry); 234 } 235 OnTagConcrete(const ElementMetadata & metadata,const Tag & tag)236 Status OnTagConcrete(const ElementMetadata& metadata, const Tag& tag) { 237 return Callback::OnTag(metadata, tag); 238 } 239 OnSegmentEndConcrete(const ElementMetadata & metadata)240 Status OnSegmentEndConcrete(const ElementMetadata& metadata) { 241 return Callback::OnSegmentEnd(metadata); 242 } 243 }; 244 245 } // namespace webm 246 247 #endif // TEST_UTILS_MOCK_CALLBACK_H_ 248