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 <locale> 6 7#include "base/logging.h" 8#include "components/autofill/core/browser/password_generator.h" 9#include "testing/gtest/include/gtest/gtest.h" 10 11namespace autofill { 12 13TEST(PasswordGeneratorTest, PasswordLength) { 14 PasswordGenerator pg1(10); 15 std::string password = pg1.Generate(); 16 EXPECT_EQ(password.size(), 10u); 17 18 PasswordGenerator pg2(-1); 19 password = pg2.Generate(); 20 EXPECT_EQ(password.size(), 21 static_cast<size_t>(PasswordGenerator::kDefaultPasswordLength)); 22 23 PasswordGenerator pg3(100); 24 password = pg3.Generate(); 25 EXPECT_EQ(password.size(), 26 static_cast<size_t>(PasswordGenerator::kDefaultPasswordLength)); 27} 28 29TEST(PasswordGeneratorTest, PasswordPattern) { 30 PasswordGenerator pg(12); 31 std::string password = pg.Generate(); 32 int num_upper_case_letters = 0; 33 int num_lower_case_letters = 0; 34 int num_digits = 0; 35 for (size_t i = 0; i < password.size(); i++) { 36 if (isupper(password[i])) 37 ++num_upper_case_letters; 38 else if (islower(password[i])) 39 ++num_lower_case_letters; 40 else if (isdigit(password[i])) 41 ++num_digits; 42 } 43 EXPECT_GT(num_upper_case_letters, 0) << password; 44 EXPECT_GT(num_lower_case_letters, 0) << password; 45 EXPECT_GT(num_digits, 0) << password; 46} 47 48TEST(PasswordGeneratorTest, Printable) { 49 PasswordGenerator pg(12); 50 std::string password = pg.Generate(); 51 for (size_t i = 0; i < password.size(); i++) { 52 // Make sure that the character is printable. 53 EXPECT_TRUE(isgraph(password[i])); 54 } 55} 56 57} // namespace autofill 58