Skip to content
This repository has been archived by the owner on Feb 26, 2022. It is now read-only.

Commit

Permalink
Bug 921202 - Implement sdk/ui/id
Browse files Browse the repository at this point in the history
  • Loading branch information
erikvold committed Sep 27, 2013
1 parent f364ce3 commit 20130b0
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
27 changes: 27 additions & 0 deletions lib/sdk/ui/id.js
@@ -0,0 +1,27 @@
/* 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';

module.metadata = {
'stability': 'experimental'
};

const method = require('method/core');
const { uuid } = require('../util/uuid');

const identified = new WeakMap();

let identify = method('identify');
identify.define(function(thing) {
if (!thing) {
return uuid();
}

if (!identified.has(thing)) {
identified.set(thing, uuid());
}

return identified.get(thing);
});
exports.identify = identify;
43 changes: 43 additions & 0 deletions test/test-ui-id.js
@@ -0,0 +1,43 @@
/* 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";

const { identify } = require('sdk/ui/id');
const { Class } = require('sdk/core/heritage');

const signature = /{[0-9a-f\-]+}/;

exports['test generate id'] = function(assert) {
let first = identify();
let second = identify({});

assert.ok(signature.test(first), 'first id has a correct signature');
assert.ok(signature.test(second), 'second id has a correct signature');

assert.notEqual(first, identify(), 'identify generated new uuid [1]');
assert.notEqual(first, second, 'identify generated new uuid [2]');
};

exports['test get id'] = function(assert) {
let thing = {};
let thingID = identify(thing);

assert.equal(thingID, identify(thing), 'ids for things are cached by default');
assert.notEqual(identify(thing), identify({}), 'new ids for new things');
};

exports['test custom id definition for classes'] = function(assert) {
let Thing = Class({});
let thing = Thing();
let counter = 0;

identify.define(Thing, function(thing) {
return ++counter;
});

assert.equal(identify(thing), counter, 'it is possible to define custom identifications');
assert.ok(signature.test(identify({})), 'defining a custom identification does not affect the default behavior');
}

require('sdk/test').run(exports);

0 comments on commit 20130b0

Please sign in to comment.