• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2005, Google Inc.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
6 // met:
7 //
8 //     * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 //     * Redistributions in binary form must reproduce the above
11 // copyright notice, this list of conditions and the following disclaimer
12 // in the documentation and/or other materials provided with the
13 // distribution.
14 //     * Neither the name of Google Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 
30 // Utility functions and classes used by the Google C++ testing framework.
31 //
32 // Author: wan@google.com (Zhanyong Wan)
33 //
34 // This file contains purely Google Test's internal implementation.  Please
35 // DO NOT #INCLUDE IT IN A USER PROGRAM.
36 
37 #ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_
38 #define GTEST_SRC_GTEST_INTERNAL_INL_H_
39 
40 // GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is
41 // part of Google Test's implementation; otherwise it's undefined.
42 #if !GTEST_IMPLEMENTATION_
43 // A user is trying to include this from his code - just say no.
44 #error "gtest-internal-inl.h is part of Google Test's internal implementation."
45 #error "It must not be included except by Google Test itself."
46 #endif  // GTEST_IMPLEMENTATION_
47 
48 #include <errno.h>
49 #include <stddef.h>
50 #include <stdlib.h>   // For strtoll/_strtoul64.
51 
52 #include <string>
53 
54 #include <gtest/internal/gtest-port.h>
55 
56 #if GTEST_OS_WINDOWS
57 #include <windows.h>  // For DWORD.
58 #endif  // GTEST_OS_WINDOWS
59 
60 #include <gtest/gtest.h>
61 #include <gtest/gtest-spi.h>
62 
63 namespace testing {
64 
65 // Declares the flags.
66 //
67 // We don't want the users to modify this flag in the code, but want
68 // Google Test's own unit tests to be able to access it. Therefore we
69 // declare it here as opposed to in gtest.h.
70 GTEST_DECLARE_bool_(death_test_use_fork);
71 
72 namespace internal {
73 
74 // The value of GetTestTypeId() as seen from within the Google Test
75 // library.  This is solely for testing GetTestTypeId().
76 extern const TypeId kTestTypeIdInGoogleTest;
77 
78 // Names of the flags (needed for parsing Google Test flags).
79 const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests";
80 const char kBreakOnFailureFlag[] = "break_on_failure";
81 const char kCatchExceptionsFlag[] = "catch_exceptions";
82 const char kColorFlag[] = "color";
83 const char kFilterFlag[] = "filter";
84 const char kListTestsFlag[] = "list_tests";
85 const char kOutputFlag[] = "output";
86 const char kPrintTimeFlag[] = "print_time";
87 const char kRepeatFlag[] = "repeat";
88 const char kThrowOnFailureFlag[] = "throw_on_failure";
89 
90 // This class saves the values of all Google Test flags in its c'tor, and
91 // restores them in its d'tor.
92 class GTestFlagSaver {
93  public:
94   // The c'tor.
GTestFlagSaver()95   GTestFlagSaver() {
96     also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests);
97     break_on_failure_ = GTEST_FLAG(break_on_failure);
98     catch_exceptions_ = GTEST_FLAG(catch_exceptions);
99     color_ = GTEST_FLAG(color);
100     death_test_style_ = GTEST_FLAG(death_test_style);
101     death_test_use_fork_ = GTEST_FLAG(death_test_use_fork);
102     filter_ = GTEST_FLAG(filter);
103     internal_run_death_test_ = GTEST_FLAG(internal_run_death_test);
104     list_tests_ = GTEST_FLAG(list_tests);
105     output_ = GTEST_FLAG(output);
106     print_time_ = GTEST_FLAG(print_time);
107     repeat_ = GTEST_FLAG(repeat);
108     throw_on_failure_ = GTEST_FLAG(throw_on_failure);
109   }
110 
111   // The d'tor is not virtual.  DO NOT INHERIT FROM THIS CLASS.
~GTestFlagSaver()112   ~GTestFlagSaver() {
113     GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_;
114     GTEST_FLAG(break_on_failure) = break_on_failure_;
115     GTEST_FLAG(catch_exceptions) = catch_exceptions_;
116     GTEST_FLAG(color) = color_;
117     GTEST_FLAG(death_test_style) = death_test_style_;
118     GTEST_FLAG(death_test_use_fork) = death_test_use_fork_;
119     GTEST_FLAG(filter) = filter_;
120     GTEST_FLAG(internal_run_death_test) = internal_run_death_test_;
121     GTEST_FLAG(list_tests) = list_tests_;
122     GTEST_FLAG(output) = output_;
123     GTEST_FLAG(print_time) = print_time_;
124     GTEST_FLAG(repeat) = repeat_;
125     GTEST_FLAG(throw_on_failure) = throw_on_failure_;
126   }
127  private:
128   // Fields for saving the original values of flags.
129   bool also_run_disabled_tests_;
130   bool break_on_failure_;
131   bool catch_exceptions_;
132   String color_;
133   String death_test_style_;
134   bool death_test_use_fork_;
135   String filter_;
136   String internal_run_death_test_;
137   bool list_tests_;
138   String output_;
139   bool print_time_;
140   bool pretty_;
141   internal::Int32 repeat_;
142   bool throw_on_failure_;
143 } GTEST_ATTRIBUTE_UNUSED_;
144 
145 // Converts a Unicode code point to a narrow string in UTF-8 encoding.
146 // code_point parameter is of type UInt32 because wchar_t may not be
147 // wide enough to contain a code point.
148 // The output buffer str must containt at least 32 characters.
149 // The function returns the address of the output buffer.
150 // If the code_point is not a valid Unicode code point
151 // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output
152 // as '(Invalid Unicode 0xXXXXXXXX)'.
153 char* CodePointToUtf8(UInt32 code_point, char* str);
154 
155 // Converts a wide string to a narrow string in UTF-8 encoding.
156 // The wide string is assumed to have the following encoding:
157 //   UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS)
158 //   UTF-32 if sizeof(wchar_t) == 4 (on Linux)
159 // Parameter str points to a null-terminated wide string.
160 // Parameter num_chars may additionally limit the number
161 // of wchar_t characters processed. -1 is used when the entire string
162 // should be processed.
163 // If the string contains code points that are not valid Unicode code points
164 // (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output
165 // as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding
166 // and contains invalid UTF-16 surrogate pairs, values in those pairs
167 // will be encoded as individual Unicode characters from Basic Normal Plane.
168 String WideStringToUtf8(const wchar_t* str, int num_chars);
169 
170 // Returns the number of active threads, or 0 when there is an error.
171 size_t GetThreadCount();
172 
173 // Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file
174 // if the variable is present. If a file already exists at this location, this
175 // function will write over it. If the variable is present, but the file cannot
176 // be created, prints an error and exits.
177 void WriteToShardStatusFileIfNeeded();
178 
179 // Checks whether sharding is enabled by examining the relevant
180 // environment variable values. If the variables are present,
181 // but inconsistent (e.g., shard_index >= total_shards), prints
182 // an error and exits. If in_subprocess_for_death_test, sharding is
183 // disabled because it must only be applied to the original test
184 // process. Otherwise, we could filter out death tests we intended to execute.
185 bool ShouldShard(const char* total_shards_str, const char* shard_index_str,
186                  bool in_subprocess_for_death_test);
187 
188 // Parses the environment variable var as an Int32. If it is unset,
189 // returns default_val. If it is not an Int32, prints an error and
190 // and aborts.
191 Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val);
192 
193 // Given the total number of shards, the shard index, and the test id,
194 // returns true iff the test should be run on this shard. The test id is
195 // some arbitrary but unique non-negative integer assigned to each test
196 // method. Assumes that 0 <= shard_index < total_shards.
197 bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id);
198 
199 // List is a simple singly-linked list container.
200 //
201 // We cannot use std::list as Microsoft's implementation of STL has
202 // problems when exception is disabled.  There is a hack to work
203 // around this, but we've seen cases where the hack fails to work.
204 //
205 // TODO(wan): switch to std::list when we have a reliable fix for the
206 // STL problem, e.g. when we upgrade to the next version of Visual
207 // C++, or (more likely) switch to STLport.
208 //
209 // The element type must support copy constructor.
210 
211 // Forward declare List
212 template <typename E>  // E is the element type.
213 class List;
214 
215 // ListNode is a node in a singly-linked list.  It consists of an
216 // element and a pointer to the next node.  The last node in the list
217 // has a NULL value for its next pointer.
218 template <typename E>  // E is the element type.
219 class ListNode {
220   friend class List<E>;
221 
222  private:
223 
224   E element_;
225   ListNode * next_;
226 
227   // The c'tor is private s.t. only in the ListNode class and in its
228   // friend class List we can create a ListNode object.
229   //
230   // Creates a node with a given element value.  The next pointer is
231   // set to NULL.
232   //
233   // ListNode does NOT have a default constructor.  Always use this
234   // constructor (with parameter) to create a ListNode object.
ListNode(const E & element)235   explicit ListNode(const E & element) : element_(element), next_(NULL) {}
236 
237   // We disallow copying ListNode
238   GTEST_DISALLOW_COPY_AND_ASSIGN_(ListNode);
239 
240  public:
241 
242   // Gets the element in this node.
element()243   E & element() { return element_; }
element()244   const E & element() const { return element_; }
245 
246   // Gets the next node in the list.
next()247   ListNode * next() { return next_; }
next()248   const ListNode * next() const { return next_; }
249 };
250 
251 
252 // List is a simple singly-linked list container.
253 template <typename E>  // E is the element type.
254 class List {
255  public:
256 
257   // Creates an empty list.
List()258   List() : head_(NULL), last_(NULL), size_(0) {}
259 
260   // D'tor.
261   virtual ~List();
262 
263   // Clears the list.
Clear()264   void Clear() {
265     if ( size_ > 0 ) {
266       // 1. Deletes every node.
267       ListNode<E> * node = head_;
268       ListNode<E> * next = node->next();
269       for ( ; ; ) {
270         delete node;
271         node = next;
272         if ( node == NULL ) break;
273         next = node->next();
274       }
275 
276       // 2. Resets the member variables.
277       head_ = last_ = NULL;
278       size_ = 0;
279     }
280   }
281 
282   // Gets the number of elements.
size()283   int size() const { return size_; }
284 
285   // Returns true if the list is empty.
IsEmpty()286   bool IsEmpty() const { return size() == 0; }
287 
288   // Gets the first element of the list, or NULL if the list is empty.
Head()289   ListNode<E> * Head() { return head_; }
Head()290   const ListNode<E> * Head() const { return head_; }
291 
292   // Gets the last element of the list, or NULL if the list is empty.
Last()293   ListNode<E> * Last() { return last_; }
Last()294   const ListNode<E> * Last() const { return last_; }
295 
296   // Adds an element to the end of the list.  A copy of the element is
297   // created using the copy constructor, and then stored in the list.
298   // Changes made to the element in the list doesn't affect the source
299   // object, and vice versa.
PushBack(const E & element)300   void PushBack(const E & element) {
301     ListNode<E> * new_node = new ListNode<E>(element);
302 
303     if ( size_ == 0 ) {
304       head_ = last_ = new_node;
305       size_ = 1;
306     } else {
307       last_->next_ = new_node;
308       last_ = new_node;
309       size_++;
310     }
311   }
312 
313   // Adds an element to the beginning of this list.
PushFront(const E & element)314   void PushFront(const E& element) {
315     ListNode<E>* const new_node = new ListNode<E>(element);
316 
317     if ( size_ == 0 ) {
318       head_ = last_ = new_node;
319       size_ = 1;
320     } else {
321       new_node->next_ = head_;
322       head_ = new_node;
323       size_++;
324     }
325   }
326 
327   // Removes an element from the beginning of this list.  If the
328   // result argument is not NULL, the removed element is stored in the
329   // memory it points to.  Otherwise the element is thrown away.
330   // Returns true iff the list wasn't empty before the operation.
PopFront(E * result)331   bool PopFront(E* result) {
332     if (size_ == 0) return false;
333 
334     if (result != NULL) {
335       *result = head_->element_;
336     }
337 
338     ListNode<E>* const old_head = head_;
339     size_--;
340     if (size_ == 0) {
341       head_ = last_ = NULL;
342     } else {
343       head_ = head_->next_;
344     }
345     delete old_head;
346 
347     return true;
348   }
349 
350   // Inserts an element after a given node in the list.  It's the
351   // caller's responsibility to ensure that the given node is in the
352   // list.  If the given node is NULL, inserts the element at the
353   // front of the list.
InsertAfter(ListNode<E> * node,const E & element)354   ListNode<E>* InsertAfter(ListNode<E>* node, const E& element) {
355     if (node == NULL) {
356       PushFront(element);
357       return Head();
358     }
359 
360     ListNode<E>* const new_node = new ListNode<E>(element);
361     new_node->next_ = node->next_;
362     node->next_ = new_node;
363     size_++;
364     if (node == last_) {
365       last_ = new_node;
366     }
367 
368     return new_node;
369   }
370 
371   // Returns the number of elements that satisfy a given predicate.
372   // The parameter 'predicate' is a Boolean function or functor that
373   // accepts a 'const E &', where E is the element type.
374   template <typename P>  // P is the type of the predicate function/functor
CountIf(P predicate)375   int CountIf(P predicate) const {
376     int count = 0;
377     for ( const ListNode<E> * node = Head();
378           node != NULL;
379           node = node->next() ) {
380       if ( predicate(node->element()) ) {
381         count++;
382       }
383     }
384 
385     return count;
386   }
387 
388   // Applies a function/functor to each element in the list.  The
389   // parameter 'functor' is a function/functor that accepts a 'const
390   // E &', where E is the element type.  This method does not change
391   // the elements.
392   template <typename F>  // F is the type of the function/functor
ForEach(F functor)393   void ForEach(F functor) const {
394     for ( const ListNode<E> * node = Head();
395           node != NULL;
396           node = node->next() ) {
397       functor(node->element());
398     }
399   }
400 
401   // Returns the first node whose element satisfies a given predicate,
402   // or NULL if none is found.  The parameter 'predicate' is a
403   // function/functor that accepts a 'const E &', where E is the
404   // element type.  This method does not change the elements.
405   template <typename P>  // P is the type of the predicate function/functor.
FindIf(P predicate)406   const ListNode<E> * FindIf(P predicate) const {
407     for ( const ListNode<E> * node = Head();
408           node != NULL;
409           node = node->next() ) {
410       if ( predicate(node->element()) ) {
411         return node;
412       }
413     }
414 
415     return NULL;
416   }
417 
418   template <typename P>
FindIf(P predicate)419   ListNode<E> * FindIf(P predicate) {
420     for ( ListNode<E> * node = Head();
421           node != NULL;
422           node = node->next() ) {
423       if ( predicate(node->element() ) ) {
424         return node;
425       }
426     }
427 
428     return NULL;
429   }
430 
431  private:
432   ListNode<E>* head_;  // The first node of the list.
433   ListNode<E>* last_;  // The last node of the list.
434   int size_;           // The number of elements in the list.
435 
436   // We disallow copying List.
437   GTEST_DISALLOW_COPY_AND_ASSIGN_(List);
438 };
439 
440 // The virtual destructor of List.
441 template <typename E>
~List()442 List<E>::~List() {
443   Clear();
444 }
445 
446 // A function for deleting an object.  Handy for being used as a
447 // functor.
448 template <typename T>
Delete(T * x)449 static void Delete(T * x) {
450   delete x;
451 }
452 
453 // A copyable object representing a user specified test property which can be
454 // output as a key/value string pair.
455 //
456 // Don't inherit from TestProperty as its destructor is not virtual.
457 class TestProperty {
458  public:
459   // C'tor.  TestProperty does NOT have a default constructor.
460   // Always use this constructor (with parameters) to create a
461   // TestProperty object.
TestProperty(const char * key,const char * value)462   TestProperty(const char* key, const char* value) :
463     key_(key), value_(value) {
464   }
465 
466   // Gets the user supplied key.
key()467   const char* key() const {
468     return key_.c_str();
469   }
470 
471   // Gets the user supplied value.
value()472   const char* value() const {
473     return value_.c_str();
474   }
475 
476   // Sets a new value, overriding the one supplied in the constructor.
SetValue(const char * new_value)477   void SetValue(const char* new_value) {
478     value_ = new_value;
479   }
480 
481  private:
482   // The key supplied by the user.
483   String key_;
484   // The value supplied by the user.
485   String value_;
486 };
487 
488 // A predicate that checks the key of a TestProperty against a known key.
489 //
490 // TestPropertyKeyIs is copyable.
491 class TestPropertyKeyIs {
492  public:
493   // Constructor.
494   //
495   // TestPropertyKeyIs has NO default constructor.
TestPropertyKeyIs(const char * key)496   explicit TestPropertyKeyIs(const char* key)
497       : key_(key) {}
498 
499   // Returns true iff the test name of test property matches on key_.
operator()500   bool operator()(const TestProperty& test_property) const {
501     return String(test_property.key()).Compare(key_) == 0;
502   }
503 
504  private:
505   String key_;
506 };
507 
508 // The result of a single Test.  This includes a list of
509 // TestPartResults, a list of TestProperties, a count of how many
510 // death tests there are in the Test, and how much time it took to run
511 // the Test.
512 //
513 // TestResult is not copyable.
514 class TestResult {
515  public:
516   // Creates an empty TestResult.
517   TestResult();
518 
519   // D'tor.  Do not inherit from TestResult.
520   ~TestResult();
521 
522   // Gets the list of TestPartResults.
test_part_results()523   const internal::List<TestPartResult> & test_part_results() const {
524     return test_part_results_;
525   }
526 
527   // Gets the list of TestProperties.
test_properties()528   const internal::List<internal::TestProperty> & test_properties() const {
529     return test_properties_;
530   }
531 
532   // Gets the number of successful test parts.
533   int successful_part_count() const;
534 
535   // Gets the number of failed test parts.
536   int failed_part_count() const;
537 
538   // Gets the number of all test parts.  This is the sum of the number
539   // of successful test parts and the number of failed test parts.
540   int total_part_count() const;
541 
542   // Returns true iff the test passed (i.e. no test part failed).
Passed()543   bool Passed() const { return !Failed(); }
544 
545   // Returns true iff the test failed.
Failed()546   bool Failed() const { return failed_part_count() > 0; }
547 
548   // Returns true iff the test fatally failed.
549   bool HasFatalFailure() const;
550 
551   // Returns the elapsed time, in milliseconds.
elapsed_time()552   TimeInMillis elapsed_time() const { return elapsed_time_; }
553 
554   // Sets the elapsed time.
set_elapsed_time(TimeInMillis elapsed)555   void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
556 
557   // Adds a test part result to the list.
558   void AddTestPartResult(const TestPartResult& test_part_result);
559 
560   // Adds a test property to the list. The property is validated and may add
561   // a non-fatal failure if invalid (e.g., if it conflicts with reserved
562   // key names). If a property is already recorded for the same key, the
563   // value will be updated, rather than storing multiple values for the same
564   // key.
565   void RecordProperty(const internal::TestProperty& test_property);
566 
567   // Adds a failure if the key is a reserved attribute of Google Test
568   // testcase tags.  Returns true if the property is valid.
569   // TODO(russr): Validate attribute names are legal and human readable.
570   static bool ValidateTestProperty(const internal::TestProperty& test_property);
571 
572   // Returns the death test count.
death_test_count()573   int death_test_count() const { return death_test_count_; }
574 
575   // Increments the death test count, returning the new count.
increment_death_test_count()576   int increment_death_test_count() { return ++death_test_count_; }
577 
578   // Clears the object.
579   void Clear();
580  private:
581   // Protects mutable state of the property list and of owned properties, whose
582   // values may be updated.
583   internal::Mutex test_properites_mutex_;
584 
585   // The list of TestPartResults
586   internal::List<TestPartResult> test_part_results_;
587   // The list of TestProperties
588   internal::List<internal::TestProperty> test_properties_;
589   // Running count of death tests.
590   int death_test_count_;
591   // The elapsed time, in milliseconds.
592   TimeInMillis elapsed_time_;
593 
594   // We disallow copying TestResult.
595   GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult);
596 };  // class TestResult
597 
598 class TestInfoImpl {
599  public:
600   TestInfoImpl(TestInfo* parent, const char* test_case_name,
601                const char* name, const char* test_case_comment,
602                const char* comment, TypeId fixture_class_id,
603                internal::TestFactoryBase* factory);
604   ~TestInfoImpl();
605 
606   // Returns true if this test should run.
should_run()607   bool should_run() const { return should_run_; }
608 
609   // Sets the should_run member.
set_should_run(bool should)610   void set_should_run(bool should) { should_run_ = should; }
611 
612   // Returns true if this test is disabled. Disabled tests are not run.
is_disabled()613   bool is_disabled() const { return is_disabled_; }
614 
615   // Sets the is_disabled member.
set_is_disabled(bool is)616   void set_is_disabled(bool is) { is_disabled_ = is; }
617 
618   // Returns the test case name.
test_case_name()619   const char* test_case_name() const { return test_case_name_.c_str(); }
620 
621   // Returns the test name.
name()622   const char* name() const { return name_.c_str(); }
623 
624   // Returns the test case comment.
test_case_comment()625   const char* test_case_comment() const { return test_case_comment_.c_str(); }
626 
627   // Returns the test comment.
comment()628   const char* comment() const { return comment_.c_str(); }
629 
630   // Returns the ID of the test fixture class.
fixture_class_id()631   TypeId fixture_class_id() const { return fixture_class_id_; }
632 
633   // Returns the test result.
result()634   internal::TestResult* result() { return &result_; }
result()635   const internal::TestResult* result() const { return &result_; }
636 
637   // Creates the test object, runs it, records its result, and then
638   // deletes it.
639   void Run();
640 
641   // Calls the given TestInfo object's Run() method.
RunTest(TestInfo * test_info)642   static void RunTest(TestInfo * test_info) {
643     test_info->impl()->Run();
644   }
645 
646   // Clears the test result.
ClearResult()647   void ClearResult() { result_.Clear(); }
648 
649   // Clears the test result in the given TestInfo object.
ClearTestResult(TestInfo * test_info)650   static void ClearTestResult(TestInfo * test_info) {
651     test_info->impl()->ClearResult();
652   }
653 
654  private:
655   // These fields are immutable properties of the test.
656   TestInfo* const parent_;          // The owner of this object
657   const String test_case_name_;     // Test case name
658   const String name_;               // Test name
659   const String test_case_comment_;  // Test case comment
660   const String comment_;            // Test comment
661   const TypeId fixture_class_id_;   // ID of the test fixture class
662   bool should_run_;                 // True iff this test should run
663   bool is_disabled_;                // True iff this test is disabled
664   internal::TestFactoryBase* const factory_;  // The factory that creates
665                                               // the test object
666 
667   // This field is mutable and needs to be reset before running the
668   // test for the second time.
669   internal::TestResult result_;
670 
671   GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfoImpl);
672 };
673 
674 }  // namespace internal
675 
676 // A test case, which consists of a list of TestInfos.
677 //
678 // TestCase is not copyable.
679 class TestCase {
680  public:
681   // Creates a TestCase with the given name.
682   //
683   // TestCase does NOT have a default constructor.  Always use this
684   // constructor to create a TestCase object.
685   //
686   // Arguments:
687   //
688   //   name:         name of the test case
689   //   set_up_tc:    pointer to the function that sets up the test case
690   //   tear_down_tc: pointer to the function that tears down the test case
691   TestCase(const char* name, const char* comment,
692            Test::SetUpTestCaseFunc set_up_tc,
693            Test::TearDownTestCaseFunc tear_down_tc);
694 
695   // Destructor of TestCase.
696   virtual ~TestCase();
697 
698   // Gets the name of the TestCase.
name()699   const char* name() const { return name_.c_str(); }
700 
701   // Returns the test case comment.
comment()702   const char* comment() const { return comment_.c_str(); }
703 
704   // Returns true if any test in this test case should run.
should_run()705   bool should_run() const { return should_run_; }
706 
707   // Sets the should_run member.
set_should_run(bool should)708   void set_should_run(bool should) { should_run_ = should; }
709 
710   // Gets the (mutable) list of TestInfos in this TestCase.
test_info_list()711   internal::List<TestInfo*>& test_info_list() { return *test_info_list_; }
712 
713   // Gets the (immutable) list of TestInfos in this TestCase.
test_info_list()714   const internal::List<TestInfo *> & test_info_list() const {
715     return *test_info_list_;
716   }
717 
718   // Gets the number of successful tests in this test case.
719   int successful_test_count() const;
720 
721   // Gets the number of failed tests in this test case.
722   int failed_test_count() const;
723 
724   // Gets the number of disabled tests in this test case.
725   int disabled_test_count() const;
726 
727   // Get the number of tests in this test case that should run.
728   int test_to_run_count() const;
729 
730   // Gets the number of all tests in this test case.
731   int total_test_count() const;
732 
733   // Returns true iff the test case passed.
Passed()734   bool Passed() const { return !Failed(); }
735 
736   // Returns true iff the test case failed.
Failed()737   bool Failed() const { return failed_test_count() > 0; }
738 
739   // Returns the elapsed time, in milliseconds.
elapsed_time()740   internal::TimeInMillis elapsed_time() const { return elapsed_time_; }
741 
742   // Adds a TestInfo to this test case.  Will delete the TestInfo upon
743   // destruction of the TestCase object.
744   void AddTestInfo(TestInfo * test_info);
745 
746   // Finds and returns a TestInfo with the given name.  If one doesn't
747   // exist, returns NULL.
748   TestInfo* GetTestInfo(const char* test_name);
749 
750   // Clears the results of all tests in this test case.
751   void ClearResult();
752 
753   // Clears the results of all tests in the given test case.
ClearTestCaseResult(TestCase * test_case)754   static void ClearTestCaseResult(TestCase* test_case) {
755     test_case->ClearResult();
756   }
757 
758   // Runs every test in this TestCase.
759   void Run();
760 
761   // Runs every test in the given TestCase.
RunTestCase(TestCase * test_case)762   static void RunTestCase(TestCase * test_case) { test_case->Run(); }
763 
764   // Returns true iff test passed.
TestPassed(const TestInfo * test_info)765   static bool TestPassed(const TestInfo * test_info) {
766     const internal::TestInfoImpl* const impl = test_info->impl();
767     return impl->should_run() && impl->result()->Passed();
768   }
769 
770   // Returns true iff test failed.
TestFailed(const TestInfo * test_info)771   static bool TestFailed(const TestInfo * test_info) {
772     const internal::TestInfoImpl* const impl = test_info->impl();
773     return impl->should_run() && impl->result()->Failed();
774   }
775 
776   // Returns true iff test is disabled.
TestDisabled(const TestInfo * test_info)777   static bool TestDisabled(const TestInfo * test_info) {
778     return test_info->impl()->is_disabled();
779   }
780 
781   // Returns true if the given test should run.
ShouldRunTest(const TestInfo * test_info)782   static bool ShouldRunTest(const TestInfo *test_info) {
783     return test_info->impl()->should_run();
784   }
785 
786  private:
787   // Name of the test case.
788   internal::String name_;
789   // Comment on the test case.
790   internal::String comment_;
791   // List of TestInfos.
792   internal::List<TestInfo*>* test_info_list_;
793   // Pointer to the function that sets up the test case.
794   Test::SetUpTestCaseFunc set_up_tc_;
795   // Pointer to the function that tears down the test case.
796   Test::TearDownTestCaseFunc tear_down_tc_;
797   // True iff any test in this test case should run.
798   bool should_run_;
799   // Elapsed time, in milliseconds.
800   internal::TimeInMillis elapsed_time_;
801 
802   // We disallow copying TestCases.
803   GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase);
804 };
805 
806 namespace internal {
807 
808 // Class UnitTestOptions.
809 //
810 // This class contains functions for processing options the user
811 // specifies when running the tests.  It has only static members.
812 //
813 // In most cases, the user can specify an option using either an
814 // environment variable or a command line flag.  E.g. you can set the
815 // test filter using either GTEST_FILTER or --gtest_filter.  If both
816 // the variable and the flag are present, the latter overrides the
817 // former.
818 class UnitTestOptions {
819  public:
820   // Functions for processing the gtest_output flag.
821 
822   // Returns the output format, or "" for normal printed output.
823   static String GetOutputFormat();
824 
825   // Returns the absolute path of the requested output file, or the
826   // default (test_detail.xml in the original working directory) if
827   // none was explicitly specified.
828   static String GetAbsolutePathToOutputFile();
829 
830   // Functions for processing the gtest_filter flag.
831 
832   // Returns true iff the wildcard pattern matches the string.  The
833   // first ':' or '\0' character in pattern marks the end of it.
834   //
835   // This recursive algorithm isn't very efficient, but is clear and
836   // works well enough for matching test names, which are short.
837   static bool PatternMatchesString(const char *pattern, const char *str);
838 
839   // Returns true iff the user-specified filter matches the test case
840   // name and the test name.
841   static bool FilterMatchesTest(const String &test_case_name,
842                                 const String &test_name);
843 
844 #if GTEST_OS_WINDOWS
845   // Function for supporting the gtest_catch_exception flag.
846 
847   // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the
848   // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise.
849   // This function is useful as an __except condition.
850   static int GTestShouldProcessSEH(DWORD exception_code);
851 #endif  // GTEST_OS_WINDOWS
852 
853   // Returns true if "name" matches the ':' separated list of glob-style
854   // filters in "filter".
855   static bool MatchesFilter(const String& name, const char* filter);
856 };
857 
858 // Returns the current application's name, removing directory path if that
859 // is present.  Used by UnitTestOptions::GetOutputFile.
860 FilePath GetCurrentExecutableName();
861 
862 // The role interface for getting the OS stack trace as a string.
863 class OsStackTraceGetterInterface {
864  public:
OsStackTraceGetterInterface()865   OsStackTraceGetterInterface() {}
~OsStackTraceGetterInterface()866   virtual ~OsStackTraceGetterInterface() {}
867 
868   // Returns the current OS stack trace as a String.  Parameters:
869   //
870   //   max_depth  - the maximum number of stack frames to be included
871   //                in the trace.
872   //   skip_count - the number of top frames to be skipped; doesn't count
873   //                against max_depth.
874   virtual String CurrentStackTrace(int max_depth, int skip_count) = 0;
875 
876   // UponLeavingGTest() should be called immediately before Google Test calls
877   // user code. It saves some information about the current stack that
878   // CurrentStackTrace() will use to find and hide Google Test stack frames.
879   virtual void UponLeavingGTest() = 0;
880 
881  private:
882   GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface);
883 };
884 
885 // A working implementation of the OsStackTraceGetterInterface interface.
886 class OsStackTraceGetter : public OsStackTraceGetterInterface {
887  public:
OsStackTraceGetter()888   OsStackTraceGetter() {}
889   virtual String CurrentStackTrace(int max_depth, int skip_count);
890   virtual void UponLeavingGTest();
891 
892   // This string is inserted in place of stack frames that are part of
893   // Google Test's implementation.
894   static const char* const kElidedFramesMarker;
895 
896  private:
897   Mutex mutex_;  // protects all internal state
898 
899   // We save the stack frame below the frame that calls user code.
900   // We do this because the address of the frame immediately below
901   // the user code changes between the call to UponLeavingGTest()
902   // and any calls to CurrentStackTrace() from within the user code.
903   void* caller_frame_;
904 
905   GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter);
906 };
907 
908 // Information about a Google Test trace point.
909 struct TraceInfo {
910   const char* file;
911   int line;
912   String message;
913 };
914 
915 // This is the default global test part result reporter used in UnitTestImpl.
916 // This class should only be used by UnitTestImpl.
917 class DefaultGlobalTestPartResultReporter
918   : public TestPartResultReporterInterface {
919  public:
920   explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test);
921   // Implements the TestPartResultReporterInterface. Reports the test part
922   // result in the current test.
923   virtual void ReportTestPartResult(const TestPartResult& result);
924 
925  private:
926   UnitTestImpl* const unit_test_;
927 
928   GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter);
929 };
930 
931 // This is the default per thread test part result reporter used in
932 // UnitTestImpl. This class should only be used by UnitTestImpl.
933 class DefaultPerThreadTestPartResultReporter
934     : public TestPartResultReporterInterface {
935  public:
936   explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test);
937   // Implements the TestPartResultReporterInterface. The implementation just
938   // delegates to the current global test part result reporter of *unit_test_.
939   virtual void ReportTestPartResult(const TestPartResult& result);
940 
941  private:
942   UnitTestImpl* const unit_test_;
943 
944   GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter);
945 };
946 
947 // The private implementation of the UnitTest class.  We don't protect
948 // the methods under a mutex, as this class is not accessible by a
949 // user and the UnitTest class that delegates work to this class does
950 // proper locking.
951 class UnitTestImpl {
952  public:
953   explicit UnitTestImpl(UnitTest* parent);
954   virtual ~UnitTestImpl();
955 
956   // There are two different ways to register your own TestPartResultReporter.
957   // You can register your own repoter to listen either only for test results
958   // from the current thread or for results from all threads.
959   // By default, each per-thread test result repoter just passes a new
960   // TestPartResult to the global test result reporter, which registers the
961   // test part result for the currently running test.
962 
963   // Returns the global test part result reporter.
964   TestPartResultReporterInterface* GetGlobalTestPartResultReporter();
965 
966   // Sets the global test part result reporter.
967   void SetGlobalTestPartResultReporter(
968       TestPartResultReporterInterface* reporter);
969 
970   // Returns the test part result reporter for the current thread.
971   TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread();
972 
973   // Sets the test part result reporter for the current thread.
974   void SetTestPartResultReporterForCurrentThread(
975       TestPartResultReporterInterface* reporter);
976 
977   // Gets the number of successful test cases.
978   int successful_test_case_count() const;
979 
980   // Gets the number of failed test cases.
981   int failed_test_case_count() const;
982 
983   // Gets the number of all test cases.
984   int total_test_case_count() const;
985 
986   // Gets the number of all test cases that contain at least one test
987   // that should run.
988   int test_case_to_run_count() const;
989 
990   // Gets the number of successful tests.
991   int successful_test_count() const;
992 
993   // Gets the number of failed tests.
994   int failed_test_count() const;
995 
996   // Gets the number of disabled tests.
997   int disabled_test_count() const;
998 
999   // Gets the number of all tests.
1000   int total_test_count() const;
1001 
1002   // Gets the number of tests that should run.
1003   int test_to_run_count() const;
1004 
1005   // Gets the elapsed time, in milliseconds.
elapsed_time()1006   TimeInMillis elapsed_time() const { return elapsed_time_; }
1007 
1008   // Returns true iff the unit test passed (i.e. all test cases passed).
Passed()1009   bool Passed() const { return !Failed(); }
1010 
1011   // Returns true iff the unit test failed (i.e. some test case failed
1012   // or something outside of all tests failed).
Failed()1013   bool Failed() const {
1014     return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed();
1015   }
1016 
1017   // Returns the TestResult for the test that's currently running, or
1018   // the TestResult for the ad hoc test if no test is running.
1019   internal::TestResult* current_test_result();
1020 
1021   // Returns the TestResult for the ad hoc test.
ad_hoc_test_result()1022   const internal::TestResult* ad_hoc_test_result() const {
1023     return &ad_hoc_test_result_;
1024   }
1025 
1026   // Sets the unit test result printer.
1027   //
1028   // Does nothing if the input and the current printer object are the
1029   // same; otherwise, deletes the old printer object and makes the
1030   // input the current printer.
1031   void set_result_printer(UnitTestEventListenerInterface * result_printer);
1032 
1033   // Returns the current unit test result printer if it is not NULL;
1034   // otherwise, creates an appropriate result printer, makes it the
1035   // current printer, and returns it.
1036   UnitTestEventListenerInterface* result_printer();
1037 
1038   // Sets the OS stack trace getter.
1039   //
1040   // Does nothing if the input and the current OS stack trace getter
1041   // are the same; otherwise, deletes the old getter and makes the
1042   // input the current getter.
1043   void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter);
1044 
1045   // Returns the current OS stack trace getter if it is not NULL;
1046   // otherwise, creates an OsStackTraceGetter, makes it the current
1047   // getter, and returns it.
1048   OsStackTraceGetterInterface* os_stack_trace_getter();
1049 
1050   // Returns the current OS stack trace as a String.
1051   //
1052   // The maximum number of stack frames to be included is specified by
1053   // the gtest_stack_trace_depth flag.  The skip_count parameter
1054   // specifies the number of top frames to be skipped, which doesn't
1055   // count against the number of frames to be included.
1056   //
1057   // For example, if Foo() calls Bar(), which in turn calls
1058   // CurrentOsStackTraceExceptTop(1), Foo() will be included in the
1059   // trace but Bar() and CurrentOsStackTraceExceptTop() won't.
1060   String CurrentOsStackTraceExceptTop(int skip_count);
1061 
1062   // Finds and returns a TestCase with the given name.  If one doesn't
1063   // exist, creates one and returns it.
1064   //
1065   // Arguments:
1066   //
1067   //   test_case_name: name of the test case
1068   //   set_up_tc:      pointer to the function that sets up the test case
1069   //   tear_down_tc:   pointer to the function that tears down the test case
1070   TestCase* GetTestCase(const char* test_case_name,
1071                         const char* comment,
1072                         Test::SetUpTestCaseFunc set_up_tc,
1073                         Test::TearDownTestCaseFunc tear_down_tc);
1074 
1075   // Adds a TestInfo to the unit test.
1076   //
1077   // Arguments:
1078   //
1079   //   set_up_tc:    pointer to the function that sets up the test case
1080   //   tear_down_tc: pointer to the function that tears down the test case
1081   //   test_info:    the TestInfo object
AddTestInfo(Test::SetUpTestCaseFunc set_up_tc,Test::TearDownTestCaseFunc tear_down_tc,TestInfo * test_info)1082   void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc,
1083                    Test::TearDownTestCaseFunc tear_down_tc,
1084                    TestInfo * test_info) {
1085     // In order to support thread-safe death tests, we need to
1086     // remember the original working directory when the test program
1087     // was first invoked.  We cannot do this in RUN_ALL_TESTS(), as
1088     // the user may have changed the current directory before calling
1089     // RUN_ALL_TESTS().  Therefore we capture the current directory in
1090     // AddTestInfo(), which is called to register a TEST or TEST_F
1091     // before main() is reached.
1092     if (original_working_dir_.IsEmpty()) {
1093       original_working_dir_.Set(FilePath::GetCurrentDir());
1094       if (original_working_dir_.IsEmpty()) {
1095         printf("%s\n", "Failed to get the current working directory.");
1096         abort();
1097       }
1098     }
1099 
1100     GetTestCase(test_info->test_case_name(),
1101                 test_info->test_case_comment(),
1102                 set_up_tc,
1103                 tear_down_tc)->AddTestInfo(test_info);
1104   }
1105 
1106 #if GTEST_HAS_PARAM_TEST
1107   // Returns ParameterizedTestCaseRegistry object used to keep track of
1108   // value-parameterized tests and instantiate and register them.
parameterized_test_registry()1109   internal::ParameterizedTestCaseRegistry& parameterized_test_registry() {
1110     return parameterized_test_registry_;
1111   }
1112 #endif  // GTEST_HAS_PARAM_TEST
1113 
1114   // Sets the TestCase object for the test that's currently running.
set_current_test_case(TestCase * current_test_case)1115   void set_current_test_case(TestCase* current_test_case) {
1116     current_test_case_ = current_test_case;
1117   }
1118 
1119   // Sets the TestInfo object for the test that's currently running.  If
1120   // current_test_info is NULL, the assertion results will be stored in
1121   // ad_hoc_test_result_.
set_current_test_info(TestInfo * current_test_info)1122   void set_current_test_info(TestInfo* current_test_info) {
1123     current_test_info_ = current_test_info;
1124   }
1125 
1126   // Registers all parameterized tests defined using TEST_P and
1127   // INSTANTIATE_TEST_P, creating regular tests for each test/parameter
1128   // combination. This method can be called more then once; it has
1129   // guards protecting from registering the tests more then once.
1130   // If value-parameterized tests are disabled, RegisterParameterizedTests
1131   // is present but does nothing.
1132   void RegisterParameterizedTests();
1133 
1134   // Runs all tests in this UnitTest object, prints the result, and
1135   // returns 0 if all tests are successful, or 1 otherwise.  If any
1136   // exception is thrown during a test on Windows, this test is
1137   // considered to be failed, but the rest of the tests will still be
1138   // run.  (We disable exceptions on Linux and Mac OS X, so the issue
1139   // doesn't apply there.)
1140   int RunAllTests();
1141 
1142   // Clears the results of all tests, including the ad hoc test.
ClearResult()1143   void ClearResult() {
1144     test_cases_.ForEach(TestCase::ClearTestCaseResult);
1145     ad_hoc_test_result_.Clear();
1146   }
1147 
1148   enum ReactionToSharding {
1149     HONOR_SHARDING_PROTOCOL,
1150     IGNORE_SHARDING_PROTOCOL
1151   };
1152 
1153   // Matches the full name of each test against the user-specified
1154   // filter to decide whether the test should run, then records the
1155   // result in each TestCase and TestInfo object.
1156   // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests
1157   // based on sharding variables in the environment.
1158   // Returns the number of tests that should run.
1159   int FilterTests(ReactionToSharding shard_tests);
1160 
1161   // Lists all the tests by name.
1162   void ListAllTests();
1163 
current_test_case()1164   const TestCase* current_test_case() const { return current_test_case_; }
current_test_info()1165   TestInfo* current_test_info() { return current_test_info_; }
current_test_info()1166   const TestInfo* current_test_info() const { return current_test_info_; }
1167 
1168   // Returns the list of environments that need to be set-up/torn-down
1169   // before/after the tests are run.
environments()1170   internal::List<Environment*>* environments() { return &environments_; }
environments_in_reverse_order()1171   internal::List<Environment*>* environments_in_reverse_order() {
1172     return &environments_in_reverse_order_;
1173   }
1174 
test_cases()1175   internal::List<TestCase*>* test_cases() { return &test_cases_; }
test_cases()1176   const internal::List<TestCase*>* test_cases() const { return &test_cases_; }
1177 
1178   // Getters for the per-thread Google Test trace stack.
gtest_trace_stack()1179   internal::List<TraceInfo>* gtest_trace_stack() {
1180     return gtest_trace_stack_.pointer();
1181   }
gtest_trace_stack()1182   const internal::List<TraceInfo>* gtest_trace_stack() const {
1183     return gtest_trace_stack_.pointer();
1184   }
1185 
1186 #if GTEST_HAS_DEATH_TEST
1187   // Returns a pointer to the parsed --gtest_internal_run_death_test
1188   // flag, or NULL if that flag was not specified.
1189   // This information is useful only in a death test child process.
internal_run_death_test_flag()1190   const InternalRunDeathTestFlag* internal_run_death_test_flag() const {
1191     return internal_run_death_test_flag_.get();
1192   }
1193 
1194   // Returns a pointer to the current death test factory.
death_test_factory()1195   internal::DeathTestFactory* death_test_factory() {
1196     return death_test_factory_.get();
1197   }
1198 
1199   friend class ReplaceDeathTestFactory;
1200 #endif  // GTEST_HAS_DEATH_TEST
1201 
1202  private:
1203   friend class ::testing::UnitTest;
1204 
1205   // The UnitTest object that owns this implementation object.
1206   UnitTest* const parent_;
1207 
1208   // The working directory when the first TEST() or TEST_F() was
1209   // executed.
1210   internal::FilePath original_working_dir_;
1211 
1212   // The default test part result reporters.
1213   DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_;
1214   DefaultPerThreadTestPartResultReporter
1215       default_per_thread_test_part_result_reporter_;
1216 
1217   // Points to (but doesn't own) the global test part result reporter.
1218   TestPartResultReporterInterface* global_test_part_result_repoter_;
1219 
1220   // Protects read and write access to global_test_part_result_reporter_.
1221   internal::Mutex global_test_part_result_reporter_mutex_;
1222 
1223   // Points to (but doesn't own) the per-thread test part result reporter.
1224   internal::ThreadLocal<TestPartResultReporterInterface*>
1225       per_thread_test_part_result_reporter_;
1226 
1227   // The list of environments that need to be set-up/torn-down
1228   // before/after the tests are run.  environments_in_reverse_order_
1229   // simply mirrors environments_ in reverse order.
1230   internal::List<Environment*> environments_;
1231   internal::List<Environment*> environments_in_reverse_order_;
1232 
1233   internal::List<TestCase*> test_cases_;  // The list of TestCases.
1234 
1235 #if GTEST_HAS_PARAM_TEST
1236   // ParameterizedTestRegistry object used to register value-parameterized
1237   // tests.
1238   internal::ParameterizedTestCaseRegistry parameterized_test_registry_;
1239 
1240   // Indicates whether RegisterParameterizedTests() has been called already.
1241   bool parameterized_tests_registered_;
1242 #endif  // GTEST_HAS_PARAM_TEST
1243 
1244   // Points to the last death test case registered.  Initially NULL.
1245   internal::ListNode<TestCase*>* last_death_test_case_;
1246 
1247   // This points to the TestCase for the currently running test.  It
1248   // changes as Google Test goes through one test case after another.
1249   // When no test is running, this is set to NULL and Google Test
1250   // stores assertion results in ad_hoc_test_result_.  Initally NULL.
1251   TestCase* current_test_case_;
1252 
1253   // This points to the TestInfo for the currently running test.  It
1254   // changes as Google Test goes through one test after another.  When
1255   // no test is running, this is set to NULL and Google Test stores
1256   // assertion results in ad_hoc_test_result_.  Initially NULL.
1257   TestInfo* current_test_info_;
1258 
1259   // Normally, a user only writes assertions inside a TEST or TEST_F,
1260   // or inside a function called by a TEST or TEST_F.  Since Google
1261   // Test keeps track of which test is current running, it can
1262   // associate such an assertion with the test it belongs to.
1263   //
1264   // If an assertion is encountered when no TEST or TEST_F is running,
1265   // Google Test attributes the assertion result to an imaginary "ad hoc"
1266   // test, and records the result in ad_hoc_test_result_.
1267   internal::TestResult ad_hoc_test_result_;
1268 
1269   // The unit test result printer.  Will be deleted when the UnitTest
1270   // object is destructed.  By default, a plain text printer is used,
1271   // but the user can set this field to use a custom printer if that
1272   // is desired.
1273   UnitTestEventListenerInterface* result_printer_;
1274 
1275   // The OS stack trace getter.  Will be deleted when the UnitTest
1276   // object is destructed.  By default, an OsStackTraceGetter is used,
1277   // but the user can set this field to use a custom getter if that is
1278   // desired.
1279   OsStackTraceGetterInterface* os_stack_trace_getter_;
1280 
1281   // How long the test took to run, in milliseconds.
1282   TimeInMillis elapsed_time_;
1283 
1284 #if GTEST_HAS_DEATH_TEST
1285   // The decomposed components of the gtest_internal_run_death_test flag,
1286   // parsed when RUN_ALL_TESTS is called.
1287   internal::scoped_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_;
1288   internal::scoped_ptr<internal::DeathTestFactory> death_test_factory_;
1289 #endif  // GTEST_HAS_DEATH_TEST
1290 
1291   // A per-thread stack of traces created by the SCOPED_TRACE() macro.
1292   internal::ThreadLocal<internal::List<TraceInfo> > gtest_trace_stack_;
1293 
1294   GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl);
1295 };  // class UnitTestImpl
1296 
1297 // Convenience function for accessing the global UnitTest
1298 // implementation object.
GetUnitTestImpl()1299 inline UnitTestImpl* GetUnitTestImpl() {
1300   return UnitTest::GetInstance()->impl();
1301 }
1302 
1303 // Internal helper functions for implementing the simple regular
1304 // expression matcher.
1305 bool IsInSet(char ch, const char* str);
1306 bool IsDigit(char ch);
1307 bool IsPunct(char ch);
1308 bool IsRepeat(char ch);
1309 bool IsWhiteSpace(char ch);
1310 bool IsWordChar(char ch);
1311 bool IsValidEscape(char ch);
1312 bool AtomMatchesChar(bool escaped, char pattern, char ch);
1313 bool ValidateRegex(const char* regex);
1314 bool MatchRegexAtHead(const char* regex, const char* str);
1315 bool MatchRepetitionAndRegexAtHead(
1316     bool escaped, char ch, char repeat, const char* regex, const char* str);
1317 bool MatchRegexAnywhere(const char* regex, const char* str);
1318 
1319 // Parses the command line for Google Test flags, without initializing
1320 // other parts of Google Test.
1321 void ParseGoogleTestFlagsOnly(int* argc, char** argv);
1322 void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv);
1323 
1324 #if GTEST_HAS_DEATH_TEST
1325 
1326 // Returns the message describing the last system error, regardless of the
1327 // platform.
1328 String GetLastSystemErrorMessage();
1329 
1330 #if GTEST_OS_WINDOWS
1331 // Provides leak-safe Windows kernel handle ownership.
1332 class AutoHandle {
1333  public:
AutoHandle()1334   AutoHandle() : handle_(INVALID_HANDLE_VALUE) {}
AutoHandle(HANDLE handle)1335   explicit AutoHandle(HANDLE handle) : handle_(handle) {}
1336 
~AutoHandle()1337   ~AutoHandle() { Reset(); }
1338 
Get()1339   HANDLE Get() const { return handle_; }
Reset()1340   void Reset() { Reset(INVALID_HANDLE_VALUE); }
Reset(HANDLE handle)1341   void Reset(HANDLE handle) {
1342     if (handle != handle_) {
1343       if (handle_ != INVALID_HANDLE_VALUE)
1344         ::CloseHandle(handle_);
1345       handle_ = handle;
1346     }
1347   }
1348 
1349  private:
1350   HANDLE handle_;
1351 
1352   GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle);
1353 };
1354 #endif  // GTEST_OS_WINDOWS
1355 
1356 // Attempts to parse a string into a positive integer pointed to by the
1357 // number parameter.  Returns true if that is possible.
1358 // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use
1359 // it here.
1360 template <typename Integer>
ParseNaturalNumber(const::std::string & str,Integer * number)1361 bool ParseNaturalNumber(const ::std::string& str, Integer* number) {
1362   // Fail fast if the given string does not begin with a digit;
1363   // this bypasses strtoXXX's "optional leading whitespace and plus
1364   // or minus sign" semantics, which are undesirable here.
1365   if (str.empty() || !isdigit(str[0])) {
1366     return false;
1367   }
1368   errno = 0;
1369 
1370   char* end;
1371   // BiggestConvertible is the largest integer type that system-provided
1372   // string-to-number conversion routines can return.
1373 #if GTEST_OS_WINDOWS
1374   typedef unsigned __int64 BiggestConvertible;
1375   const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10);
1376 #else
1377   typedef unsigned long long BiggestConvertible;  // NOLINT
1378   const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10);
1379 #endif  // GTEST_OS_WINDOWS
1380   const bool parse_success = *end == '\0' && errno == 0;
1381 
1382   // TODO(vladl@google.com): Convert this to compile time assertion when it is
1383   // available.
1384   GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed));
1385 
1386   const Integer result = static_cast<Integer>(parsed);
1387   if (parse_success && static_cast<BiggestConvertible>(result) == parsed) {
1388     *number = result;
1389     return true;
1390   }
1391   return false;
1392 }
1393 #endif  // GTEST_HAS_DEATH_TEST
1394 
1395 }  // namespace internal
1396 }  // namespace testing
1397 
1398 #endif  // GTEST_SRC_GTEST_INTERNAL_INL_H_
1399