🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

enum

Package Overview
Dependencies
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

enum - npm Package Compare versions

Comparing version

to
1.0.0

enum-1.0.0.js

492

lib/enum.js

@@ -1,301 +0,317 @@

(function (root, module, global, define) {
"use strict";
"use strict";
var endianness = require('os').endianness();
/**
* Represents an Item of an Enum.
* @param {String} key The Enum key.
* @param {Number} value The Enum value.
*/
function EnumItem(key, value) {
this.key = key;
this.value = value;
}
EnumItem.prototype = {
/*constructor reference so that, this.constructor===EnumItem//=>true */
constructor: EnumItem,
/**
* Represents an Item of an Enum.
* @param {String} key The Enum key.
* @param {Number} value The Enum value.
* Checks if the flagged EnumItem has the passing object.
* @param {EnumItem || String || Number} value The object to check with.
* @return {Boolean} The check result.
*/
function EnumItem(key, value) {
this.key = key;
this.value = value;
}
has: function(value) {
if (value instanceof EnumItem || (typeof(value) === 'object' && value.key !== undefined && value.value !== undefined)) {
return (this.value & value.value) !== 0;
} else if (typeof(value) === 'string') {
return this.key.indexOf(value) >= 0;
} else {
return (this.value & value) !== 0;
}
},
EnumItem.prototype = {
/**
* Checks if the EnumItem is the same as the passing object.
* @param {EnumItem || String || Number} key The object to check with.
* @return {Boolean} The check result.
*/
is: function(key) {
if (key instanceof EnumItem || (typeof(key) === 'object' && key.key !== undefined && key.value !== undefined)) {
return this.key === key.key;
} else if (typeof(key) === 'string') {
return this.key === key;
} else {
return this.value === key;
}
},
/*constructor reference so that, this.constructor===EnumItem//=>true */
constructor: EnumItem,
/**
* Returns String representation of this EnumItem.
* @return {String} String representation of this EnumItem.
*/
toString: function() {
return this.key;
},
/**
* Checks if the flagged EnumItem has the passing object.
* @param {EnumItem || String || Number} value The object to check with.
* @return {Boolean} The check result.
*/
has: function(value) {
if (value instanceof EnumItem || (typeof(value) === 'object' && value.key !== undefined && value.value !== undefined)) {
return (this.value & value.value) !== 0;
} else if (typeof(value) === 'string') {
return this.key.indexOf(value) >= 0;
} else {
return (this.value & value) !== 0;
}
},
/**
* Returns JSON object representation of this EnumItem.
* @return {String} JSON object representation of this EnumItem.
*/
toJSON: function() {
return this.key;
},
/**
* Checks if the EnumItem is the same as the passing object.
* @param {EnumItem || String || Number} key The object to check with.
* @return {Boolean} The check result.
*/
is: function(key) {
if (key instanceof EnumItem || (typeof(key) === 'object' && key.key !== undefined && key.value !== undefined)) {
return this.key === key.key;
} else if (typeof(key) === 'string') {
return this.key === key;
} else {
return this.value === key;
}
},
/**
* Returns the value to compare with.
* @return {String} The value to compare with.
*/
valueOf: function() {
return this.value;
}
/**
* Returns String representation of this EnumItem.
* @return {String} String representation of this EnumItem.
*/
toString: function() {
return this.key;
},
};
/**
* Returns JSON object representation of this EnumItem.
* @return {String} JSON object representation of this EnumItem.
*/
toJSON: function() {
return this.key;
},
/**
* Returns the value to compare with.
* @return {String} The value to compare with.
*/
valueOf: function() {
return this.key;
}
/**
* Represents an Enum with enum items.
* @param {Array || Object} map This are the enum items.
* @param {String || Object} options This are options. [optional]
*/
function Enum(map, options) {
};
if (options && typeof(options) === 'string') {
options = { name: options };
}
this._options = options || {};
this._options.separator = this._options.separator || ' | ';
this._options.endianness = this._options.endianness || endianness;
/**
* Represents an Enum with enum items.
* @param {Array || Object} map This are the enum items.
* @param {String || Object} options This are options. [optional]
*/
function Enum(map, options) {
this.enums = [];
if (options && typeof(options) === 'string') {
options = { name: options };
if (map.length) {
var array = map;
map = {};
for (var i = 0; i < array.length; i++) {
map[array[i]] = Math.pow(2, i);
}
}
this._options = options || {};
this._options.separator = this._options.separator || ' | ';
for (var member in map) {
if ((this._options.name && member === 'name') || member === '_options' || member === 'get' || member === 'getKey' || member === 'getValue' || member === 'enums' || member === 'isFlaggable') {
throw new Error('Enum key "' + member + '" is a reserved word!');
}
this[member] = new EnumItem(member, map[member]);
this.enums.push(this[member]);
}
this.enums = [];
if (this._options.name) {
this.name = this._options.name;
}
if (map.length) {
var array = map;
map = {};
var self = this;
for (var i = 0; i < array.length; i++) {
map[array[i]] = Math.pow(2, i);
}
}
function isFlaggable() {
for (var i = 0, len = self.enums.length; i < len; i++) {
var e = self.enums[i];
for (var member in map) {
if ((this._options.name && member === 'name') || member === '_options' || member === 'get' || member === 'getKey' || member === 'getValue' || member === 'enums' || member === 'isFlaggable') {
throw new Error('Enum key "' + member + '" is a reserved word!');
if (!((e.value !== 0) && !(e.value & (e.value - 1)))) {
return false;
}
this[member] = new EnumItem(member, map[member]);
this.enums.push(this[member]);
}
return true;
}
if (this._options.name) {
this.name = this._options.name;
}
this.isFlaggable = isFlaggable();
this.freezeEnums(); //this will make instances of Enum non-extensible
}
var self = this;
Enum.prototype = {
function isFlaggable() {
for (var i = 0, len = self.enums.length; i < len; i++) {
var e = self.enums[i];
/*constructor reference so that, this.constructor===Enum//=>true */
constructor: Enum,
if (!((e.value !== 0) && !(e.value & (e.value - 1)))) {
return false;
}
}
return true;
/* implement the "ref type interface", so that Enum types can
* be used in `node-ffi` function declarations and invokations.
* In C, these Enums act as `uint32_t` types.
*
* https://github.com/TooTallNate/ref#the-type-interface
*/
size: 4,
indirection: 1,
/**
* Returns the appropriate EnumItem key.
* @param {EnumItem || String || Number} key The object to get with.
* @return {String} The get result.
*/
getKey: function(value) {
var item = this.get(value);
if (item) {
return item.key;
} else {
return 'Undefined';
}
},
this.isFlaggable = isFlaggable();
this.freezeEnums(); //this will make instances of Enum non-extensible
}
/**
* Returns the appropriate EnumItem value.
* @param {EnumItem || String || Number} key The object to get with.
* @return {Number} The get result.
*/
getValue: function(key) {
var item = this.get(key);
if (item) {
return item.value;
} else {
return null;
}
},
Enum.prototype = {
/**
* Returns the appropriate EnumItem.
* @param {EnumItem || String || Number} key The object to get with.
* @return {EnumItem} The get result.
*/
get: function(key, offset) {
if (key === null || key === undefined) return null;
/*constructor reference so that, this.constructor===Enum//=>true */
constructor: Enum,
// Buffer instance support, part of the ref Type interface
if (Buffer.isBuffer(key)) {
key = key['readUInt32' + this._options.endianness](offset || 0);
}
/**
* Returns the appropriate EnumItem key.
* @param {EnumItem || String || Number} key The object to get with.
* @return {String} The get result.
*/
getKey: function(value) {
var item = this.get(value);
if (item) {
return item.key;
} else {
return 'Undefined';
if (key instanceof EnumItem || (typeof(key) === 'object' && key.key !== undefined && key.value !== undefined)) {
var foundIndex = this.enums.indexOf(key);
if (foundIndex >= 0) {
return key;
}
},
/**
* Returns the appropriate EnumItem value.
* @param {EnumItem || String || Number} key The object to get with.
* @return {Number} The get result.
*/
getValue: function(key) {
var item = this.get(key);
if (item) {
return item.value;
} else {
if (!this.isFlaggable || (this.isFlaggable && key.key.indexOf(this._options.separator) < 0)) {
return null;
}
},
return this.get(key.key);
} else if (typeof(key) === 'string') {
if (key.indexOf(this._options.separator) > 0) {
var parts = key.split(this._options.separator);
/**
* Returns the appropriate EnumItem.
* @param {EnumItem || String || Number} key The object to get with.
* @return {EnumItem} The get result.
*/
get: function(key) {
if (key === null || key === undefined) return null;
var value = 0;
for(var i = 0; i < parts.length; i++) {
var part = parts[i];
if (key instanceof EnumItem || (typeof(key) === 'object' && key.key !== undefined && key.value !== undefined)) {
var foundIndex = this.enums.indexOf(key);
if (foundIndex >= 0) {
return key;
value |= this[part].value;
}
if (!this.isFlaggable || (this.isFlaggable && key.key.indexOf(this._options.separator) < 0)) {
return null;
}
return this.get(key.key);
} else if (typeof(key) === 'string') {
if (key.indexOf(this._options.separator) > 0) {
var parts = key.split(this._options.separator);
var value = 0;
for(var i = 0; i < parts.length; i++) {
var part = parts[i];
value |= this[part].value;
}
return new EnumItem(key, value);
} else {
return this[key];
}
return new EnumItem(key, value);
} else {
for (var m in this) {
if (this.hasOwnProperty(m)) {
if (this[m].value === key) {
return this[m];
}
return this[key];
}
} else {
for (var m in this) {
if (this.hasOwnProperty(m)) {
if (this[m].value === key) {
return this[m];
}
}
}
var result = null;
var result = null;
if (this.isFlaggable) {
for (var n in this) {
if (this.hasOwnProperty(n)) {
if ((key & this[n].value) !== 0) {
if (result) {
result += this._options.separator;
} else {
result = '';
}
result += n;
if (this.isFlaggable) {
for (var n in this) {
if (this.hasOwnProperty(n)) {
if ((key & this[n].value) !== 0) {
if (result) {
result += this._options.separator;
} else {
result = '';
}
result += n;
}
}
}
return this.get(result || null);
}
},
/**
* Define freezeEnums() as a property of the prototype.
* make enumerable items nonconfigurable and deep freeze the properties. Throw Error on property setter.
*/
freezeEnums: function() {
function freezer(o) {
var props = Object.getOwnPropertyNames(o);
props.forEach( function(p){
if (!Object.getOwnPropertyDescriptor(o, p).configurable) {
return;
}
return this.get(result || null);
}
},
Object.defineProperties(o, p, {writable:false, configurable:false});
})
return o;
}
/**
* Sets the Enum "value" onto the give `buffer` at the specified `offset`.
* Part of the ref "Type interface".
*
* @param {Buffer} buffer The Buffer instance to write to.
* @param {Number} offset The offset in the buffer to write to. Default 0.
* @param {EnumItem || String || Number} value The EnumItem to write.
*/
set: function (buffer, offset, value) {
var item = this.get(value);
if (item) {
return buffer['writeUInt32' + this._options.endianness](item.value, offset || 0);
}
},
function getPropertyValue(value) {
return value;
}
function deepFreezeEnums(o) {
if (typeof o !== 'object' || o === null || Object.isFrozen(o) || Object.isSealed(o) ){
/**
* Define freezeEnums() as a property of the prototype.
* make enumerable items nonconfigurable and deep freeze the properties. Throw Error on property setter.
*/
freezeEnums: function() {
function freezer(o) {
var props = Object.getOwnPropertyNames(o);
props.forEach( function(p){
if (!Object.getOwnPropertyDescriptor(o, p).configurable) {
return;
}
for (var key in o) {
if (o.hasOwnProperty(key)) {
o.__defineGetter__(key, getPropertyValue.bind(null, o[key]));
o.__defineSetter__(key, function throwPropertySetError(value){throw TypeError("Cannot redefine property; Enum Type is not extensible.")});
deepFreezeEnums(o[key]);
}
Object.defineProperties(o, p, {writable:false, configurable:false});
})
return o;
}
function getPropertyValue(value) {
return value;
}
function deepFreezeEnums(o) {
if (typeof o !== 'object' || o === null || Object.isFrozen(o) || Object.isSealed(o) ){
return;
}
for (var key in o) {
if (o.hasOwnProperty(key)) {
o.__defineGetter__(key, getPropertyValue.bind(null, o[key]));
o.__defineSetter__(key, function throwPropertySetError(value){throw TypeError("Cannot redefine property; Enum Type is not extensible.")});
deepFreezeEnums(o[key]);
}
if (Object.freeze) {
Object.freeze(o);
} else {
freezer(o);
}
}
if (Object.freeze) {
Object.freeze(o);
} else {
freezer(o);
}
}
deepFreezeEnums(this);
deepFreezeEnums(this);
return this;
},
};
return this;
},
};
if (module && module.exports) {
module.exports = Enum;
} else if (define) {
define(function () {
return Enum;
});
} else {
root.Enum = Enum;
/**
* Registers the Enum Type globally in node.js.
* @param {String} key Global variable. [optional]
*/
Enum.register = function(key) {
key = key || 'Enum';
if (!global[key]) {
global[key] = Enum;
}
};
if (module && module.exports && global) {
if (typeof (window) !== 'undefined') {
window.Enum = Enum;
}
/**
* Registers the Enum Type globally in node.js.
* @param {String} key Global variable. [optional]
*/
Enum.register = function(key) {
key = key || 'Enum';
if (!global[key]) {
global[key] = Enum;
}
};
}
}(
this,
typeof(module) !== 'undefined' ? module : undefined,
typeof(global) !== 'undefined' ? global : undefined,
typeof(define) !== 'undefined' ? define : undefined
));
module.exports = Enum;
{
"author": "adrai",
"name": "enum",
"version": "0.2.7",
"version": "1.0.0",
"private": false,

@@ -13,11 +13,13 @@ "main": "index.js",

},
"dependencies": {
},
"dependencies": {},
"devDependencies": {
"mocha": ">= 1.0.1",
"expect.js": ">= 0.1.2",
"smoosh": ">= 0.4.1"
"gulp": "^3.8.11",
"gulp-browserify": "^0.5.1",
"gulp-rename": "^1.2.0",
"gulp-uglify": "^1.1.0",
"mocha": ">= 1.0.1"
},
"description": "Enum is a javascript module that introduces the Enum Type. It works for node.js and in the browser.",
"keywords" : [
"keywords": [
"enum"

@@ -39,5 +41,5 @@ ],

],
"scripts" : {
"test" : "mocha"
"scripts": {
"test": "mocha"
}
}

@@ -16,4 +16,4 @@ # Introduction

|:------------|:----------------|:---------|
| `enum-0.2.7.js` | *uncompressed, with comments* | [Download](https://raw.github.com/adrai/enum/master/enum-0.2.7.js) |
| `enum-0.2.7.min.js` | *compressed, without comments* | [Download](https://raw.github.com/adrai/enum/master/enum-0.2.7.min.js) |
| `enum-1.0.0.js` | *uncompressed, with comments* | [Download](https://raw.github.com/adrai/enum/master/enum-1.0.0.js) |
| `enum-1.0.0.min.js` | *compressed, without comments* | [Download](https://raw.github.com/adrai/enum/master/enum-1.0.0.min.js) |

@@ -24,3 +24,3 @@ # Installation (node.js)

# Installation (browser, library is AMD compatible)
# Installation (browser)

@@ -31,18 +31,19 @@ <script src="enum.js"></script>

// use it as module
var Enum = require('enum');
````js
// use it as module
var Enum = require('enum');
// or extend node.js with this new type
require('enum').register();
// or extend node.js with this new type
require('enum').register();
// define a simple enum (automatically flaggable -> A: 0x01, B: 0x02, C: 0x04)
//Uses bitwise 'OR' operation in between the values and creates enumerated constants. For example, if 'Read':1, 'Write':2, then ReadWrite= Read | Write = 1 | 2 = 3;
var myEnum = new Enum(['A', 'B', 'C']);
// define a simple enum (automatically flaggable -> A: 0x01, B: 0x02, C: 0x04)
//Uses bitwise 'OR' operation in between the values and creates enumerated constants. For example, if 'Read':1, 'Write':2, then ReadWrite= Read | Write = 1 | 2 = 3;
var myEnum = new Enum(['A', 'B', 'C']);
//define a flagged enum object to create a multicolor option; just pass an array
var myEnum = new Enum([Black', 'Red', 'Green', 'Blue']);
myEnum; //=> Enum {_options: Object, enums: Array[4], Black: EnumItem, Red: EnumItem, Green: EnumItem….....}
myEnum.isFlaggable; //=> true
//define a flagged enum object to create a multicolor option; just pass an array
var myEnum = new Enum(['Black', 'Red', 'Green', 'Blue']);
myEnum; //=> Enum {_options: Object, enums: Array[4], Black: EnumItem, Red: EnumItem, Green: EnumItem….....}
myEnum.isFlaggable; //=> true
for(var i=1; i<8; i++){ console.log(myEnum.get(i).value + '=> '+ myEnum.get(i).key)}
for(var i=1; i<8; i++){ console.log(myEnum.get(i).value + '=> '+ myEnum.get(i).key)}
1=> Black

@@ -56,20 +57,24 @@ 2=> Red

// define an enum with own values
var myEnum = new Enum({'A': 1, 'B': 2, 'C': 4});
// define an enum with own values
var myEnum = new Enum({'A': 1, 'B': 2, 'C': 4});
// if defining a flaggable enum, you can define your own separator (default is ' | ')
var myEnum = new Enum(['A', 'B', 'C'], { separator: ' | ' });
// if defining a flaggable enum, you can define your own separator (default is ' | ')
var myEnum = new Enum(['A', 'B', 'C'], { separator: ' | ' });
// if you want your enum to have a name define it in the options
var myEnum = new Enum(['A', 'B', 'C'], { name: 'MyEnum' });
// if you want your enum to have a name define it in the options
var myEnum = new Enum(['A', 'B', 'C'], { name: 'MyEnum' });
// or
var myEnum = new Enum(['A', 'B', 'C'], 'MyEnum');
// if you want your enum to have an explicit "endianness", define it in the options
// (defaults to `os.endianness()`)
var myEnum = new Enum(['A', 'B', 'C'], { endianness: 'BE' });
//define enum type without flag
var myEnum = new Enum({'None': 0, 'Black':1, 'Red': 2, 'Red2': 3, 'Green': 4, 'Blue': 5});
myEnum; //=> Enum {_options: Object, enums: Array[6], None: EnumItem, Black: EnumItem, Red: EnumItem…........}
myEnum.isFlaggable; //=> false
// or
var myEnum = new Enum(['A', 'B', 'C'], 'MyEnum');
for(var i=0; i<=5; i++){ console.log(myEnum.get(i).value + '=> '+ myEnum.get(i).key)}
//define enum type without flag
var myEnum = new Enum({'None': 0, 'Black':1, 'Red': 2, 'Red2': 3, 'Green': 4, 'Blue': 5});
myEnum; //=> Enum {_options: Object, enums: Array[6], None: EnumItem, Black: EnumItem, Red: EnumItem…........}
myEnum.isFlaggable; //=> false
for(var i=0; i<=5; i++){ console.log(myEnum.get(i).value + '=> '+ myEnum.get(i).key)}
0=> None

@@ -82,93 +87,93 @@ 1=> Black

// get your item
myEnum.A
// get your item
myEnum.A
// or
myEnum.get('A')
// or
myEnum.get('A')
// or
myEnum.get(1)
// or
myEnum.get(1)
// or
myEnum.get('A | B')
// or
myEnum.get('A | B')
// or
myEnum.get(3)
// or
myEnum.get(3)
// get your value
myEnum.A.value
// get your value
myEnum.A.value
// get your key
myEnum.A.key
// get your key
myEnum.A.key
// get all items
myEnum.enums // returns all enums in an array
// get all items
myEnum.enums // returns all enums in an array
// compare
myEnum.A.is(myEnum.A)
// compare
myEnum.A.is(myEnum.A)
// or
myEnum.A.is('A')
// or
myEnum.A.is('A')
// or
myEnum.A.is(1)
// or
myEnum.A.is(1)
// or
myEnum.A == 'A'
// or
myEnum.A == 'A'
// or
myEnum.A == myEnum.A
// or
myEnum.A == myEnum.A
// or
myEnum.A === myEnum.A
// or
myEnum.A === myEnum.A
// check flag
var myItem = myEnum.get(3); // or [myEnum.get('A | B')]
myItem.has(myEnum.A)
// check flag
var myItem = myEnum.get(3); // or [myEnum.get('A | B')]
myItem.has(myEnum.A)
// or
myItem.has('A')
// or
myItem.has('A')
// or
myItem.has(1)
// or
myItem.has(1)
// other functions
myItem.toString() // returns A | C
myItem.toJSON() // returns A | C
myItem.valueOf() // returns A | C
// other functions
myItem.toString() // returns 'A | C'
myItem.toJSON() // returns '"A | C"'
myItem.valueOf() // returns 3
JSON.stringify(myItem) // returns A | C
JSON.stringify(myItem) // returns '"A | C"'
//Type Safety:
//Newly created enumerable objects are Type-Safe in a way that it's non-configurable and no longer extensible.
//Each EnumItem has a beack-reference to a constructor and they are implicitly final.
Object.getOwnPropertyDescriptor(myEnum, 'Red'); //=> Object {value: EnumItem, writable: false, enumerable: true, configurable: false}
Object.isExtensible(myEnum); //=> false
myEnum instanceof Enum; //=> true
//Type Safety:
//Newly created enumerable objects are Type-Safe in a way that it's non-configurable and no longer extensible.
//Each EnumItem has a beack-reference to a constructor and they are implicitly final.
Object.getOwnPropertyDescriptor(myEnum, 'Red'); //=> Object {value: EnumItem, writable: false, enumerable: true, configurable: false}
Object.isExtensible(myEnum); //=> false
myEnum instanceof Enum; //=> true
//Instances of Enum created with 'new' from similar objects are not equal
myEnum1=new Enum({'A':1, 'B':2, 'C':4});
myEnum2=new Enum({'A':1, 'B':2, 'C':4});
myEnum1 == myEnum2 //=> false
myEnum1.A == myEnum2.A //=> false
myEnum1.A.value == myEnum2.A.value //=> true
//Instances of Enum created with 'new' from similar objects are not equal
myEnum1=new Enum({'A':1, 'B':2, 'C':4});
myEnum2=new Enum({'A':1, 'B':2, 'C':4});
myEnum1 == myEnum2 //=> false
myEnum1.A == myEnum2.A //=> false
myEnum1.A.value == myEnum2.A.value //=> true
//This enum object has no properties other than those defined during its creation. Existing Data is 'Persistent' and preserves the original version
myEnum.B.value; //=> 2
myEnum.B = 5; //=> Throws TypeError
delete myEnum.B; //=> false
myEnum.D = 6; //=> doesn't add to the enum object, silently ignores
myEnum.D; // undefined
//This enum object has no properties other than those defined during its creation. Existing Data is 'Persistent' and preserves the original version
myEnum.B.value; //=> 2
myEnum.B = 5; //=> Throws TypeError
delete myEnum.B; //=> false
myEnum.D = 6; //=> doesn't add to the enum object, silently ignores
myEnum.D; // undefined
//Try to define new property throws TypeError
Object.defineProperty(myEnum, D, {value:6, writable:false, enumerable:true});
//=>TypeError: Cannot define property:D, object is not extensible.
//Try to define new property throws TypeError
Object.defineProperty(myEnum, D, {value:6, writable:false, enumerable:true});
//=>TypeError: Cannot define property:D, object is not extensible.
````
# License

@@ -175,0 +180,0 @@

var expect = expect || require('expect.js'),
endianness = this.Enum ? 'LE' : require('os').endianness(),
e = this.Enum || require('../index');

@@ -150,4 +151,4 @@

expect(myEnum.A == 'A').to.be.ok();
expect(myEnum.C == 'C').to.be.ok();
expect(myEnum.A == myEnum.A.value).to.be.ok();
expect(myEnum.C == myEnum.C.value).to.be.ok();

@@ -313,8 +314,18 @@ });

it('call valueOf and get the key', function() {
it('call valueOf and get the value', function() {
expect(myEnum.A.valueOf()).to.eql('A');
expect(myEnum.A.valueOf()).to.eql(myEnum.A.value);
});
it('use JavaScript | operator', function() {
expect(myEnum.A | myEnum.B).to.eql(myEnum.getValue('A | B'));
expect(myEnum.A | myEnum.C).to.eql(myEnum.getValue('A | C'));
expect(myEnum.A | myEnum.B | myEnum.C).to.eql(myEnum.getValue('A | B | C'));
});
it('stringify JSON', function() {

@@ -481,4 +492,46 @@

describe('ref Type interface', function () {
it('should define a `size` Number', function () {
var myEnum = new e(['A', 'B', 'C']);
expect(myEnum.size).to.be.a('number');
});
it('should define an `indirection` Number', function () {
var myEnum = new e(['A', 'B', 'C']);
expect(myEnum.indirection).to.be.a('number');
});
it('should work with Buffer for `get()`', function () {
var myEnum = new e(['A', 'B', 'C']);
var buffer = new Buffer(myEnum.size);
buffer['writeUInt32' + endianness](myEnum.B.value, 0);
expect(myEnum.get(buffer)).to.eql(myEnum.B);
});
it('should work with Buffer for `set()`', function () {
var myEnum = new e(['A', 'B', 'C']);
var buffer = new Buffer(myEnum.size);
myEnum.set(buffer, 0, myEnum.B);
expect(buffer['readUInt32' + endianness](0)).to.eql(myEnum.B.value);
});
});
});
});

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet