Home | History | Annotate | Download | only in source
      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:
     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:
     52   explicit ScopedTracing(bool logOn) {
     53     logging_ = logOn;
     54     StartTrace();
     55   }
     56 
     57   ~ScopedTracing() {
     58     StopTrace();
     59   }
     60 
     61  private:
     62   void StartTrace() {
     63     if (logging_) {
     64       Trace::CreateTrace();
     65       Trace::SetLevelFilter(webrtc::kTraceAll);
     66       Trace::SetTraceCallback(&trace_);
     67     }
     68   }
     69 
     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