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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: ppapi/tests/test_case.cc
diff --git a/ppapi/tests/test_case.cc b/ppapi/tests/test_case.cc
index bcee6c3b73dc0af22253a9184f4123087ddacfc5..1dfe4a9ababe5ebd09ed9f4946c5068ad033a07c 100644
--- a/ppapi/tests/test_case.cc
+++ b/ppapi/tests/test_case.cc
@@ -13,6 +13,10 @@ TestCase::TestCase(TestingInstance* instance)
: instance_(instance),
testing_interface_(NULL),
force_async_(false) {
+ // Get the testing_interface_ if it is available, so that we can do Resource
+ // and Var checks on shutdown (see CheckResourcesAndVars). If it is not
+ // available, testing_interface_ will be NULL. Some tests do not require it.
+ testing_interface_ = GetTestingInterface();
}
TestCase::~TestCase() {
@@ -50,6 +54,20 @@ pp::VarPrivate TestCase::GetTestObject() {
}
#endif
+bool TestCase::CheckTestingInterface() {
+ testing_interface_ = GetTestingInterface();
+ if (!testing_interface_) {
+ // Give a more helpful error message for the testing interface being gone
+ // since that needs special enabling in Chrome.
+ instance_->AppendError("This test needs the testing interface, which is "
+ "not currently available. In Chrome, use "
+ "--enable-pepper-testing when launching.");
+ return false;
+ }
+
+ return true;
+}
+
void TestCase::HandleMessage(const pp::Var& message_data) {
}
@@ -66,20 +84,6 @@ pp::deprecated::ScriptableObject* TestCase::CreateTestObject() {
}
#endif
-bool TestCase::InitTestingInterface() {
- testing_interface_ = GetTestingInterface();
- if (!testing_interface_) {
- // Give a more helpful error message for the testing interface being gone
- // since that needs special enabling in Chrome.
- instance_->AppendError("This test needs the testing interface, which is "
- "not currently available. In Chrome, use "
- "--enable-pepper-testing when launching.");
- return false;
- }
-
- return true;
-}
-
bool TestCase::EnsureRunningOverHTTP() {
if (instance_->protocol() != "http:") {
instance_->AppendError("This test needs to be run over HTTP.");
@@ -94,3 +98,39 @@ bool TestCase::MatchesFilter(const std::string& test_name,
return filter.empty() || (test_name == filter);
}
+std::string TestCase::CheckResourcesAndVars() {
+ std::string errors;
+ if (testing_interface_) {
+ // TODO(dmichael): Init the testing interface for all tests.
+ // TODO(dmichael): Fix tests that leak resources and enable the following:
+ /*
+ uint32_t leaked_resources =
+ testing_interface_->GetLiveObjectsForInstance(instance_->pp_instance());
+ if (leaked_resources) {
+ std::ostringstream output;
+ output << "FAILED: Test leaked " << leaked_resources << " resources.\n";
+ errors += output.str();
+ }
+ */
+ const uint32_t kVarsToPrint = 10;
+ PP_Var vars[kVarsToPrint];
+ uint32_t leaked_vars = testing_interface_->GetLiveVars(vars, kVarsToPrint);
+ uint32_t tracked_vars = leaked_vars;
+ // Don't count test_object_ as a leak.
+ if (test_object_.pp_var().type > PP_VARTYPE_DOUBLE)
+ --leaked_vars;
+ if (leaked_vars) {
+ std::ostringstream output;
+ output << "Test leaked " << leaked_vars << " vars (printing at most "
+ << kVarsToPrint <<"):<p>";
+ errors += output.str();
+ for (uint32_t i = 0; i < std::min(tracked_vars, kVarsToPrint); ++i) {
+ pp::Var leaked_var(pp::Var::PassRef(), vars[i]);
+ if (!(leaked_var == test_object_))
+ errors += leaked_var.DebugString() + "<p>";
+ }
+ }
+ }
+ return errors;
+}
+

Powered by Google App Engine
This is Rietveld 408576698