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/", false); |
397 | 397 |
398 FieldTrial* trial = FieldTrialList::Find("Some_name"); | 398 FieldTrial* trial = FieldTrialList::Find("Some_name"); |
399 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); | 399 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
400 EXPECT_EQ("Winner", trial->group_name()); | 400 EXPECT_EQ("Winner", trial->group_name()); |
401 EXPECT_EQ("Some_name", trial->trial_name()); | 401 EXPECT_EQ("Some_name", trial->trial_name()); |
402 | 402 |
403 trial = FieldTrialList::Find("xxx"); | 403 trial = FieldTrialList::Find("xxx"); |
404 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); | 404 ASSERT_NE(static_cast<FieldTrial*>(NULL), trial); |
405 EXPECT_EQ("yyyy", trial->group_name()); | 405 EXPECT_EQ("yyyy", trial->group_name()); |
406 EXPECT_EQ("xxx", trial->trial_name()); | 406 EXPECT_EQ("xxx", trial->trial_name()); |
407 } | 407 } |
408 | 408 |
409 TEST_F(FieldTrialTest, BogusRestore) { | 409 TEST_F(FieldTrialTest, BogusRestore) { |
410 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingSlash")); | 410 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingSlash", false)); |
411 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingGroupName/")); | 411 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingGroupName/", |
412 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 412 false)); |
413 "MissingFinalSlash/gname")); | 413 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingFinalSlash/gname", |
414 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString( | 414 false)); |
415 "noname, only group/")); | 415 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("noname, only group/", |
| 416 false)); |
416 } | 417 } |
417 | 418 |
418 TEST_F(FieldTrialTest, DuplicateRestore) { | 419 TEST_F(FieldTrialTest, DuplicateRestore) { |
419 FieldTrial* trial = FieldTrialList::FactoryGetFieldTrial( | 420 FieldTrial* trial = FieldTrialList::FactoryGetFieldTrial( |
420 "Some name", 10, "Default some name", next_year_, 12, 31, NULL); | 421 "Some name", 10, "Default some name", next_year_, 12, 31, NULL); |
421 trial->AppendGroup("Winner", 10); | 422 trial->AppendGroup("Winner", 10); |
422 // Finalize the group selection by accessing the selected group. | 423 // Finalize the group selection by accessing the selected group. |
423 trial->group(); | 424 trial->group(); |
424 std::string save_string; | 425 std::string save_string; |
425 FieldTrialList::StatesToString(&save_string); | 426 FieldTrialList::StatesToString(&save_string); |
426 EXPECT_EQ("Some name/Winner/", save_string); | 427 EXPECT_EQ("Some name/Winner/", save_string); |
427 | 428 |
428 // It is OK if we redundantly specify a winner. | 429 // It is OK if we redundantly specify a winner. |
429 EXPECT_TRUE(FieldTrialList::CreateTrialsFromString(save_string)); | 430 EXPECT_TRUE(FieldTrialList::CreateTrialsFromString(save_string, false)); |
430 | 431 |
431 // But it is an error to try to change to a different winner. | 432 // But it is an error to try to change to a different winner. |
432 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("Some name/Loser/")); | 433 EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("Some name/Loser/", |
| 434 false)); |
433 } | 435 } |
434 | 436 |
435 TEST_F(FieldTrialTest, CreateTrialsFromStringAreActive) { | 437 TEST_F(FieldTrialTest, CreateTrialsFromStringActive) { |
436 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 438 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
437 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); | 439 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); |
438 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/Xyz/zyx/")); | 440 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/Xyz/zyx/", true)); |
439 | 441 |
440 FieldTrial::ActiveGroups active_groups; | 442 FieldTrial::ActiveGroups active_groups; |
441 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | 443 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
442 ASSERT_EQ(2U, active_groups.size()); | 444 ASSERT_EQ(2U, active_groups.size()); |
443 EXPECT_EQ("Abc", active_groups[0].trial_name); | 445 EXPECT_EQ("Abc", active_groups[0].trial_name); |
444 EXPECT_EQ("def", active_groups[0].group_name); | 446 EXPECT_EQ("def", active_groups[0].group_name); |
445 EXPECT_EQ("Xyz", active_groups[1].trial_name); | 447 EXPECT_EQ("Xyz", active_groups[1].trial_name); |
446 EXPECT_EQ("zyx", active_groups[1].group_name); | 448 EXPECT_EQ("zyx", active_groups[1].group_name); |
447 } | 449 } |
448 | 450 |
449 TEST_F(FieldTrialTest, CreateTrialsFromStringObserver) { | 451 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActive) { |
| 452 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
| 453 ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); |
| 454 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/Xyz/zyx/", |
| 455 false)); |
| 456 |
| 457 FieldTrial::ActiveGroups active_groups; |
| 458 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
| 459 ASSERT_TRUE(active_groups.empty()); |
| 460 |
| 461 // Check that the values still get returned and querying them activates them. |
| 462 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); |
| 463 EXPECT_EQ("zyx", FieldTrialList::FindFullName("Xyz")); |
| 464 |
| 465 FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
| 466 ASSERT_EQ(2U, active_groups.size()); |
| 467 EXPECT_EQ("Abc", active_groups[0].trial_name); |
| 468 EXPECT_EQ("def", active_groups[0].group_name); |
| 469 EXPECT_EQ("Xyz", active_groups[1].trial_name); |
| 470 EXPECT_EQ("zyx", active_groups[1].group_name); |
| 471 } |
| 472 |
| 473 TEST_F(FieldTrialTest, CreateTrialsFromStringActiveObserver) { |
450 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); | 474 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
451 | 475 |
452 TestFieldTrialObserver observer; | 476 TestFieldTrialObserver observer; |
453 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/")); | 477 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/", true)); |
| 478 |
| 479 RunLoop().RunUntilIdle(); |
| 480 EXPECT_EQ("Abc", observer.trial_name()); |
| 481 EXPECT_EQ("def", observer.group_name()); |
| 482 } |
| 483 |
| 484 TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) { |
| 485 ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); |
| 486 |
| 487 TestFieldTrialObserver observer; |
| 488 ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/", false)); |
| 489 RunLoop().RunUntilIdle(); |
| 490 // Observer shouldn't be notified. |
| 491 EXPECT_TRUE(observer.trial_name().empty()); |
| 492 |
| 493 // Check that the values still get returned and querying them activates them. |
| 494 EXPECT_EQ("def", FieldTrialList::FindFullName("Abc")); |
454 | 495 |
455 RunLoop().RunUntilIdle(); | 496 RunLoop().RunUntilIdle(); |
456 EXPECT_EQ("Abc", observer.trial_name()); | 497 EXPECT_EQ("Abc", observer.trial_name()); |
457 EXPECT_EQ("def", observer.group_name()); | 498 EXPECT_EQ("def", observer.group_name()); |
458 } | 499 } |
459 | 500 |
460 TEST_F(FieldTrialTest, CreateFieldTrial) { | 501 TEST_F(FieldTrialTest, CreateFieldTrial) { |
461 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); | 502 ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); |
462 | 503 |
463 FieldTrialList::CreateFieldTrial("Some_name", "Winner"); | 504 FieldTrialList::CreateFieldTrial("Some_name", "Winner"); |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 | 878 |
838 FieldTrial* trial = | 879 FieldTrial* trial = |
839 FieldTrialList::FactoryGetFieldTrial( | 880 FieldTrialList::FactoryGetFieldTrial( |
840 kTrialName, kProbability, kDefaultGroupName, | 881 kTrialName, kProbability, kDefaultGroupName, |
841 FieldTrialList::kNoExpirationYear, 1, 1, NULL); | 882 FieldTrialList::kNoExpirationYear, 1, 1, NULL); |
842 trial->AppendGroup(kGroupName, kProbability); | 883 trial->AppendGroup(kGroupName, kProbability); |
843 EXPECT_EQ(kGroupName, trial->group_name()); | 884 EXPECT_EQ(kGroupName, trial->group_name()); |
844 } | 885 } |
845 | 886 |
846 } // namespace base | 887 } // namespace base |
OLD | NEW |