Newer
Older
li-utils / test / run.js
@kieffer kieffer on 13 Dec 2016 2 KB Update des TU
/* global __dirname, require, process, it */
'use strict';

var pkg = require('../package.json'),
  myObject = require('../index.js'),
  TU = require('rd-tu'),
  fs = require('fs'),
  path = require('path');

// Données de test
var docObject = require('./dataset/in/docObject.sample.json'),
  dataset = {
  "files": require('./dataset/in/test.files.json'),
  "directories": require('./dataset/in/test.directories.json'),
  "XML": require('./dataset/in/test.XML.json'),
  "URL": require('./dataset/in/test.URL.json')
};

// Mapping indiquant quelle fonction de test et quelles données utiliser pour chaque fonction
var wrapper = {
  "files": {
    "selectAll": testOf_fileRepresentation,
    "select": testOf_fileRepresentation,
    "get": testOf_fileRepresentation
  },
  "directories": {
    "sync": null
  },
  "XML": {
    "load": testOf_xmlLoad,
    "select": testOf_xmlSelection
  },
  "URL": {
    "addParameters": testOf_addParameters
  }
};

/**
 * Test de chaques fonctions de :
 * - myObject.files.
 *   - selectAll()
 *   - select()
 *   - get()
 *   - createPath()
 *
 * - myObject.XML.
 *   - load()
 *   - select()
 */
TU.start({
  description: pkg.name + '/index.js',
  root: 'myObject',
  object: myObject,
  dataset: dataset,
  wrapper: wrapper
});

/**
 * Fonction de test à appliquée pour :
 * - myObject.XML.load()
 */
function testOf_xmlLoad(fn, item, cb) {
  var xmlStr = fs.readFileSync(path.join(__dirname, item.path), 'utf-8');
  return cb(fn(xmlStr));
}

/**
 * Fonction de test à appliquée pour :
 * - myObject.files.selectAll()
 * - myObject.files.select()
 * - myObject.files.get()
 */
function testOf_fileRepresentation(fn, item, cb) {
  if (item.regExp) setRegex(item.regExp, item.arguments.options);
  return cb(fn(docObject[item.container], item.arguments.options));
}

/**
 * Fonction de test à appliquée pour :
 * - myObject.XML.select()
 */
function testOf_xmlSelection(fn, item, cb) {
  var xmlStr = fs.readFileSync(path.join(__dirname, item.path), 'utf-8');
  var jsonObject = myObject.XML.load(xmlStr);
  return cb(fn(item.arguments.selector, jsonObject)[0]);
}

/**
 * Fonction de test à appliquée pour :
 * - myObject.URL.addParameters()
 */
function testOf_addParameters(fn, item, cb) {
  return cb(fn(item.arguments.url, item.arguments.parameters));
}

// Set une regex pour chaque clée demandée
function setRegex(keys, options) {
  for (var i = 0; i < keys.length; i++) {
    if (options instanceof Array) {
      for (var j = 0; j < options.length; j++) {
        options[j][keys[i]] = new RegExp(options[j][keys[i]]);
      }
    } else {
      options[keys[i]] = new RegExp(options[keys[i]]);
    }
  }
}