All files argument.js

76.47% Statements 13/17
66.67% Branches 4/6
57.14% Functions 4/7
75% Lines 12/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 461x       81x 81x   75x   75x                   75x 90x         90x 90x                         77x 77x       1x  
const { CucumberExpressionError } = require('./errors')
 
class Argument {
  static build(treeRegexp, text, parameterTypes) {
    const group = treeRegexp.match(text)
    if (!group) return null
 
    const argGroups = group.children
 
    Iif (argGroups.length !== parameterTypes.length) {
      throw new CucumberExpressionError(
        `Expression ${treeRegexp.regexp} has ${
          argGroups.length
        } capture groups (${argGroups.map(g => g.value)}), but there were ${
          parameterTypes.length
        } parameter types (${parameterTypes.map(p => p.name)})`
      )
    }
 
    return parameterTypes.map(
      (parameterType, i) => new Argument(argGroups[i], parameterType)
    )
  }
 
  constructor(group, parameterType) {
    this._group = group
    this._parameterType = parameterType
  }
 
  get group() {
    return this._group
  }
 
  /**
   * Get the value returned by the parameter type's transformer function.
   *
   * @param thisObj the object in which the transformer function is applied.
   */
  getValue(thisObj) {
    let groupValues = this._group ? this._group.values : null
    return this._parameterType.transform(thisObj, groupValues)
  }
}
 
module.exports = Argument