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

Side by Side Diff: native_client_sdk/src/tests/nacl_io_test/fake_var_interface.cc

Issue 137853023: [NaCl SDK] nacl_io: Add new fakes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "fake_var_interface.h" 5 #include "fake_var_interface.h"
6 #include "fake_var_manager.h"
6 #include "gtest/gtest.h" 7 #include "gtest/gtest.h"
7 8
8 FakeVarInterface::FakeVarInterface() : next_id_(1) {} 9 FakeVarInterface::FakeVarInterface(FakeVarManager* manager)
10 : manager_(manager) {}
9 11
10 FakeVarInterface::~FakeVarInterface() { 12 PP_Var FakeVarInterface::VarFromUtf8(const char* data, uint32_t len) {
11 // The ref counts for all vars should be zero. 13 FakeVarData* var_data = manager_->CreateVarData();
12 for (VarMap::const_iterator iter = var_map_.begin(); iter != var_map_.end(); 14 var_data->type = PP_VARTYPE_STRING;
13 ++iter) { 15 var_data->string_value.assign(data, len);
14 const FakeStringVar& string_var = iter->second; 16
15 EXPECT_EQ(0, string_var.ref_count) << "Non-zero refcount on string var " 17 struct PP_Var result = {PP_VARTYPE_STRING, 0, {PP_FALSE}};
16 << iter->first << " with value \"" 18 result.value.as_id = var_data->id;
17 << string_var.value << "\""; 19 return result;
18 }
19 } 20 }
20 21
21 void FakeVarInterface::AddRef(PP_Var var) { 22 void FakeVarInterface::AddRef(PP_Var var) {
22 // From ppb_var.h: 23 manager_->AddRef(var);
23 // AddRef() adds a reference to the given var. If this is not a refcounted
24 // object, this function will do nothing so you can always call it no matter
25 // what the type.
26 if (var.type != PP_VARTYPE_STRING)
27 return;
28
29 VarMap::iterator iter = var_map_.find(var.value.as_id);
30 if (iter == var_map_.end())
31 return;
32
33 FakeStringVar& string_var = iter->second;
34 EXPECT_LT(0, string_var.ref_count) << "AddRefing freed string var "
35 << var.value.as_id << " with value \""
36 << string_var.value << "\"";
37 string_var.ref_count++;
38 } 24 }
39 25
40 void FakeVarInterface::Release(PP_Var var) { 26 void FakeVarInterface::Release(PP_Var var) {
41 // From ppb_var.h: 27 manager_->Release(var);
42 // Release() removes a reference to given var, deleting it if the internal
43 // reference count becomes 0. If the given var is not a refcounted object,
44 // this function will do nothing so you can always call it no matter what
45 // the type.
46 if (var.type != PP_VARTYPE_STRING)
47 return;
48
49 VarMap::iterator iter = var_map_.find(var.value.as_id);
50 if (iter == var_map_.end())
51 return;
52
53 FakeStringVar& string_var = iter->second;
54 EXPECT_LT(0, string_var.ref_count) << "Releasing freed string var "
55 << var.value.as_id << " with value \""
56 << string_var.value << "\"";
57 string_var.ref_count--;
58 }
59
60 PP_Var FakeVarInterface::VarFromUtf8(const char* data, uint32_t len) {
61 Id id = next_id_++;
62
63 FakeStringVar string_var;
64 string_var.value.assign(data, len);
65 string_var.ref_count = 1;
66
67 var_map_[id] = string_var;
68
69 struct PP_Var result = {PP_VARTYPE_STRING, 0, {PP_FALSE}};
70 result.value.as_id = id;
71 return result;
72 } 28 }
73 29
74 const char* FakeVarInterface::VarToUtf8(PP_Var var, uint32_t* out_len) { 30 const char* FakeVarInterface::VarToUtf8(PP_Var var, uint32_t* out_len) {
75 if (var.type != PP_VARTYPE_STRING) { 31 if (var.type != PP_VARTYPE_STRING) {
76 *out_len = 0; 32 *out_len = 0;
77 return NULL; 33 return NULL;
78 } 34 }
79 35
80 VarMap::const_iterator iter = var_map_.find(var.value.as_id); 36 FakeVarData* var_data = manager_->GetVarData(var);
81 if (iter == var_map_.end()) { 37 if (!var_data) {
82 *out_len = 0; 38 *out_len = 0;
83 return NULL; 39 return NULL;
84 } 40 }
85 41
86 const FakeStringVar& string_var = iter->second; 42 EXPECT_LT(0, var_data->ref_count) << "VarToUtf8 on freed "
87 EXPECT_LT(0, string_var.ref_count) << "VarToUtf8 on freed string var " 43 << manager_->Describe(*var_data);
88 << var.value.as_id << " with value \""
89 << string_var.value << "\"";
90 44
91 *out_len = string_var.value.length(); 45 *out_len = var_data->string_value.length();
92 return string_var.value.c_str(); 46 return var_data->string_value.c_str();
93 } 47 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698