X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=dependencies64%2Fcef%2Fwindows%2Ftests%2Fceftests%2Ftest_util.cc;fp=dependencies64%2Fcef%2Fwindows%2Ftests%2Fceftests%2Ftest_util.cc;h=b7040e39c91f6f8b598de1baaa61b14e75d15860;hb=8128744e46d808a1105fb449365d7028df8c32b4;hp=0000000000000000000000000000000000000000;hpb=3a0dc241f598cabf83bcc67970176453929a73f1;p=casparcg diff --git a/dependencies64/cef/windows/tests/ceftests/test_util.cc b/dependencies64/cef/windows/tests/ceftests/test_util.cc new file mode 100644 index 000000000..b7040e39c --- /dev/null +++ b/dependencies64/cef/windows/tests/ceftests/test_util.cc @@ -0,0 +1,263 @@ +// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights +// reserved. Use of this source code is governed by a BSD-style license that +// can be found in the LICENSE file. + +#include "tests/ceftests/test_util.h" +#include "tests/gtest/include/gtest/gtest.h" + +void TestMapEqual(const CefRequest::HeaderMap& map1, + const CefRequest::HeaderMap& map2, + bool allowExtras) { + if (!allowExtras) + EXPECT_EQ(map1.size(), map2.size()); + + TestMapNoDuplicates(map1); + TestMapNoDuplicates(map2); + + CefRequest::HeaderMap::const_iterator it1, it2; + + for (it1 = map1.begin(); it1 != map1.end(); ++it1) { + it2 = map2.find(it1->first); + EXPECT_TRUE(it2 != map2.end()); + if (it2 != map2.end()) { + EXPECT_STREQ(it1->second.ToString().c_str(), + it2->second.ToString().c_str()); + } + } +} + +void TestMapNoDuplicates(const CefRequest::HeaderMap& map) { + CefRequest::HeaderMap::const_iterator it1 = map.begin(); + for (; it1 != map.end(); ++it1) { + CefRequest::HeaderMap::const_iterator it2 = it1; + for (++it2; it2 != map.end(); ++it2) { + EXPECT_FALSE(it1->first == it2->first && it1->second == it2->second) << + "Duplicate entry for " << it1->first.ToString() << ": " << + it1->second.ToString(); + } + } +} + +void TestPostDataElementEqual(CefRefPtr elem1, + CefRefPtr elem2) { + EXPECT_TRUE(elem1.get()); + EXPECT_TRUE(elem2.get()); + + EXPECT_EQ(elem1->GetType(), elem2->GetType()); + switch (elem1->GetType()) { + case PDE_TYPE_BYTES: { + EXPECT_EQ(elem1->GetBytesCount(), elem2->GetBytesCount()); + size_t bytesCt = elem1->GetBytesCount(); + char* buff1 = new char[bytesCt]; + char* buff2 = new char[bytesCt]; + elem1->GetBytes(bytesCt, buff1); + elem2->GetBytes(bytesCt, buff2); + EXPECT_TRUE(!memcmp(buff1, buff2, bytesCt)); + delete [] buff1; + delete [] buff2; + } break; + case PDE_TYPE_FILE: + EXPECT_EQ(elem1->GetFile(), elem2->GetFile()); + break; + default: + break; + } +} + +void TestPostDataEqual(CefRefPtr postData1, + CefRefPtr postData2) { + EXPECT_TRUE(postData1.get()); + EXPECT_TRUE(postData2.get()); + + EXPECT_EQ(postData1->GetElementCount(), postData2->GetElementCount()); + + CefPostData::ElementVector ev1, ev2; + postData1->GetElements(ev1); + postData1->GetElements(ev2); + ASSERT_EQ(ev1.size(), ev2.size()); + + CefPostData::ElementVector::const_iterator it1 = ev1.begin(); + CefPostData::ElementVector::const_iterator it2 = ev2.begin(); + for (; it1 != ev1.end() && it2 != ev2.end(); ++it1, ++it2) + TestPostDataElementEqual((*it1), (*it2)); +} + +void TestRequestEqual(CefRefPtr request1, + CefRefPtr request2, + bool allowExtras) { + EXPECT_TRUE(request1.get()); + EXPECT_TRUE(request2.get()); + + EXPECT_STREQ(request1->GetURL().ToString().c_str(), + request2->GetURL().ToString().c_str()); + EXPECT_STREQ(request1->GetMethod().ToString().c_str(), + request2->GetMethod().ToString().c_str()); + + EXPECT_STREQ(request1->GetReferrerURL().ToString().c_str(), + request2->GetReferrerURL().ToString().c_str()); + EXPECT_EQ(request1->GetReferrerPolicy(), request2->GetReferrerPolicy()); + + CefRequest::HeaderMap headers1, headers2; + request1->GetHeaderMap(headers1); + request2->GetHeaderMap(headers2); + TestMapEqual(headers1, headers2, allowExtras); + + CefRefPtr postData1 = request1->GetPostData(); + CefRefPtr postData2 = request2->GetPostData(); + EXPECT_EQ(!!(postData1.get()), !!(postData2.get())); + if (postData1.get() && postData2.get()) + TestPostDataEqual(postData1, postData2); +} + +void TestResponseEqual(CefRefPtr response1, + CefRefPtr response2, + bool allowExtras) { + EXPECT_TRUE(response1.get()); + EXPECT_TRUE(response2.get()); + + EXPECT_EQ(response1->GetStatus(), response2->GetStatus()); + EXPECT_STREQ(response1->GetStatusText().ToString().c_str(), + response2->GetStatusText().ToString().c_str()); + EXPECT_STREQ(response1->GetMimeType().ToString().c_str(), + response2->GetMimeType().ToString().c_str()); + + CefRequest::HeaderMap headers1, headers2; + response1->GetHeaderMap(headers1); + response2->GetHeaderMap(headers2); + TestMapEqual(headers1, headers2, allowExtras); +} + +void TestBinaryEqual(CefRefPtr val1, + CefRefPtr val2) { + EXPECT_TRUE(val1.get()); + EXPECT_TRUE(val2.get()); + + EXPECT_TRUE(val1->IsEqual(val2)); + EXPECT_TRUE(val2->IsEqual(val1)); + + size_t data_size = val1->GetSize(); + EXPECT_EQ(data_size, val2->GetSize()); + + EXPECT_GT(data_size, (size_t)0); + + char* data1 = new char[data_size+1]; + char* data2 = new char[data_size+1]; + + EXPECT_EQ(data_size, val1->GetData(data1, data_size, 0)); + data1[data_size] = 0; + EXPECT_EQ(data_size, val2->GetData(data2, data_size, 0)); + data2[data_size] = 0; + + EXPECT_STREQ(data1, data2); + + delete [] data1; + delete [] data2; +} + +void TestDictionaryEqual(CefRefPtr val1, + CefRefPtr val2) { + EXPECT_TRUE(val1.get()); + EXPECT_TRUE(val2.get()); + + EXPECT_TRUE(val1->IsEqual(val2)); + EXPECT_TRUE(val2->IsEqual(val1)); + + EXPECT_EQ(val1->GetSize(), val2->GetSize()); + + CefDictionaryValue::KeyList keys; + EXPECT_TRUE(val1->GetKeys(keys)); + + CefDictionaryValue::KeyList::const_iterator it = keys.begin(); + for (; it != keys.end(); ++it) { + CefString key = *it; + EXPECT_TRUE(val2->HasKey(key)); + CefValueType type = val1->GetType(key); + EXPECT_EQ(type, val2->GetType(key)); + switch (type) { + case VTYPE_INVALID: + case VTYPE_NULL: + break; + case VTYPE_BOOL: + EXPECT_EQ(val1->GetBool(key), val2->GetBool(key)); + break; + case VTYPE_INT: + EXPECT_EQ(val1->GetInt(key), val2->GetInt(key)); + break; + case VTYPE_DOUBLE: + EXPECT_EQ(val1->GetDouble(key), val2->GetDouble(key)); + break; + case VTYPE_STRING: + EXPECT_EQ(val1->GetString(key), val2->GetString(key)); + break; + case VTYPE_BINARY: + TestBinaryEqual(val1->GetBinary(key), val2->GetBinary(key)); + break; + case VTYPE_DICTIONARY: + TestDictionaryEqual(val1->GetDictionary(key), val2->GetDictionary(key)); + break; + case VTYPE_LIST: + TestListEqual(val1->GetList(key), val2->GetList(key)); + break; + } + } +} + +void TestListEqual(CefRefPtr val1, + CefRefPtr val2) { + EXPECT_TRUE(val1.get()); + EXPECT_TRUE(val2.get()); + + EXPECT_TRUE(val1->IsEqual(val2)); + EXPECT_TRUE(val2->IsEqual(val1)); + + size_t size = val1->GetSize(); + EXPECT_EQ(size, val2->GetSize()); + + for (size_t i = 0; i < size; ++i) { + CefValueType type = val1->GetType(i); + EXPECT_EQ(type, val2->GetType(i)); + switch (type) { + case VTYPE_INVALID: + case VTYPE_NULL: + break; + case VTYPE_BOOL: + EXPECT_EQ(val1->GetBool(i), val2->GetBool(i)); + break; + case VTYPE_INT: + EXPECT_EQ(val1->GetInt(i), val2->GetInt(i)); + break; + case VTYPE_DOUBLE: + EXPECT_EQ(val1->GetDouble(i), val2->GetDouble(i)); + break; + case VTYPE_STRING: + EXPECT_EQ(val1->GetString(i), val2->GetString(i)); + break; + case VTYPE_BINARY: + TestBinaryEqual(val1->GetBinary(i), val2->GetBinary(i)); + break; + case VTYPE_DICTIONARY: + TestDictionaryEqual(val1->GetDictionary(i), val2->GetDictionary(i)); + break; + case VTYPE_LIST: + TestListEqual(val1->GetList(i), val2->GetList(i)); + break; + } + } +} + +void TestProcessMessageEqual(CefRefPtr val1, + CefRefPtr val2) { + EXPECT_TRUE(val1.get()); + EXPECT_TRUE(val2.get()); + EXPECT_EQ(val1->GetName(), val2->GetName()); + + TestListEqual(val1->GetArgumentList(), val2->GetArgumentList()); +} + +void TestStringVectorEqual(const std::vector& val1, + const std::vector& val2) { + EXPECT_EQ(val1.size(), val2.size()); + + for (size_t i = 0; i < val1.size(); ++i) + EXPECT_STREQ(val1[i].ToString().c_str(), val2[i].ToString().c_str()); +}