Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / native_client_sdk / src / tests / nacl_io_test / fake_ppapi / fake_var_dictionary_interface.cc
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.
4
5 #include "fake_ppapi/fake_var_dictionary_interface.h"
6
7 #include "fake_ppapi/fake_var_manager.h"
8 #include "gtest/gtest.h"
9
10 FakeVarDictionaryInterface::FakeVarDictionaryInterface(FakeVarManager* manager,
11     nacl_io::VarInterface* var_interface,
12     nacl_io::VarArrayInterface* array_interface) :
13   manager_(manager),
14   var_interface_(var_interface),
15   array_interface_(array_interface) {}
16
17
18 PP_Var FakeVarDictionaryInterface::Create() {
19   FakeVarData* var_data = manager_->CreateVarData();
20   var_data->type = PP_VARTYPE_DICTIONARY;
21
22   struct PP_Var result = {PP_VARTYPE_DICTIONARY, 0, {PP_FALSE}};
23   result.value.as_id = var_data->id;
24   return result;
25 }
26
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]);
40   }
41   dict[key_string] = value;
42   return PP_TRUE;
43 }
44
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);
56   return rtn;
57 }
58
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]);
70   }
71   dict.erase(key_string);
72 }
73
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)
84     return PP_FALSE;
85   return PP_TRUE;
86 }
87
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());
95   int index = 0;
96   for (FakeDictType::iterator it = dict.begin(); it != dict.end(); it++) {
97     PP_Var key = var_interface_->VarFromUtf8(it->first.c_str(),
98                                              it->first.size());
99     array_interface_->Set(rtn, index, key);
100     manager_->Release(key);
101     index++;
102   }
103   return rtn;
104 }