old_contents: var args = require('yargs').argv;
  var chalk = require('chalk');
  var wct = require('web-component-tester').test;
  var _ = require('lodash');
  var gutil = require('gulp-util');
  
  function cleanDone(done) {
    return function(error) {
      if (error) {
        // Pretty error for gulp.
        error = new Error(chalk.red(error.message || error));
        error.showStack = false;
      }
      done(error);
    };
  }
  
  function checkArguments(arguments) {
    _.forEach(arguments, function(a) {
      if(!args.hasOwnProperty(a)) {
        throw Error('Required argument \'--'+ a +'\' is missing.');
      }
    });
  }
  
  function localAddress() {
    var ip, tun, ifaces = require('os').networkInterfaces();
    Object.keys(ifaces).forEach(function (ifname) {
      ifaces[ifname].forEach(function (iface) {
        if ('IPv4' == iface.family && !iface.internal) {
          if (!ip) ip = iface.address;
          if (/tun/.test(ifname)) tun = iface.address;
        }
      });
    });
    return tun || ip;
  }
  
  function test(options, done) {
    wct(options, cleanDone(done));
  }
  
  module.exports = {
    localAddress: localAddress,
    test: test,
    checkArguments: checkArguments,
  
    testSauce: function(suites, browsers, build, done) {
          checkArguments(['sauceUsername', 'sauceAccessKey']);
  
          test(
            {
              suites: suites,
              browserOptions: {
                name: localAddress() + ' / ' + new Date(),
                build: build
              },
  
              plugins: {
                //local: {
                //  browsers: ['chrome']
                //},
                sauce: {
                  username: args.sauceUsername,
                  accessKey: args.sauceAccessKey,
                  browsers: browsers
                },
                'teamcity-reporter': args.teamcity
              },
              webserver: {
                hostname: localAddress()
              }
            }, done);
    },
  
    autoRevert: function(err, handler, done) {
      if(err) {
        gutil.log(err.toString());
        if(args.autoRevert) {
          handler();
        } else {
          gutil.log('No action. Use --auto-revert to revert changes.')
          done(err);
        }
      } else {
        done();
      }
    }
  };
  
new_contents: var args = require('yargs').argv;
  var chalk = require('chalk');
  var wct = require('web-component-tester').test;
  var _ = require('lodash');
  var gutil = require('gulp-util');
  
  function cleanDone(done) {
    return function(error) {
      if (error) {
        // Pretty error for gulp.
        error = new Error(chalk.red(error.message || error));
        error.showStack = false;
      }
      done(error);
    };
  }
  
  function checkArguments(arguments) {
    _.forEach(arguments, function(a) {
      if(!args.hasOwnProperty(a)) {
        throw Error('Required argument \'--'+ a +'\' is missing.');
      }
    });
  }
  
  function localAddress() {
    var ip, tun, ifaces = require('os').networkInterfaces();
    Object.keys(ifaces).forEach(function (ifname) {
      ifaces[ifname].forEach(function (iface) {
        if ('IPv4' == iface.family && !iface.internal) {
          if (!ip) ip = iface.address;
          if (/tun/.test(ifname)) tun = iface.address;
        }
      });
    });
    return tun || ip;
  }
  
  function test(options, done) {
    wct(options, cleanDone(done));
  }
  
  module.exports = {
    localAddress: localAddress,
    test: test,
    checkArguments: checkArguments,
  
    testSauce: function(suites, browsers, build, done) {
      test(
        {
          suites: suites,
          browserOptions: {
            name: localAddress() + ' / ' + new Date(),
            build: build
          },
  
          plugins: {
            //local: {
            //  browsers: ['chrome']
            //},
            sauce: {
              username: args.sauceUsername,
              accessKey: args.sauceAccessKey,
              browsers: browsers
            },
            'teamcity-reporter': args.teamcity
          },
          webserver: {
            hostname: localAddress()
          }
      }, done);
    },
  
    autoRevert: function(err, handler, done) {
      if(err) {
        gutil.log(err.toString());
        if(args.autoRevert) {
          handler();
        } else {
          gutil.log('No action. Use --auto-revert to revert changes.')
          done(err);
        }
      } else {
        done();
      }
    }
  };
  
subject: Make Sauce credentials optional in test tasks.