This commit is contained in:
Oleg Mokhov
2015-06-20 12:26:08 +03:00
committed by mokhov
parent a716969f4e
commit f3546ef3a5
85 changed files with 16682 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
/**
* Модуль для генерации уникальных идентификаторов.
*/
modules.define('y-unique-id', function (provide) {
// Префикс имеет 3 применения:
// - гарантирует уникальность идентификаторов для каждой загрузки страницы
// - имя свойства, в котором хранятся id, выданные объектам
// - уникальный id для window
var prefix = 'id_' + Date.now() + Math.round(Math.random() * 10000);
var counterId = 0;
provide({
/**
* Генерирует уникальный идентификатор.
*
* @returns {String}
*/
generate: function () {
return prefix + (++counterId);
},
/**
* Генерирует уникальный идентификатор и присваивает его переданному объекту.
* Если объект уже имеет идентификатор, просто возвращает его.
*
* @param {Object} obj
* @returns {String}
*/
identify: function (obj) {
return obj === window ? prefix : obj[prefix] || (obj[prefix] = this.generate());
},
/**
* Возвращает `true`, если объект имеет уникальный идентификатор.
*
* @param {Object} obj
* @returns {Boolean}
*/
isIdentified: function (obj) {
return obj.hasOwnProperty(prefix);
}
});
});

View File

@@ -0,0 +1,60 @@
modules.define(
'test',
['y-unique-id'],
function (provide, uniqueId) {
var should = chai.should();
describe('uniqueId', function () {
describe('generate()', function () {
it('should generate unique id on each call', function () {
var id1 = uniqueId.generate();
var id2 = uniqueId.generate();
var id3 = uniqueId.generate();
should.exist(id1);
should.exist(id2);
should.exist(id3);
id1.should.not.eq(id2);
id1.should.not.eq(id3);
id2.should.not.eq(id3);
});
});
describe('identify()', function () {
it('should generate different ids for different objects', function () {
var obj1 = {};
var obj2 = {};
var id1 = uniqueId.identify(obj1);
var id2 = uniqueId.identify(obj2);
id1.should.not.eq(id2);
});
it('should generate same id for same objects', function () {
var obj = {};
var id1 = uniqueId.identify(obj);
var id2 = uniqueId.identify(obj);
id1.should.eq(id2);
});
});
describe('isIdentified()', function () {
it('should return true if object has unique id ', function () {
var obj = {};
uniqueId.isIdentified(obj).should.be.false;
uniqueId.identify(obj);
uniqueId.isIdentified(obj).should.be.true;
});
it('should check own object\'s property', function () {
function Custom() {}
uniqueId.identify(Custom.prototype);
var custom = new Custom();
uniqueId.isIdentified(custom).should.be.false;
});
});
});
provide();
});