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