| 'use strict'; |
| var Runnable = require('./runnable'); |
| var utils = require('./utils'); |
| var errors = require('./errors'); |
| var createInvalidArgumentTypeError = errors.createInvalidArgumentTypeError; |
| var isString = utils.isString; |
| |
| module.exports = Test; |
| |
| /** |
| * Initialize a new `Test` with the given `title` and callback `fn`. |
| * |
| * @public |
| * @class |
| * @extends Runnable |
| * @param {String} title - Test title (required) |
| * @param {Function} [fn] - Test callback. If omitted, the Test is considered "pending" |
| */ |
| function Test(title, fn) { |
| if (!isString(title)) { |
| throw createInvalidArgumentTypeError( |
| 'Test argument "title" should be a string. Received type "' + |
| typeof title + |
| '"', |
| 'title', |
| 'string' |
| ); |
| } |
| Runnable.call(this, title, fn); |
| this.pending = !fn; |
| this.type = 'test'; |
| } |
| |
| /** |
| * Inherit from `Runnable.prototype`. |
| */ |
| utils.inherits(Test, Runnable); |
| |
| Test.prototype.clone = function() { |
| var test = new Test(this.title, this.fn); |
| test.timeout(this.timeout()); |
| test.slow(this.slow()); |
| test.enableTimeouts(this.enableTimeouts()); |
| test.retries(this.retries()); |
| test.currentRetry(this.currentRetry()); |
| test.globals(this.globals()); |
| test.parent = this.parent; |
| test.file = this.file; |
| test.ctx = this.ctx; |
| return test; |
| }; |