Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: ppapi/tests/test_case.cc

Issue 8982006: Add GetLiveVars to PPB_Testing_Dev. Fix leaks it uncovered. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/tests/test_case.h" 5 #include "ppapi/tests/test_case.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "ppapi/tests/test_utils.h" 9 #include "ppapi/tests/test_utils.h"
10 #include "ppapi/tests/testing_instance.h" 10 #include "ppapi/tests/testing_instance.h"
11 11
12 TestCase::TestCase(TestingInstance* instance) 12 TestCase::TestCase(TestingInstance* instance)
13 : instance_(instance), 13 : instance_(instance),
14 testing_interface_(NULL), 14 testing_interface_(NULL),
15 force_async_(false) { 15 force_async_(false) {
16 // Get the testing_interface_ if it is available, so that we can do Resource
17 // and Var checks on shutdown (see CheckResourcesAndVars). If it is not
18 // available, testing_interface_ will be NULL. Some tests do not require it.
19 testing_interface_ = GetTestingInterface();
16 } 20 }
17 21
18 TestCase::~TestCase() { 22 TestCase::~TestCase() {
19 } 23 }
20 24
21 bool TestCase::Init() { 25 bool TestCase::Init() {
22 return true; 26 return true;
23 } 27 }
24 28
25 // static 29 // static
(...skipping 17 matching lines...) Expand all
43 pp::VarPrivate TestCase::GetTestObject() { 47 pp::VarPrivate TestCase::GetTestObject() {
44 if (test_object_.is_undefined()) { 48 if (test_object_.is_undefined()) {
45 pp::deprecated::ScriptableObject* so = CreateTestObject(); 49 pp::deprecated::ScriptableObject* so = CreateTestObject();
46 if (so) 50 if (so)
47 test_object_ = pp::VarPrivate(instance_, so); // Takes ownership. 51 test_object_ = pp::VarPrivate(instance_, so); // Takes ownership.
48 } 52 }
49 return test_object_; 53 return test_object_;
50 } 54 }
51 #endif 55 #endif
52 56
57 bool TestCase::CheckTestingInterface() {
58 testing_interface_ = GetTestingInterface();
59 if (!testing_interface_) {
60 // Give a more helpful error message for the testing interface being gone
61 // since that needs special enabling in Chrome.
62 instance_->AppendError("This test needs the testing interface, which is "
63 "not currently available. In Chrome, use "
64 "--enable-pepper-testing when launching.");
65 return false;
66 }
67
68 return true;
69 }
70
53 void TestCase::HandleMessage(const pp::Var& message_data) { 71 void TestCase::HandleMessage(const pp::Var& message_data) {
54 } 72 }
55 73
56 void TestCase::DidChangeView(const pp::Rect& position, const pp::Rect& clip) { 74 void TestCase::DidChangeView(const pp::Rect& position, const pp::Rect& clip) {
57 } 75 }
58 76
59 bool TestCase::HandleInputEvent(const pp::InputEvent& event) { 77 bool TestCase::HandleInputEvent(const pp::InputEvent& event) {
60 return false; 78 return false;
61 } 79 }
62 80
63 #if !(defined __native_client__) 81 #if !(defined __native_client__)
64 pp::deprecated::ScriptableObject* TestCase::CreateTestObject() { 82 pp::deprecated::ScriptableObject* TestCase::CreateTestObject() {
65 return NULL; 83 return NULL;
66 } 84 }
67 #endif 85 #endif
68 86
69 bool TestCase::InitTestingInterface() {
70 testing_interface_ = GetTestingInterface();
71 if (!testing_interface_) {
72 // Give a more helpful error message for the testing interface being gone
73 // since that needs special enabling in Chrome.
74 instance_->AppendError("This test needs the testing interface, which is "
75 "not currently available. In Chrome, use "
76 "--enable-pepper-testing when launching.");
77 return false;
78 }
79
80 return true;
81 }
82
83 bool TestCase::EnsureRunningOverHTTP() { 87 bool TestCase::EnsureRunningOverHTTP() {
84 if (instance_->protocol() != "http:") { 88 if (instance_->protocol() != "http:") {
85 instance_->AppendError("This test needs to be run over HTTP."); 89 instance_->AppendError("This test needs to be run over HTTP.");
86 return false; 90 return false;
87 } 91 }
88 92
89 return true; 93 return true;
90 } 94 }
91 95
92 bool TestCase::MatchesFilter(const std::string& test_name, 96 bool TestCase::MatchesFilter(const std::string& test_name,
93 const std::string& filter) { 97 const std::string& filter) {
94 return filter.empty() || (test_name == filter); 98 return filter.empty() || (test_name == filter);
95 } 99 }
96 100
101 std::string TestCase::CheckResourcesAndVars() {
102 std::string errors;
103 if (testing_interface_) {
104 // TODO(dmichael): Init the testing interface for all tests.
105 // TODO(dmichael): Fix tests that leak resources and enable the following:
106 /*
107 uint32_t leaked_resources =
108 testing_interface_->GetLiveObjectsForInstance(instance_->pp_instance());
109 if (leaked_resources) {
110 std::ostringstream output;
111 output << "FAILED: Test leaked " << leaked_resources << " resources.\n";
112 errors += output.str();
113 }
114 */
115 const uint32_t kVarsToPrint = 10;
116 PP_Var vars[kVarsToPrint];
117 uint32_t leaked_vars = testing_interface_->GetLiveVars(vars, kVarsToPrint);
118 uint32_t tracked_vars = leaked_vars;
119 // Don't count test_object_ as a leak.
120 if (test_object_.pp_var().type > PP_VARTYPE_DOUBLE)
121 --leaked_vars;
122 if (leaked_vars) {
123 std::ostringstream output;
124 output << "Test leaked " << leaked_vars << " vars (printing at most "
125 << kVarsToPrint <<"):<p>";
126 errors += output.str();
127 for (uint32_t i = 0; i < std::min(tracked_vars, kVarsToPrint); ++i) {
128 pp::Var leaked_var(pp::Var::PassRef(), vars[i]);
129 if (!(leaked_var == test_object_))
130 errors += leaked_var.DebugString() + "<p>";
131 }
132 }
133 }
134 return errors;
135 }
136
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698