1 // Copyright 2013 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 "chrome/browser/extensions/api/identity/extension_token_key.h" 6 7 #include <algorithm> 8 #include <set> 9 #include <string> 10 #include <vector> 11 12 #include "testing/gtest/include/gtest/gtest.h" 13 14 TEST(IdentityExtensionTokenKeyTest, Ordering) { 15 std::string extension_id1("ext_id_1"); 16 std::string extension_id2("ext_id_2"); 17 std::set<std::string> scopes1; 18 std::set<std::string> scopes2; 19 std::set<std::string> scopes3; 20 21 scopes1.insert("a"); 22 scopes1.insert("b"); 23 scopes2.insert("a"); 24 25 std::vector<std::string> extension_ids; 26 extension_ids.push_back(extension_id1); 27 extension_ids.push_back(extension_id2); 28 29 std::vector<std::string> user_ids; 30 user_ids.push_back("user_id_1"); 31 user_ids.push_back("user_id_2"); 32 33 std::vector<std::set<std::string> > scopesets; 34 scopesets.push_back(scopes1); 35 scopesets.push_back(scopes2); 36 scopesets.push_back(scopes3); 37 38 std::vector<extensions::ExtensionTokenKey> keys; 39 typedef std::vector<extensions::ExtensionTokenKey>::const_iterator 40 ExtensionTokenKeyIterator; 41 42 std::vector<std::string>::const_iterator extension_it; 43 std::vector<std::string>::const_iterator user_it; 44 std::vector<std::set<std::string> >::const_iterator scope_it; 45 46 for (extension_it = extension_ids.begin(); 47 extension_it != extension_ids.end(); 48 ++extension_it) { 49 for (user_it = user_ids.begin(); user_it != user_ids.end(); ++user_it) { 50 for (scope_it = scopesets.begin(); scope_it != scopesets.end(); 51 ++scope_it) { 52 keys.push_back( 53 extensions::ExtensionTokenKey(*extension_it, *user_it, *scope_it)); 54 } 55 } 56 } 57 58 // keys should not be less than themselves 59 for (ExtensionTokenKeyIterator it = keys.begin(); it != keys.end(); ++it) { 60 EXPECT_FALSE(*it < *it); 61 } 62 63 // comparison should establish an ordering 64 std::sort(keys.begin(), keys.end()); 65 for (ExtensionTokenKeyIterator it1 = keys.begin(); it1 != keys.end(); ++it1) { 66 ExtensionTokenKeyIterator it2 = it1; 67 for (++it2; it2 != keys.end(); ++it2) { 68 EXPECT_LT(*it1, *it2); 69 EXPECT_FALSE(it2 < it1); 70 } 71 } 72 } 73