1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "fake_ppapi/fake_var_dictionary_interface.h"
7 #include "fake_ppapi/fake_var_manager.h"
8 #include "gtest/gtest.h"
10 FakeVarDictionaryInterface::FakeVarDictionaryInterface(FakeVarManager* manager,
11 nacl_io::VarInterface* var_interface,
12 nacl_io::VarArrayInterface* array_interface) :
14 var_interface_(var_interface),
15 array_interface_(array_interface) {}
18 PP_Var FakeVarDictionaryInterface::Create() {
19 FakeVarData* var_data = manager_->CreateVarData();
20 var_data->type = PP_VARTYPE_DICTIONARY;
22 struct PP_Var result = {PP_VARTYPE_DICTIONARY, 0, {PP_FALSE}};
23 result.value.as_id = var_data->id;
27 PP_Bool FakeVarDictionaryInterface::Set(PP_Var var, PP_Var key, PP_Var value) {
28 EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
29 EXPECT_EQ(PP_VARTYPE_STRING, key.type);
30 FakeVarData* data = manager_->GetVarData(var);
31 FakeVarData* key_data = manager_->GetVarData(key);
32 EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
33 EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
34 const std::string& key_string = key_data->string_value;
35 FakeDictType& dict = data->dict_value;
36 manager_->AddRef(value);
37 // Release any existing value
38 if (dict.count(key_string) > 0) {
39 manager_->Release(dict[key_string]);
41 dict[key_string] = value;
45 PP_Var FakeVarDictionaryInterface::Get(PP_Var var, PP_Var key) {
46 EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
47 EXPECT_EQ(PP_VARTYPE_STRING, key.type);
48 FakeVarData* data = manager_->GetVarData(var);
49 FakeVarData* key_data = manager_->GetVarData(key);
50 EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
51 EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
52 FakeDictType& dict = data->dict_value;
53 const std::string& key_string = key_data->string_value;
54 PP_Var rtn = dict[key_string];
55 manager_->AddRef(rtn);
59 void FakeVarDictionaryInterface::Delete(PP_Var var, PP_Var key) {
60 EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
61 EXPECT_EQ(PP_VARTYPE_STRING, key.type);
62 FakeVarData* data = manager_->GetVarData(var);
63 FakeVarData* key_data = manager_->GetVarData(key);
64 EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
65 EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
66 FakeDictType& dict = data->dict_value;
67 const std::string& key_string = key_data->string_value;
68 if (dict.count(key_string) > 0) {
69 manager_->Release(dict[key_string]);
71 dict.erase(key_string);
74 PP_Bool FakeVarDictionaryInterface::HasKey(PP_Var var, PP_Var key) {
75 EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
76 EXPECT_EQ(PP_VARTYPE_STRING, key.type);
77 FakeVarData* data = manager_->GetVarData(var);
78 FakeVarData* key_data = manager_->GetVarData(key);
79 EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
80 EXPECT_NE(static_cast<FakeVarData*>(NULL), key_data);
81 FakeDictType& dict = data->dict_value;
82 const std::string& key_string = key_data->string_value;
83 if (dict.count(key_string) > 0)
88 PP_Var FakeVarDictionaryInterface::GetKeys(PP_Var var) {
89 EXPECT_EQ(PP_VARTYPE_DICTIONARY, var.type);
90 FakeVarData* data = manager_->GetVarData(var);
91 EXPECT_NE(static_cast<FakeVarData*>(NULL), data);
92 FakeDictType& dict = data->dict_value;
93 PP_Var rtn = array_interface_->Create();
94 array_interface_->SetLength(rtn, dict.size());
96 for (FakeDictType::iterator it = dict.begin(); it != dict.end(); it++) {
97 PP_Var key = var_interface_->VarFromUtf8(it->first.c_str(),
99 array_interface_->Set(rtn, index, key);
100 manager_->Release(key);