Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2014 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_MIXIN_BASED_BROWSER_TEST_H_
      6 #define CHROME_BROWSER_CHROMEOS_LOGIN_MIXIN_BASED_BROWSER_TEST_H_
      7 
      8 #include "base/memory/scoped_vector.h"
      9 #include "chrome/test/base/in_process_browser_test.h"
     10 
     11 namespace chromeos {
     12 
     13 class MixinBasedBrowserTest : public InProcessBrowserTest {
     14  public:
     15   // A class that can be used to add some features not related directly to the
     16   // testing process in order not to make the test class too complicated and to
     17   // set up them in a proper time (at the same time when the corresponding set
     18   // ups for the main test are run).
     19   //
     20   // To used this you need to derive a class from from
     21   // MixinBasedBrowserTest::Mixin, e.g. MixinYouWantToUse, and declare all
     22   // the methods you'd like in this new class. You also can reload setups and
     23   // teardowns if you need so. Test which wants to use some mixin should call
     24   // AddMixin(mixin_) from its constructor, where mixin_ should be an instance
     25   // of MixinYouWantToUse.
     26   //
     27   // All methods in Mixin are complete analogs of those in InProcessBrowserTest,
     28   // so if some usecases are unclear, take a look at in_process_browser_test.h
     29   class Mixin {
     30    public:
     31     Mixin() {}
     32     virtual ~Mixin() {}
     33 
     34     // Is called before creating the browser and running
     35     // SetUpInProcessBrowserTestFixture.
     36     // Should be used for setting up the command line.
     37     virtual void SetUpCommandLine(base::CommandLine* command_line) {}
     38 
     39     // Is called before creating the browser.
     40     // Should be used to set up the environment for running the browser.
     41     virtual void SetUpInProcessBrowserTestFixture() {}
     42 
     43     // Is called after creating the browser and before executing test code.
     44     // Should be used for setting up things related to the browser object.
     45     virtual void SetUpOnMainThread() {}
     46 
     47     // Is called after executing the test code and before the browser is torn
     48     // down.
     49     // Should be used to do the necessary cleanup on the working browser.
     50     virtual void TearDownOnMainThread() {}
     51 
     52     // Is called after the browser is torn down.
     53     // Should be used to do the remaining cleanup.
     54     virtual void TearDownInProcessBrowserTestFixture() {}
     55   };
     56 
     57   MixinBasedBrowserTest();
     58   virtual ~MixinBasedBrowserTest();
     59 
     60   // Override from InProcessBrowserTest.
     61   virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
     62   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
     63   virtual void SetUpOnMainThread() OVERRIDE;
     64   virtual void TearDownOnMainThread() OVERRIDE;
     65   virtual void TearDownInProcessBrowserTestFixture() OVERRIDE;
     66 
     67  protected:
     68   // Adds |mixin| as an mixin for this test, passing ownership
     69   // for it to MixinBasedBrowserTest.
     70   // Should be called in constructor of the test (should be already completed
     71   // before running set ups).
     72   void AddMixin(Mixin* mixin);
     73 
     74  private:
     75   // Keeps all the mixins for this test,
     76   ScopedVector<Mixin> mixins_;
     77 
     78   // Is false initially, becomes true when any of SetUp* methods is called.
     79   // Required to check that AddMixin is always called before setting up.
     80   bool setup_was_launched_;
     81 };
     82 
     83 }  // namespace chromeos
     84 
     85 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_MIXIN_BASED_BROWSER_TEST_H_
     86