• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_UNITTEST_UTILITIES_H_
12 #define WEBRTC_SYSTEM_WRAPPERS_SOURCE_UNITTEST_UTILITIES_H_
13 
14 // This file contains utilities that make it simpler to write unittests
15 // that are appropriate for the system_wrappers classes.
16 
17 #include <stdio.h>
18 #include <string.h>
19 
20 #include "system_wrappers/interface/trace.h"
21 
22 namespace webrtc {
23 
24 class TestTraceCallback : public TraceCallback {
25  public:
Print(const TraceLevel level,const char * traceString,const int length)26   virtual void Print(const TraceLevel level,
27                      const char* traceString,
28                      const int length) {
29     if (traceString) {
30       char* cmd_print = new char[length+1];
31       memcpy(cmd_print, traceString, length);
32       cmd_print[length] = '\0';
33       printf("%s\n", cmd_print);
34       fflush(stdout);
35       delete[] cmd_print;
36     }
37   }
38 };
39 
40 // A class that turns on tracing to stdout at the beginning of the test,
41 // and turns it off once the test is finished.
42 // Intended usage:
43 // class SomeTest : public ::testing::Test {
44 //  protected:
45 //   SomeTest()
46 //     : trace_(false) {}  // Change to true to turn on tracing.
47 //  private:
48 //   ScopedTracing trace_;
49 // }
50 class ScopedTracing {
51  public:
ScopedTracing(bool logOn)52   explicit ScopedTracing(bool logOn) {
53     logging_ = logOn;
54     StartTrace();
55   }
56 
~ScopedTracing()57   ~ScopedTracing() {
58     StopTrace();
59   }
60 
61  private:
StartTrace()62   void StartTrace() {
63     if (logging_) {
64       Trace::CreateTrace();
65       Trace::SetLevelFilter(webrtc::kTraceAll);
66       Trace::SetTraceCallback(&trace_);
67     }
68   }
69 
StopTrace()70   void StopTrace() {
71     if (logging_) {
72       Trace::ReturnTrace();
73     }
74   }
75 
76  private:
77   bool logging_;
78   TestTraceCallback trace_;
79 };
80 
81 }  // namespace webrtc
82 
83 #endif  // WEBRTC_SYSTEM_WRAPPERS_SOURCE_UNITTEST_UTILITIES_H_
84