docs: function Requirements(options) {
  
          /**
           * ### Requirements.callbacks
           *
           * Array of all test callbacks
           */
          this.requirements = [];
  
          /**
           * ### Requirements.stillChecking
           *
           * Number of tests still pending
           */
          this.stillChecking = 0;
  
          /**
           * ### Requirements.withTimeout
           *
           * If TRUE, a maximum timeout to the execution of ALL tests is set
           */
          this.withTimeout = options.withTimeout || true;
  
          /**
           * ### Requirements.timeoutTime
           *
           * The time in milliseconds for the timeout to expire
           */
          this.timeoutTime = options.timeoutTime || 10000;
  
          /**
           * ### Requirements.timeoutId
           *
           * The id of the timeout, if created
           */
          this.timeoutId = null;
  
          /**
           * ### Requirements.summary
           *
           * Span summarizing the status of the tests
           */
          this.summary = null;
  
          /**
           * ### Requirements.summaryUpdate
           *
           * Span counting how many tests have been completed
           */
          this.summaryUpdate = null;
  
          /**
           * ### Requirements.summaryResults
           *
           * Span displaying the results of the tests
           */
          this.summaryResults = null;
  
          /**
           * ### Requirements.dots
           *
           * Looping dots to give the user the feeling of code execution
           */
          this.dots = null;
  
          /**
           * ### Requirements.hasFailed
           *
           * TRUE if at least one test has failed
           */
          this.hasFailed = false;
  
          /**
           * ### Requirements.results
           *
           * The outcomes of all tests
           */
          this.results = [];
  
          /**
           * ### Requirements.completed
           *
           * Maps all tests that have been completed already to avoid duplication
           */
          this.completed = {};
  
          /**
           * ### Requirements.sayResult
           *
           * If true, the final result of the tests will be sent to the server
           */
          this.sayResults = options.sayResults || false;
  
          /**
           * ### Requirements.sayResultLabel
           *
           * The label of the SAY message that will be sent to the server
           */
          this.sayResultsLabel = options.sayResultLabel || 'requirements';
  
          /**
           * ### Requirements.addToResults
           *
           *  Callback to add properties to result object sent to server
           */
          this.addToResults = options.addToResults || null;
  
          /**
           * ### Requirements.onComplete
           *
           * Callback to be executed at the end of all tests
           */
          this.onComplete = null;
  
          /**
           * ### Requirements.onSuccess
           *
           * Callback to be executed at the end of all tests
           */
          this.onSuccess = null;
  
          /**
           * ### Requirements.onFailure
           *
           * Callback to be executed at the end of all tests
           */
          this.onFailure = null;
  
          /**
           * ### Requirements.callbacksExecuted
           *
           * TRUE, the callbacks have been executed
           */
          this.callbacksExecuted = false;
  
          /**
           * ### Requirements.list
           *
           * `List` to render the results
           *
           * @see nodegame-server/List
           */
          // TODO: simplify render syntax.
          this.list = new W.List({
              render: {
                  pipeline: renderResult,
                  returnAt: 'first'
              }
          });
  
          function renderResult(o) {
              var imgPath, img, span, text;
              imgPath = '/images/' + (o.content.success ?
                                      'success-icon.png' : 'delete-icon.png');
              img = document.createElement('img');
              img.src = imgPath;
  
              // Might be the full exception object.
              if ('object' === typeof o.content.text) {
                  o.content.text = extractErrorMsg(o.content.text);
              }
  
              text = document.createTextNode(o.content.text);
              span = document.createElement('span');
              span.className = 'requirement';
              span.appendChild(img);
  
              span.appendChild(text);
              return span;
          }
      }