1dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Copyright 2005, Google Inc.
2dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// All rights reserved.
3dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
4dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Redistribution and use in source and binary forms, with or without
5dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// modification, are permitted provided that the following conditions are
6dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// met:
7dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
8dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Redistributions of source code must retain the above copyright
9dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// notice, this list of conditions and the following disclaimer.
10dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Redistributions in binary form must reproduce the above
11dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// copyright notice, this list of conditions and the following disclaimer
12dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// in the documentation and/or other materials provided with the
13dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// distribution.
14dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Neither the name of Google Inc. nor the names of its
15dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// contributors may be used to endorse or promote products derived from
16dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this software without specific prior written permission.
17dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
18dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
30dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A sample program demonstrating using Google C++ testing framework.
31dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
32dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Author: wan@google.com (Zhanyong Wan)
33dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
34dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#ifndef GTEST_SAMPLES_SAMPLE2_H_
35dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_SAMPLES_SAMPLE2_H_
36dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
37dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <string.h>
38dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
39dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
40dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A simple string class.
41dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass MyString {
42dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter private:
4346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  const char* c_string_;
44dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  const MyString& operator=(const MyString& rhs);
45dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
46dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:
47dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // Clones a 0-terminated C string, allocating memory using new.
4846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  static const char* CloneCString(const char* a_c_string);
49dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
50dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ////////////////////////////////////////////////////////////
51dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  //
52dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // C'tors
53dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
54dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // The default c'tor constructs a NULL string.
55dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  MyString() : c_string_(NULL) {}
56dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
57dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // Constructs a MyString by cloning a 0-terminated C string.
5846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  explicit MyString(const char* a_c_string) : c_string_(NULL) {
5946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan    Set(a_c_string);
60dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  }
61dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
62dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // Copy c'tor
63dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  MyString(const MyString& string) : c_string_(NULL) {
64dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter    Set(string.c_string_);
65dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  }
66dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
67dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ////////////////////////////////////////////////////////////
68dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  //
69dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // D'tor.  MyString is intended to be a final class, so the d'tor
70dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // doesn't need to be virtual.
71dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ~MyString() { delete[] c_string_; }
72dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
73dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // Gets the 0-terminated C string this MyString object represents.
7446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  const char* c_string() const { return c_string_; }
75dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
76dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  size_t Length() const {
77dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter    return c_string_ == NULL ? 0 : strlen(c_string_);
78dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  }
79dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
80dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // Sets the 0-terminated C string this MyString object represents.
8146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  void Set(const char* c_string);
82dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter};
83dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
84dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
85dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_SAMPLES_SAMPLE2_H_
86