# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from threading import Thread

from testrunner import TPSTestRunner

class TPSTestThread(Thread):

    def __init__(self, extensionDir, builddata=None,
                 testfile=None, logfile=None, rlock=None, config=None):
        assert(builddata)
        assert(config)
        self.extensionDir = extensionDir
        self.builddata = builddata
        self.testfile = testfile
        self.logfile = logfile
        self.rlock = rlock
        self.config = config
        Thread.__init__(self)

    def run(self):
        # run the tests in normal mode ...
        TPS = TPSTestRunner(self.extensionDir,
                            testfile=self.testfile,
                            logfile=self.logfile,
                            binary=self.builddata['buildurl'],
                            config=self.config,
                            rlock=self.rlock,
                            mobile=False)
        TPS.run_tests()

        # Get the binary used by this TPS instance, and use it in subsequent
        # ones, so it doesn't have to be re-downloaded each time.
        binary = TPS.firefoxRunner.binary

        # ... and then again in mobile mode
        TPS_mobile = TPSTestRunner(self.extensionDir,
                                   testfile=self.testfile,
                                   logfile=self.logfile,
                                   binary=binary,
                                   config=self.config,
                                   rlock=self.rlock,
                                   mobile=True)
        TPS_mobile.run_tests()

        # ... and again via the staging server, if credentials are present
        stageaccount = self.config.get('stageaccount')
        if stageaccount:
            username = stageaccount.get('username')
            password = stageaccount.get('password')
            passphrase = stageaccount.get('passphrase')
            if username and password and passphrase:
                stageconfig = self.config.copy()
                stageconfig['account'] = stageaccount.copy()
                TPS_stage = TPSTestRunner(self.extensionDir,
                                          testfile=self.testfile,
                                          logfile=self.logfile,
                                          binary=binary,
                                          config=stageconfig,
                                          rlock=self.rlock,
                                          mobile=False)#, autolog=self.autolog)
                TPS_stage.run_tests()
