/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

'use strict';

let { Test } = require('./Test.jsm');
let { Test: Test2 } = require('./Test.jsm');
exports.localJSM = Test.square(16) === 256;
exports.localJSMCached = Test === Test2;

(function () {
let { Promise } = require('resource://gre/modules/Promise.jsm');
let { defer } = require('resource://gre/modules/Promise.jsm').Promise;

exports.isCachedAbsolute = Promise.defer === defer;

exports.isLoadedAbsolute = function (val) {
  let { promise, resolve } = Promise.defer();
  resolve(val);
  return promise;
};
})();

(function () {
let { Promise } = require('modules/Promise.jsm');
let { defer } = require('modules/Promise.jsm').Promise;
exports.isCachedPath = Promise.defer === defer;

exports.isLoadedPath = function (val) {
  let { promise, resolve } = Promise.defer();
  resolve(val);
  return promise;
};
})();

(function () {
let { defer } = require('resource://gre/modules/commonjs/sdk/core/promise.js');
let { defer: defer2 } = require('resource://gre/modules/commonjs/sdk/core/promise.js');
exports.isCachedJSAbsolute = defer === defer2;
exports.isLoadedJSAbsolute = function (val) {
  let { promise, resolve } = defer();
  resolve(val);
  return promise;
};
})();