| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/metrics/field_trial.h" | 5 #include "base/metrics/field_trial.h" |
| 6 | 6 |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 trial3->group(); | 386 trial3->group(); |
| 387 | 387 |
| 388 FieldTrialList::StatesToString(&save_string); | 388 FieldTrialList::StatesToString(&save_string); |
| 389 EXPECT_EQ("Some name/Winner/xxx/yyyy/zzz/default/", save_string); | 389 EXPECT_EQ("Some name/Winner/xxx/yyyy/zzz/default/", save_string); |
| 390 } | 390 } |
| 391 | 391 |
| 392 TEST_F(FieldTrialTest, Restore) { | 392 TEST_F(FieldTrialTest, Restore) { |
| 393 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); | 393 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); |
| 394 ASSERT_FALSE(FieldTrialList::TrialExists("xxx")); | 394 ASSERT_FALSE(FieldTrialList::TrialExists("xxx")); |
| 395 | 395 |
| 396 FieldTrialList::CreateTrialsFromString("Some_name/Winner/xxx/yyyy/"); | 396 FieldTrialList::CreateTrialsFromString("Some_name/Winner/xxx/yyyy/", |
| 397 FieldTrialList::DONT_ACTIVATE_TRIALS); |
| 397 | 398 |
| 398 FieldTrial* trial = FieldTrialList::Find("Some_name"); | 399 FieldTrial* trial = FieldTrialList::Find("Some_name"); |
| 399 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); | 400 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
| 400 EXPECT_EQ("Winner", trial->group_name()); | 401 EXPECT_EQ("Winner", trial->group_name()); |
| 401 EXPECT_EQ("Some_name", trial->trial_name()); | 402 EXPECT_EQ("Some_name", trial->trial_name()); |
| 402 | 403 |
| 403 trial = FieldTrialList::Find("xxx"); | 404 trial = FieldTrialList::Find("xxx"); |
| 404 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); | 405 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
| 405 EXPECT_EQ("yyyy", trial->group_name()); | 406 EXPECT_EQ("yyyy", trial->group_name()); |
| 406 EXPECT_EQ("xxx", trial->trial_name()); | 407 EXPECT_EQ("xxx", trial->trial_name()); |
| 407 } | 408 } |
| 408 | 409 |
| 409 TEST_F(FieldTrialTest, BogusRestore) { | 410 TEST_F(FieldTrialTest, BogusRestore) { |
| 410 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingSlash")); | |
| 411 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingGroupName/")); | |
| 412 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 411 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
| 413 "MissingFinalSlash/gname")); | 412 "MissingSlash", FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 414 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 413 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
| 415 "noname, only group/")); | 414 "MissingGroupName/", FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 415 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
| 416 "MissingFinalSlash/gname", FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 417 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
| 418 "noname, only group/", FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 416 } | 419 } |
| 417 | 420 |
| 418 TEST_F(FieldTrialTest, DuplicateRestore) { | 421 TEST_F(FieldTrialTest, DuplicateRestore) { |
| 419 FieldTrial* trial = FieldTrialList::FactoryGetFieldTrial( | 422 FieldTrial* trial = FieldTrialList::FactoryGetFieldTrial( |
| 420 "Some name", 10, "Default some name", next_year_, 12, 31, NULL); | 423 "Some name", 10, "Default some name", next_year_, 12, 31, NULL); |
| 421 trial->AppendGroup("Winner", 10); | 424 trial->AppendGroup("Winner", 10); |
| 422 // Finalize the group selection by accessing the selected group. | 425 // Finalize the group selection by accessing the selected group. |
| 423 trial->group(); | 426 trial->group(); |
| 424 std::string save_string; | 427 std::string save_string; |
| 425 FieldTrialList::StatesToString(&save_string); | 428 FieldTrialList::StatesToString(&save_string); |
| 426 EXPECT_EQ("Some name/Winner/", save_string); | 429 EXPECT_EQ("Some name/Winner/", save_string); |
| 427 | 430 |
| 428 // It is OK if we redundantly specify a winner. | 431 // It is OK if we redundantly specify a winner. |
| 429 EXPECT_TRUE(FieldTrialList::CreateTrialsFromString(save_string)); | 432 EXPECT_TRUE(FieldTrialList::CreateTrialsFromString( |
| 433 save_string, FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 430 | 434 |
| 431 // But it is an error to try to change to a different winner. | 435 // But it is an error to try to change to a different winner. |
| 432 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("Some name/Loser/")); | 436 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( |
| 437 "Some name/Loser/", FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 433 } | 438 } |
| 434 | 439 |
| 435 TEST_F(FieldTrialTest, CreateTrialsFromStringAreActive) { | 440 TEST_F(FieldTrialTest, CreateTrialsFromStringActive) { |
| 436 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 441 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
| 437 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); | 442 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); |
| 438 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/Xyz/zyx/")); | 443 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
| 444 "Abc/def/Xyz/zyx/", FieldTrialList::ACTIVATE_TRIALS)); |
| 439 | 445 |
| 440 FieldTrial::ActiveGroups active_groups; | 446 FieldTrial::ActiveGroups active_groups; |
| 441 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | 447 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
| 442 ASSERT_EQ(2U, active_groups.size()); | 448 ASSERT_EQ(2U, active_groups.size()); |
| 443 EXPECT_EQ("Abc", active_groups[0].trial_name); | 449 EXPECT_EQ("Abc", active_groups[0].trial_name); |
| 444 EXPECT_EQ("def", active_groups[0].group_name); | 450 EXPECT_EQ("def", active_groups[0].group_name); |
| 445 EXPECT_EQ("Xyz", active_groups[1].trial_name); | 451 EXPECT_EQ("Xyz", active_groups[1].trial_name); |
| 446 EXPECT_EQ("zyx", active_groups[1].group_name); | 452 EXPECT_EQ("zyx", active_groups[1].group_name); |
| 447 } | 453 } |
| 448 | 454 |
| 449 TEST_F(FieldTrialTest, CreateTrialsFromStringObserver) { | 455 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActive) { |
| 456 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
| 457 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); |
| 458 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
| 459 "Abc/def/Xyz/zyx/", FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 460 |
| 461 FieldTrial::ActiveGroups active_groups; |
| 462 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
| 463 ASSERT_TRUE(active_groups.empty()); |
| 464 |
| 465 // Check that the values still get returned and querying them activates them. |
| 466 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); |
| 467 EXPECT_EQ("zyx", FieldTrialList::FindFullName("Xyz")); |
| 468 |
| 469 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
| 470 ASSERT_EQ(2U, active_groups.size()); |
| 471 EXPECT_EQ("Abc", active_groups[0].trial_name); |
| 472 EXPECT_EQ("def", active_groups[0].group_name); |
| 473 EXPECT_EQ("Xyz", active_groups[1].trial_name); |
| 474 EXPECT_EQ("zyx", active_groups[1].group_name); |
| 475 } |
| 476 |
| 477 TEST_F(FieldTrialTest, CreateTrialsFromStringActiveObserver) { |
| 450 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 478 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
| 451 | 479 |
| 452 TestFieldTrialObserver observer; | 480 TestFieldTrialObserver observer; |
| 453 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/")); | 481 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
| 482 "Abc/def/", FieldTrialList::ACTIVATE_TRIALS)); |
| 483 |
| 484 RunLoop().RunUntilIdle(); |
| 485 EXPECT_EQ("Abc", observer.trial_name()); |
| 486 EXPECT_EQ("def", observer.group_name()); |
| 487 } |
| 488 |
| 489 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) { |
| 490 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
| 491 |
| 492 TestFieldTrialObserver observer; |
| 493 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( |
| 494 "Abc/def/", FieldTrialList::DONT_ACTIVATE_TRIALS)); |
| 495 RunLoop().RunUntilIdle(); |
| 496 // Observer shouldn't be notified. |
| 497 EXPECT_TRUE(observer.trial_name().empty()); |
| 498 |
| 499 // Check that the values still get returned and querying them activates them. |
| 500 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); |
| 454 | 501 |
| 455 RunLoop().RunUntilIdle(); | 502 RunLoop().RunUntilIdle(); |
| 456 EXPECT_EQ("Abc", observer.trial_name()); | 503 EXPECT_EQ("Abc", observer.trial_name()); |
| 457 EXPECT_EQ("def", observer.group_name()); | 504 EXPECT_EQ("def", observer.group_name()); |
| 458 } | 505 } |
| 459 | 506 |
| 460 TEST_F(FieldTrialTest, CreateFieldTrial) { | 507 TEST_F(FieldTrialTest, CreateFieldTrial) { |
| 461 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); | 508 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); |
| 462 | 509 |
| 463 FieldTrialList::CreateFieldTrial("Some_name", "Winner"); | 510 FieldTrialList::CreateFieldTrial("Some_name", "Winner"); |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 837 | 884 |
| 838 FieldTrial* trial = | 885 FieldTrial* trial = |
| 839 FieldTrialList::FactoryGetFieldTrial( | 886 FieldTrialList::FactoryGetFieldTrial( |
| 840 kTrialName, kProbability, kDefaultGroupName, | 887 kTrialName, kProbability, kDefaultGroupName, |
| 841 FieldTrialList::kNoExpirationYear, 1, 1, NULL); | 888 FieldTrialList::kNoExpirationYear, 1, 1, NULL); |
| 842 trial->AppendGroup(kGroupName, kProbability); | 889 trial->AppendGroup(kGroupName, kProbability); |
| 843 EXPECT_EQ(kGroupName, trial->group_name()); | 890 EXPECT_EQ(kGroupName, trial->group_name()); |
| 844 } | 891 } |
| 845 | 892 |
| 846 } // namespace base | 893 } // namespace base |
| OLD | NEW |