summaryrefslogtreecommitdiffstats
path: root/toolkit/components/xulstore/tests/gtest/TestXULStore.cpp
blob: 50d7f54b80370122f4a892a31c70e3a557a43038 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <stdint.h>
#include "gtest/gtest.h"
#include "mozilla/XULStore.h"
#include "nsCOMPtr.h"
#include "nsString.h"

using mozilla::XULStoreIterator;
using mozilla::XULStore::GetAttrs;
using mozilla::XULStore::GetIDs;
using mozilla::XULStore::GetValue;
using mozilla::XULStore::HasValue;
using mozilla::XULStore::RemoveValue;
using mozilla::XULStore::SetValue;

TEST(XULStore, SetGetValue)
{
  nsAutoString doc(u"SetGetValue"_ns);
  nsAutoString id(u"foo"_ns);
  nsAutoString attr(u"bar"_ns);
  nsAutoString value;

  EXPECT_EQ(GetValue(doc, id, attr, value), NS_OK);
  EXPECT_TRUE(value.EqualsASCII(""));

  {
    nsAutoString value(u"baz"_ns);
    EXPECT_EQ(SetValue(doc, id, attr, value), NS_OK);
  }

  EXPECT_EQ(GetValue(doc, id, attr, value), NS_OK);
  EXPECT_TRUE(value.EqualsASCII("baz"));
}

TEST(XULStore, HasValue)
{
  nsAutoString doc(u"HasValue"_ns);
  nsAutoString id(u"foo"_ns);
  nsAutoString attr(u"bar"_ns);
  bool hasValue = true;
  EXPECT_EQ(HasValue(doc, id, attr, hasValue), NS_OK);
  EXPECT_FALSE(hasValue);
  nsAutoString value(u"baz"_ns);
  EXPECT_EQ(SetValue(doc, id, attr, value), NS_OK);
  EXPECT_EQ(HasValue(doc, id, attr, hasValue), NS_OK);
  EXPECT_TRUE(hasValue);
}

TEST(XULStore, RemoveValue)
{
  nsAutoString doc(u"RemoveValue"_ns);
  nsAutoString id(u"foo"_ns);
  nsAutoString attr(u"bar"_ns);
  nsAutoString value(u"baz"_ns);
  EXPECT_EQ(SetValue(doc, id, attr, value), NS_OK);
  EXPECT_EQ(GetValue(doc, id, attr, value), NS_OK);
  EXPECT_TRUE(value.EqualsASCII("baz"));
  EXPECT_EQ(RemoveValue(doc, id, attr), NS_OK);
  EXPECT_EQ(GetValue(doc, id, attr, value), NS_OK);
  EXPECT_TRUE(value.EqualsASCII(""));
}

TEST(XULStore, GetIDsIterator)
{
  nsAutoString doc(u"idIterDoc"_ns);
  nsAutoString id1(u"id1"_ns);
  nsAutoString id2(u"id2"_ns);
  nsAutoString id3(u"id3"_ns);
  nsAutoString attr(u"attr"_ns);
  nsAutoString value(u"value"_ns);
  nsAutoString id;

  // Confirm that the store doesn't have any IDs yet.
  mozilla::UniquePtr<XULStoreIterator> iter;
  EXPECT_EQ(GetIDs(doc, iter), NS_OK);
  EXPECT_FALSE(iter->HasMore());
  // EXPECT_EQ(iter->GetNext(&id), NS_ERROR_FAILURE);

  // Insert with IDs in non-alphanumeric order to confirm
  // that store will order them when iterating them.
  EXPECT_EQ(SetValue(doc, id3, attr, value), NS_OK);
  EXPECT_EQ(SetValue(doc, id1, attr, value), NS_OK);
  EXPECT_EQ(SetValue(doc, id2, attr, value), NS_OK);

  // Insert different ID for another doc to confirm that store
  // won't return it when iterating IDs for our doc.
  nsAutoString otherDoc(u"otherDoc"_ns);
  nsAutoString otherID(u"otherID"_ns);
  EXPECT_EQ(SetValue(otherDoc, otherID, attr, value), NS_OK);

  EXPECT_EQ(GetIDs(doc, iter), NS_OK);
  EXPECT_TRUE(iter->HasMore());
  EXPECT_EQ(iter->GetNext(&id), NS_OK);
  EXPECT_TRUE(id.EqualsASCII("id1"));
  EXPECT_TRUE(iter->HasMore());
  EXPECT_EQ(iter->GetNext(&id), NS_OK);
  EXPECT_TRUE(id.EqualsASCII("id2"));
  EXPECT_TRUE(iter->HasMore());
  EXPECT_EQ(iter->GetNext(&id), NS_OK);
  EXPECT_TRUE(id.EqualsASCII("id3"));
  EXPECT_FALSE(iter->HasMore());
}

TEST(XULStore, GetAttributeIterator)
{
  nsAutoString doc(u"attrIterDoc"_ns);
  nsAutoString id(u"id"_ns);
  nsAutoString attr1(u"attr1"_ns);
  nsAutoString attr2(u"attr2"_ns);
  nsAutoString attr3(u"attr3"_ns);
  nsAutoString value(u"value"_ns);
  nsAutoString attr;

  mozilla::UniquePtr<XULStoreIterator> iter;
  EXPECT_EQ(GetAttrs(doc, id, iter), NS_OK);
  EXPECT_FALSE(iter->HasMore());
  // EXPECT_EQ(iter->GetNext(&attr), NS_ERROR_FAILURE);

  // Insert with attributes in non-alphanumeric order to confirm
  // that store will order them when iterating them.
  EXPECT_EQ(SetValue(doc, id, attr3, value), NS_OK);
  EXPECT_EQ(SetValue(doc, id, attr1, value), NS_OK);
  EXPECT_EQ(SetValue(doc, id, attr2, value), NS_OK);

  // Insert different attribute for another ID to confirm that store
  // won't return it when iterating attributes for our ID.
  nsAutoString otherID(u"otherID"_ns);
  nsAutoString otherAttr(u"otherAttr"_ns);
  EXPECT_EQ(SetValue(doc, otherID, otherAttr, value), NS_OK);

  EXPECT_EQ(GetAttrs(doc, id, iter), NS_OK);
  EXPECT_TRUE(iter->HasMore());
  EXPECT_EQ(iter->GetNext(&attr), NS_OK);
  EXPECT_TRUE(attr.EqualsASCII("attr1"));
  EXPECT_TRUE(iter->HasMore());
  EXPECT_EQ(iter->GetNext(&attr), NS_OK);
  EXPECT_TRUE(attr.EqualsASCII("attr2"));
  EXPECT_TRUE(iter->HasMore());
  EXPECT_EQ(iter->GetNext(&attr), NS_OK);
  EXPECT_TRUE(attr.EqualsASCII("attr3"));
  EXPECT_FALSE(iter->HasMore());
}