| OLD | NEW |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 sizeof(MinidumpSimpleStringDictionaryEntry) + | 57 sizeof(MinidumpSimpleStringDictionaryEntry) + |
| 58 2 * sizeof(MinidumpUTF8String) + 1 + 3 + 1, // 3 for padding | 58 2 * sizeof(MinidumpUTF8String) + 1 + 3 + 1, // 3 for padding |
| 59 file_writer.string().size()); | 59 file_writer.string().size()); |
| 60 | 60 |
| 61 const MinidumpSimpleStringDictionary* dictionary = | 61 const MinidumpSimpleStringDictionary* dictionary = |
| 62 MinidumpSimpleStringDictionaryCast(file_writer); | 62 MinidumpSimpleStringDictionaryCast(file_writer); |
| 63 EXPECT_EQ(1u, dictionary->count); | 63 EXPECT_EQ(1u, dictionary->count); |
| 64 EXPECT_EQ(12u, dictionary->entries[0].key); | 64 EXPECT_EQ(12u, dictionary->entries[0].key); |
| 65 EXPECT_EQ(20u, dictionary->entries[0].value); | 65 EXPECT_EQ(20u, dictionary->entries[0].value); |
| 66 EXPECT_EQ("", | 66 EXPECT_EQ("", |
| 67 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].key)); | 67 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 68 dictionary->entries[0].key)); |
| 68 EXPECT_EQ("", | 69 EXPECT_EQ("", |
| 69 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].value)); | 70 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 71 dictionary->entries[0].value)); |
| 70 } | 72 } |
| 71 | 73 |
| 72 TEST(MinidumpSimpleStringDictionaryWriter, OneKeyValue) { | 74 TEST(MinidumpSimpleStringDictionaryWriter, OneKeyValue) { |
| 73 StringFileWriter file_writer; | 75 StringFileWriter file_writer; |
| 74 | 76 |
| 75 char kKey[] = "key"; | 77 char kKey[] = "key"; |
| 76 char kValue[] = "value"; | 78 char kValue[] = "value"; |
| 77 | 79 |
| 78 MinidumpSimpleStringDictionaryWriter dictionary_writer; | 80 MinidumpSimpleStringDictionaryWriter dictionary_writer; |
| 79 MinidumpSimpleStringDictionaryEntryWriter entry_writer; | 81 MinidumpSimpleStringDictionaryEntryWriter entry_writer; |
| 80 entry_writer.SetKeyValue(kKey, kValue); | 82 entry_writer.SetKeyValue(kKey, kValue); |
| 81 dictionary_writer.AddEntry(&entry_writer); | 83 dictionary_writer.AddEntry(&entry_writer); |
| 82 | 84 |
| 83 EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer)); | 85 EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer)); |
| 84 ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) + | 86 ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) + |
| 85 sizeof(MinidumpSimpleStringDictionaryEntry) + | 87 sizeof(MinidumpSimpleStringDictionaryEntry) + |
| 86 2 * sizeof(MinidumpUTF8String) + sizeof(kKey) + sizeof(kValue), | 88 2 * sizeof(MinidumpUTF8String) + sizeof(kKey) + sizeof(kValue), |
| 87 file_writer.string().size()); | 89 file_writer.string().size()); |
| 88 | 90 |
| 89 const MinidumpSimpleStringDictionary* dictionary = | 91 const MinidumpSimpleStringDictionary* dictionary = |
| 90 MinidumpSimpleStringDictionaryCast(file_writer); | 92 MinidumpSimpleStringDictionaryCast(file_writer); |
| 91 EXPECT_EQ(1u, dictionary->count); | 93 EXPECT_EQ(1u, dictionary->count); |
| 92 EXPECT_EQ(12u, dictionary->entries[0].key); | 94 EXPECT_EQ(12u, dictionary->entries[0].key); |
| 93 EXPECT_EQ(20u, dictionary->entries[0].value); | 95 EXPECT_EQ(20u, dictionary->entries[0].value); |
| 94 EXPECT_EQ(kKey, | 96 EXPECT_EQ(kKey, |
| 95 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].key)); | 97 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 98 dictionary->entries[0].key)); |
| 96 EXPECT_EQ(kValue, | 99 EXPECT_EQ(kValue, |
| 97 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].value)); | 100 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 101 dictionary->entries[0].value)); |
| 98 } | 102 } |
| 99 | 103 |
| 100 TEST(MinidumpSimpleStringDictionaryWriter, ThreeKeysValues) { | 104 TEST(MinidumpSimpleStringDictionaryWriter, ThreeKeysValues) { |
| 101 StringFileWriter file_writer; | 105 StringFileWriter file_writer; |
| 102 | 106 |
| 103 char kKey0[] = "m0"; | 107 char kKey0[] = "m0"; |
| 104 char kValue0[] = "value0"; | 108 char kValue0[] = "value0"; |
| 105 char kKey1[] = "zzz1"; | 109 char kKey1[] = "zzz1"; |
| 106 char kValue1[] = "v1"; | 110 char kValue1[] = "v1"; |
| 107 char kKey2[] = "aa2"; | 111 char kKey2[] = "aa2"; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 136 EXPECT_EQ(68u, dictionary->entries[2].key); | 140 EXPECT_EQ(68u, dictionary->entries[2].key); |
| 137 EXPECT_EQ(80u, dictionary->entries[2].value); | 141 EXPECT_EQ(80u, dictionary->entries[2].value); |
| 138 | 142 |
| 139 // The entries don’t appear in the order they were added. The current | 143 // The entries don’t appear in the order they were added. The current |
| 140 // implementation uses a std::map and sorts keys, so the entires appear in | 144 // implementation uses a std::map and sorts keys, so the entires appear in |
| 141 // alphabetical order. However, this is an implementation detail, and it’s OK | 145 // alphabetical order. However, this is an implementation detail, and it’s OK |
| 142 // if the writer stops sorting in this order. Testing for a specific order is | 146 // if the writer stops sorting in this order. Testing for a specific order is |
| 143 // just the easiest way to write this test while the writer will output things | 147 // just the easiest way to write this test while the writer will output things |
| 144 // in a known order. | 148 // in a known order. |
| 145 EXPECT_EQ(kKey2, | 149 EXPECT_EQ(kKey2, |
| 146 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].key)); | 150 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 151 dictionary->entries[0].key)); |
| 147 EXPECT_EQ(kValue2, | 152 EXPECT_EQ(kValue2, |
| 148 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].value)); | 153 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 154 dictionary->entries[0].value)); |
| 149 EXPECT_EQ(kKey0, | 155 EXPECT_EQ(kKey0, |
| 150 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[1].key)); | 156 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 157 dictionary->entries[1].key)); |
| 151 EXPECT_EQ(kValue0, | 158 EXPECT_EQ(kValue0, |
| 152 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[1].value)); | 159 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 160 dictionary->entries[1].value)); |
| 153 EXPECT_EQ(kKey1, | 161 EXPECT_EQ(kKey1, |
| 154 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[2].key)); | 162 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 163 dictionary->entries[2].key)); |
| 155 EXPECT_EQ(kValue1, | 164 EXPECT_EQ(kValue1, |
| 156 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[2].value)); | 165 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 166 dictionary->entries[2].value)); |
| 157 } | 167 } |
| 158 | 168 |
| 159 TEST(MinidumpSimpleStringDictionaryWriter, DuplicateKeyValue) { | 169 TEST(MinidumpSimpleStringDictionaryWriter, DuplicateKeyValue) { |
| 160 StringFileWriter file_writer; | 170 StringFileWriter file_writer; |
| 161 | 171 |
| 162 char kKey[] = "key"; | 172 char kKey[] = "key"; |
| 163 char kValue0[] = "fake_value"; | 173 char kValue0[] = "fake_value"; |
| 164 char kValue1[] = "value"; | 174 char kValue1[] = "value"; |
| 165 | 175 |
| 166 MinidumpSimpleStringDictionaryWriter dictionary_writer; | 176 MinidumpSimpleStringDictionaryWriter dictionary_writer; |
| 167 MinidumpSimpleStringDictionaryEntryWriter entry_writer_0; | 177 MinidumpSimpleStringDictionaryEntryWriter entry_writer_0; |
| 168 entry_writer_0.SetKeyValue(kKey, kValue0); | 178 entry_writer_0.SetKeyValue(kKey, kValue0); |
| 169 dictionary_writer.AddEntry(&entry_writer_0); | 179 dictionary_writer.AddEntry(&entry_writer_0); |
| 170 MinidumpSimpleStringDictionaryEntryWriter entry_writer_1; | 180 MinidumpSimpleStringDictionaryEntryWriter entry_writer_1; |
| 171 entry_writer_1.SetKeyValue(kKey, kValue1); | 181 entry_writer_1.SetKeyValue(kKey, kValue1); |
| 172 dictionary_writer.AddEntry(&entry_writer_1); | 182 dictionary_writer.AddEntry(&entry_writer_1); |
| 173 | 183 |
| 174 EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer)); | 184 EXPECT_TRUE(dictionary_writer.WriteEverything(&file_writer)); |
| 175 ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) + | 185 ASSERT_EQ(sizeof(MinidumpSimpleStringDictionary) + |
| 176 sizeof(MinidumpSimpleStringDictionaryEntry) + | 186 sizeof(MinidumpSimpleStringDictionaryEntry) + |
| 177 2 * sizeof(MinidumpUTF8String) + sizeof(kKey) + sizeof(kValue1), | 187 2 * sizeof(MinidumpUTF8String) + sizeof(kKey) + sizeof(kValue1), |
| 178 file_writer.string().size()); | 188 file_writer.string().size()); |
| 179 | 189 |
| 180 const MinidumpSimpleStringDictionary* dictionary = | 190 const MinidumpSimpleStringDictionary* dictionary = |
| 181 MinidumpSimpleStringDictionaryCast(file_writer); | 191 MinidumpSimpleStringDictionaryCast(file_writer); |
| 182 EXPECT_EQ(1u, dictionary->count); | 192 EXPECT_EQ(1u, dictionary->count); |
| 183 EXPECT_EQ(12u, dictionary->entries[0].key); | 193 EXPECT_EQ(12u, dictionary->entries[0].key); |
| 184 EXPECT_EQ(20u, dictionary->entries[0].value); | 194 EXPECT_EQ(20u, dictionary->entries[0].value); |
| 185 EXPECT_EQ(kKey, | 195 EXPECT_EQ(kKey, |
| 186 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].key)); | 196 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 197 dictionary->entries[0].key)); |
| 187 EXPECT_EQ(kValue1, | 198 EXPECT_EQ(kValue1, |
| 188 MinidumpUTF8StringAtRVA(file_writer, dictionary->entries[0].value)); | 199 MinidumpUTF8StringAtRVAAsString(file_writer.string(), |
| 200 dictionary->entries[0].value)); |
| 189 } | 201 } |
| 190 | 202 |
| 191 } // namespace | 203 } // namespace |
| 192 } // namespace test | 204 } // namespace test |
| 193 } // namespace crashpad | 205 } // namespace crashpad |
| OLD | NEW |