ObjectTest.cpp
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:3k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. /*
  2.  *  OpenKore C++ Standard Library
  3.  *  Copyright (C) 2006  VCL
  4.  *
  5.  *  Unit tests
  6.  *
  7.  *  This library is free software; you can redistribute it and/or
  8.  *  modify it under the terms of the GNU Lesser General Public
  9.  *  License as published by the Free Software Foundation; either
  10.  *  version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  *  This library is distributed in the hope that it will be useful,
  13.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  *  Lesser General Public License for more details.
  16.  *
  17.  *  You should have received a copy of the GNU Lesser General Public
  18.  *  License along with this library; if not, write to the Free Software
  19.  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  20.  *  MA  02110-1301  USA
  21.  */
  22. #include "tut.h"
  23. #include "../../Object.h"
  24. // Test for OSL::Object
  25. namespace tut {
  26. struct ObjectTest {
  27. public:
  28. int deleteCount;
  29. ObjectTest() {
  30. deleteCount = 0;
  31. }
  32. };
  33. DEFINE_TEST_GROUP(ObjectTest);
  34. /*
  35.  * A subclass of Object which increments ObjectTest::deleteCount
  36.  * whenever it is deleted.
  37.  */
  38. class TestInstance: public OSL::Object {
  39. private:
  40. ObjectTest *test;
  41. public:
  42. TestInstance(ObjectTest *test) {
  43. this->test = test;
  44. }
  45. ~TestInstance() {
  46. test->deleteCount++;
  47. }
  48. };
  49. // Test simplest case of reference counting.
  50. TEST_METHOD(1) {
  51. Object *o = new TestInstance(this);
  52. ensure("Object is not marked as a stack object", !o->isStackObject());
  53. ensure_equals("Object is not deleted yet", deleteCount, 0);
  54. o->unref();
  55. ensure_equals("Object is deleted", deleteCount, 1);
  56. }
  57. // Test increasing reference count twice.
  58. TEST_METHOD(2) {
  59. Object *o = new TestInstance(this);
  60. ensure("Object is not marked as a stack object", !o->isStackObject());
  61. o->ref();
  62. o->unref();
  63. ensure_equals("Object is not deleted yet", deleteCount, 0);
  64. o->unref();
  65. ensure_equals("Object is deleted", deleteCount, 1);
  66. }
  67. // Test increasing reference count 3 times.
  68. TEST_METHOD(3) {
  69. Object *o = new TestInstance(this);
  70. ensure("Object is not marked as a stack object", !o->isStackObject());
  71. o->ref();
  72. o->ref();
  73. o->unref();
  74. o->unref();
  75. ensure_equals("Object is not deleted yet", deleteCount, 0);
  76. o->unref();
  77. ensure_equals("Object is deleted", deleteCount, 1);
  78. }
  79. // Test markAsStackObject() and isStackObject()
  80. TEST_METHOD(4) {
  81. TestInstance o(this);
  82. ensure("Object is not marked as a stack object", !o.isStackObject());
  83. o.markAsStackObject();
  84. ensure("Object is marked as a stack object", o.isStackObject());
  85. for (int i = 0; i < 10; i++) {
  86. o.unref();
  87. o.ref();
  88. }
  89. // If unref() tries to delete o then this will crash.
  90. }
  91. }