aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLBuerstmayr <[email protected]>2021-03-01 22:46:26 +0100
committerMarak <[email protected]>2021-03-03 20:14:45 -0500
commit7ad22c2e2aae2f5e6215bcdb91cf3fd28e727d92 (patch)
tree03941188e92583a105c8ef17fde438fb1b52bdcf
parent58c61afb1b8baa160add593e5af7c110de011968 (diff)
downloadfaker-7ad22c2e2aae2f5e6215bcdb91cf3fd28e727d92.tar.xz
faker-7ad22c2e2aae2f5e6215bcdb91cf3fd28e727d92.zip
Issue 1114: New datatype module
Current status: - moved number(), float(), hexaDecimal(), boolean(), uuid() from random to datatype - moved respective test from random.unit to datatype.unit - tests of moved methods in random now check if DeprecationWarning is printed and respective method in datatype module is called - adapted all lib files that use moved methods (mostly number) - adapted tests of respective files to spy on the correct method - adapted README in order to promote usage of method that logs a DeprecationWarning
-rw-r--r--build/src/docs.md4
-rw-r--r--examples/node/generateMultiLevelMultiLocaleJSON.js4
-rw-r--r--lib/address.js12
-rw-r--r--lib/commerce.js2
-rw-r--r--lib/company.js2
-rw-r--r--lib/datatype.js78
-rw-r--r--lib/date.js10
-rw-r--r--lib/finance.js23
-rw-r--r--lib/git.js2
-rw-r--r--lib/helpers.js14
-rw-r--r--lib/image.js2
-rw-r--r--lib/image_providers/lorempixel.js2
-rw-r--r--lib/index.js4
-rw-r--r--lib/internet.js20
-rw-r--r--lib/lorem.js8
-rw-r--r--lib/name.js12
-rw-r--r--lib/random.js75
-rw-r--r--lib/system.js6
-rw-r--r--lib/vehicle.js6
-rw-r--r--test/address.unit.js66
-rw-r--r--test/company.unit.js12
-rw-r--r--test/datatype.unit.js214
-rw-r--r--test/finance.unit.js4
-rw-r--r--test/git.unit.js6
-rw-r--r--test/helpers.unit.js6
-rw-r--r--test/name.unit.js20
-rw-r--r--test/random.unit.js227
-rw-r--r--vendor/user-agent.js2
28 files changed, 413 insertions, 430 deletions
diff --git a/build/src/docs.md b/build/src/docs.md
index 8da7ae35..0f2b6e89 100644
--- a/build/src/docs.md
+++ b/build/src/docs.md
@@ -99,12 +99,12 @@ If you want consistent results, you can set your own seed:
```js
faker.seed(123);
-var firstRandom = faker.random.number();
+var firstRandom = faker.datatype.number();
// Setting the seed again resets the sequence.
faker.seed(123);
-var secondRandom = faker.random.number();
+var secondRandom = faker.datatype.number();
console.log(firstRandom === secondRandom);
```
diff --git a/examples/node/generateMultiLevelMultiLocaleJSON.js b/examples/node/generateMultiLevelMultiLocaleJSON.js
index ee7ce10c..b4a06765 100644
--- a/examples/node/generateMultiLevelMultiLocaleJSON.js
+++ b/examples/node/generateMultiLevelMultiLocaleJSON.js
@@ -5,7 +5,7 @@
var faker = require('../../index');
var fs = require('fs');
// produce array with random number of empty elements
-const arr = (maxNumberOfElements) => new Array(faker.random.number({min: 1, max: maxNumberOfElements})).fill()
+const arr = (maxNumberOfElements) => new Array(faker.datatype.number({min: 1, max: maxNumberOfElements})).fill()
const locales = ["nl","es","de","fr","en_AU"]
const company =
@@ -18,7 +18,7 @@ const company =
return { "name" : faker.fake("{{name.firstName}} {{name.lastName}}")
, "job" : faker.name.jobTitle()
, "hiredate" : faker.date.past(12).toISOString().split('T')[0]
- , "salary" : faker.random.number(700, 9000)
+ , "salary" : faker.datatype.number(700, 9000)
}
})
}
diff --git a/lib/address.js b/lib/address.js
index 29a0653a..810424a6 100644
--- a/lib/address.js
+++ b/lib/address.js
@@ -39,7 +39,7 @@ function Address (faker) {
this.zipCodeByState = function (state) {
var zipRange = faker.definitions.address.postcode_by_state[state];
if (zipRange) {
- return faker.random.number(zipRange);
+ return faker.datatype.number(zipRange);
}
return faker.address.zipCode();
}
@@ -73,7 +73,7 @@ function Address (faker) {
}
if (typeof format !== "number") {
- format = faker.random.number(formats.length - 1);
+ format = faker.datatype.number(formats.length - 1);
}
return f(formats[format]);
@@ -118,7 +118,7 @@ function Address (faker) {
suffix = " " + suffix
}
- switch (faker.random.number(1)) {
+ switch (faker.datatype.number(1)) {
case 0:
result = faker.name.lastName() + suffix;
break;
@@ -141,7 +141,7 @@ function Address (faker) {
this.streetAddress = function (useFullAddress) {
if (useFullAddress === undefined) { useFullAddress = false; }
var address = "";
- switch (faker.random.number(2)) {
+ switch (faker.datatype.number(2)) {
case 0:
address = Helpers.replaceSymbolWithNumber("#####") + " " + faker.address.streetName();
break;
@@ -257,7 +257,7 @@ function Address (faker) {
min = min || -90
precision = precision || 4
- return faker.random.number({
+ return faker.datatype.number({
max: max,
min: min,
precision: parseFloat((0.0).toPrecision(precision) + '1')
@@ -277,7 +277,7 @@ function Address (faker) {
min = min || -180
precision = precision || 4
- return faker.random.number({
+ return faker.datatype.number({
max: max,
min: min,
precision: parseFloat((0.0).toPrecision(precision) + '1')
diff --git a/lib/commerce.js b/lib/commerce.js
index 6de8ffb9..d5f95e52 100644
--- a/lib/commerce.js
+++ b/lib/commerce.js
@@ -55,7 +55,7 @@ var Commerce = function (faker) {
return symbol + 0.00;
}
- var randValue = faker.random.number({ max: max, min: min });
+ var randValue = faker.datatype.number({ max: max, min: min });
return symbol + (Math.round(randValue * Math.pow(10, dec)) / Math.pow(10, dec)).toFixed(dec);
};
diff --git a/lib/company.js b/lib/company.js
index d16689e2..d2678b4d 100644
--- a/lib/company.js
+++ b/lib/company.js
@@ -32,7 +32,7 @@ var Company = function (faker) {
];
if (typeof format !== "number") {
- format = faker.random.number(formats.length - 1);
+ format = faker.datatype.number(formats.length - 1);
}
return f(formats[format]);
diff --git a/lib/datatype.js b/lib/datatype.js
index 0a5228c0..fba728ab 100644
--- a/lib/datatype.js
+++ b/lib/datatype.js
@@ -1,25 +1,10 @@
var mersenne = require('../vendor/mersenne');
/**
- * Method to reduce array of characters
- * @param arr existing array of characters
- * @param values array of characters which should be removed
- * @return {*} new array without banned characters
- */
-var arrayRemove = function (arr, values) {
- values.forEach(function(value){
- arr = arr.filter(function(ele){
- return ele !== value;
- });
- });
- return arr;
-};
-
-/**
*
- * @namespace faker.dataType
+ * @namespace faker.datatype
*/
-function DataType (faker, seed) {
+function Datatype (faker, seed) {
// Use a user provided seed if it is an array or number
if (Array.isArray(seed) && seed.length) {
mersenne.seed_array(seed);
@@ -31,7 +16,7 @@ function DataType (faker, seed) {
/**
* returns a single random number based on a max number or range
*
- * @method faker.random.number
+ * @method faker.datatype.number
* @param {mixed} options {min, max, precision}
*/
this.number = function (options) {
@@ -73,7 +58,7 @@ function DataType (faker, seed) {
/**
* returns a single random floating-point number based on a max number or range
*
- * @method faker.random.float
+ * @method faker.datatype.float
* @param {mixed} options
*/
this.float = function (options) {
@@ -90,58 +75,29 @@ function DataType (faker, seed) {
if (typeof opts.precision === 'undefined') {
opts.precision = 0.01;
}
- return faker.random.number(opts);
- };
-
- /**
- * takes an array and returns a random element of the array
- *
- * @method faker.random.arrayElement
- * @param {array} array
- */
- this.arrayElement = function (array) {
- array = array || ["a", "b", "c"];
- var r = faker.random.number({ max: array.length - 1 });
- return array[r];
+ return faker.datatype.number(opts);
};
/**
- * takes an array and returns a subset with random elements of the array
+ * Similar to description of Date by MDN,
+ * this method uses a random number of milliseconds since 1. Jan 1970 UTC to return a Date object
*
- * @method faker.random.arrayElements
- * @param {array} array
- * @param {number} count number of elements to pick
+ * @method faker.datatype.date
*/
- this.arrayElements = function (array, count) {
- array = array || ["a", "b", "c"];
-
- if (typeof count !== 'number') {
- count = faker.random.number({ min: 1, max: array.length });
- } else if (count > array.length) {
- count = array.length;
- } else if (count < 0) {
- count = 0;
- }
-
- var arrayCopy = array.slice();
- var countToRemove = arrayCopy.length - count;
- for (var i = 0; i < countToRemove; i++) {
- var indexToRemove = faker.random.number({ max: arrayCopy.length - 1 });
- arrayCopy.splice(indexToRemove, 1);
- }
-
- return arrayCopy;
+ this.date = function () {
+ var random = faker.datatype.number({ min: 0, max: 8600000000000000 });
+ return new Date(random);
};
/**
* uuid
*
- * @method faker.random.uuid
+ * @method faker.datatype.uuid
*/
this.uuid = function () {
var RFC4122_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
var replacePlaceholders = function (placeholder) {
- var random = faker.random.number({ min: 0, max: 15 });
+ var random = faker.datatype.number({ min: 0, max: 15 });
var value = placeholder == 'x' ? random : (random &0x3 | 0x8);
return value.toString(16);
};
@@ -151,17 +107,17 @@ function DataType (faker, seed) {
/**
* boolean
*
- * @method faker.random.boolean
+ * @method faker.datatype.boolean
*/
this.boolean = function () {
- return !!faker.random.number(1)
+ return !!faker.datatype.number(1)
};
/**
* hexaDecimal
*
- * @method faker.random.hexaDecimal
+ * @method faker.datatype.hexaDecimal
* @param {number} count defaults to 1
*/
this.hexaDecimal = function hexaDecimal(count) {
@@ -181,4 +137,4 @@ function DataType (faker, seed) {
}
-module['exports'] = DataType;
+module['exports'] = Datatype;
diff --git a/lib/date.js b/lib/date.js
index 5a7626b4..38dfac9e 100644
--- a/lib/date.js
+++ b/lib/date.js
@@ -23,7 +23,7 @@ var _Date = function (faker) {
};
var past = date.getTime();
- past -= faker.random.number(range); // some time from now to N years ago, in milliseconds
+ past -= faker.datatype.number(range); // some time from now to N years ago, in milliseconds
date.setTime(past);
return date;
@@ -48,7 +48,7 @@ var _Date = function (faker) {
};
var future = date.getTime();
- future += faker.random.number(range); // some time from now to N years later, in milliseconds
+ future += faker.datatype.number(range); // some time from now to N years later, in milliseconds
date.setTime(future);
return date;
@@ -63,7 +63,7 @@ var _Date = function (faker) {
*/
self.between = function (from, to) {
var fromMilli = Date.parse(from);
- var dateOffset = faker.random.number(Date.parse(to) - fromMilli);
+ var dateOffset = faker.datatype.number(Date.parse(to) - fromMilli);
var newDate = new Date(fromMilli + dateOffset);
@@ -111,7 +111,7 @@ var _Date = function (faker) {
};
var future = date.getTime();
- future -= faker.random.number(range); // some time from now to N days ago, in milliseconds
+ future -= faker.datatype.number(range); // some time from now to N days ago, in milliseconds
date.setTime(future);
return date;
@@ -136,7 +136,7 @@ var _Date = function (faker) {
};
var future = date.getTime();
- future += faker.random.number(range); // some time from now to N days later, in milliseconds
+ future += faker.datatype.number(range); // some time from now to N days later, in milliseconds
date.setTime(future);
return date;
diff --git a/lib/finance.js b/lib/finance.js
index 43fe6710..f6818e33 100644
--- a/lib/finance.js
+++ b/lib/finance.js
@@ -109,7 +109,7 @@ var Finance = function (faker) {
max = max || 1000;
dec = dec === undefined ? 2 : dec;
symbol = symbol || '';
- const randValue = faker.random.number({ max: max, min: min, precision: Math.pow(10, -dec) });
+ const randValue = faker.datatype.number({ max: max, min: min, precision: Math.pow(10, -dec) });
let formattedString;
if(autoFormat) {
@@ -169,7 +169,7 @@ var Finance = function (faker) {
* @method faker.finance.bitcoinAddress
*/
self.bitcoinAddress = function () {
- var addressLength = faker.random.number({ min: 25, max: 34 });
+ var addressLength = faker.datatype.number({ min: 25, max: 34 });
var address = faker.random.arrayElement(['1', '3']);
@@ -185,7 +185,7 @@ var Finance = function (faker) {
* @method faker.finance.litecoinAddress
*/
self.litecoinAddress = function () {
- var addressLength = faker.random.number({ min: 26, max: 33 });
+ var addressLength = faker.datatype.number({ min: 26, max: 33 });
var address = faker.random.arrayElement(['L', 'M', '3']);
@@ -236,7 +236,7 @@ self.litecoinAddress = function () {
self.creditCardCVV = function() {
var cvv = "";
for (var i = 0; i < 3; i++) {
- cvv += faker.random.number({max:9}).toString();
+ cvv += faker.datatype.number({max:9}).toString();
}
return cvv;
};
@@ -247,8 +247,7 @@ self.litecoinAddress = function () {
* @method faker.finance.ethereumAddress
*/
self.ethereumAddress = function () {
- var address = faker.random.hexaDecimal(40).toLowerCase();
-
+ var address = faker.datatype.hexaDecimal(40).toLowerCase();
return address;
};
@@ -284,14 +283,14 @@ self.litecoinAddress = function () {
if (bban.type == "a") {
s += faker.random.arrayElement(ibanLib.alpha);
} else if (bban.type == "c") {
- if (faker.random.number(100) < 80) {
- s += faker.random.number(9);
+ if (faker.datatype.number(100) < 80) {
+ s += faker.datatype.number(9);
} else {
s += faker.random.arrayElement(ibanLib.alpha);
}
} else {
- if (c >= 3 && faker.random.number(100) < 30) {
- if (faker.random.boolean()) {
+ if (c >= 3 && faker.datatype.number(100) < 30) {
+ if (faker.datatype.boolean()) {
s += faker.random.arrayElement(ibanLib.pattern100);
c -= 2;
} else {
@@ -299,7 +298,7 @@ self.litecoinAddress = function () {
c--;
}
} else {
- s += faker.random.number(9);
+ s += faker.datatype.number(9);
}
}
c--;
@@ -321,7 +320,7 @@ self.litecoinAddress = function () {
*/
self.bic = function () {
var vowels = ["A", "E", "I", "O", "U"];
- var prob = faker.random.number(100);
+ var prob = faker.datatype.number(100);
return Helpers.replaceSymbols("???") +
faker.random.arrayElement(vowels) +
faker.random.arrayElement(ibanLib.iso3166) +
diff --git a/lib/git.js b/lib/git.js
index d431ea2d..e4a31a8e 100644
--- a/lib/git.js
+++ b/lib/git.js
@@ -30,7 +30,7 @@ var Git = function(faker) {
var entry = 'commit {{git.commitSha}}\r\n';
- if (options.merge || (faker.random.number({ min: 0, max: 4 }) === 0)) {
+ if (options.merge || (faker.datatype.number({ min: 0, max: 4 }) === 0)) {
entry += 'Merge: {{git.shortSha}} {{git.shortSha}}\r\n';
}
diff --git a/lib/helpers.js b/lib/helpers.js
index 3ab2e182..68e895e7 100644
--- a/lib/helpers.js
+++ b/lib/helpers.js
@@ -45,9 +45,9 @@ var Helpers = function (faker) {
var str = '';
for (var i = 0; i < string.length; i++) {
if (string.charAt(i) == symbol) {
- str += faker.random.number(9);
+ str += faker.datatype.number(9);
} else if (string.charAt(i) == "!"){
- str += faker.random.number({min: 2, max: 9});
+ str += faker.datatype.number({min: 2, max: 9});
} else {
str += string.charAt(i);
}
@@ -69,11 +69,11 @@ var Helpers = function (faker) {
for (var i = 0; i < string.length; i++) {
if (string.charAt(i) == "#") {
- str += faker.random.number(9);
+ str += faker.datatype.number(9);
} else if (string.charAt(i) == "?") {
str += faker.random.arrayElement(alpha);
} else if (string.charAt(i) == "*") {
- str += faker.random.boolean() ? faker.random.arrayElement(alpha) : faker.random.number(9);
+ str += faker.datatype.boolean() ? faker.random.arrayElement(alpha) : faker.datatype.number(9);
} else {
str += string.charAt(i);
}
@@ -161,7 +161,7 @@ var Helpers = function (faker) {
max = min;
min = tmp;
}
- repetitions = faker.random.number({min:min,max:max});
+ repetitions = faker.datatype.number({min:min,max:max});
string = string.slice(0,token.index) + faker.helpers.repeatString(token[1], repetitions) + string.slice(token.index+token[0].length);
token = string.match(RANGE_REP_REG);
}
@@ -186,7 +186,7 @@ var Helpers = function (faker) {
min = tmp;
}
string = string.slice(0,token.index) +
- faker.random.number({min:min, max:max}).toString() +
+ faker.datatype.number({min:min, max:max}).toString() +
string.slice(token.index+token[0].length);
token = string.match(RANGE_REG);
}
@@ -207,7 +207,7 @@ var Helpers = function (faker) {
}
o = o || ["a", "b", "c"];
for (var x, j, i = o.length - 1; i > 0; --i) {
- j = faker.random.number(i);
+ j = faker.datatype.number(i);
x = o[i];
o[i] = o[j];
o[j] = x;
diff --git a/lib/image.js b/lib/image.js
index 3f50d78f..31ed30be 100644
--- a/lib/image.js
+++ b/lib/image.js
@@ -55,7 +55,7 @@ var Image = function (faker) {
}
if (randomize) {
- url += '?' + faker.random.number()
+ url += '?' + faker.datatype.number()
}
return url;
diff --git a/lib/image_providers/lorempixel.js b/lib/image_providers/lorempixel.js
index 9ebd5824..40c4efb7 100644
--- a/lib/image_providers/lorempixel.js
+++ b/lib/image_providers/lorempixel.js
@@ -46,7 +46,7 @@ var Lorempixel = function (faker) {
}
if (randomize) {
- url += '?' + faker.random.number()
+ url += '?' + faker.datatype.number()
}
return url;
diff --git a/lib/index.js b/lib/index.js
index 25123e51..1f2ab0c5 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -104,8 +104,8 @@ function Faker (opts) {
var Music = require('./music');
self.music = new Music(self);
- var DataType = require('./datatype');
- self.datatype = new DataType(self);
+ var Datatype = require('./datatype');
+ self.datatype = new Datatype(self);
var _definitions = {
"name": ["first_name", "last_name", "prefix", "suffix", "binary_gender", "gender", "title", "male_prefix", "female_prefix", "male_first_name", "female_first_name", "male_middle_name", "female_middle_name", "male_last_name", "female_last_name"],
diff --git a/lib/internet.js b/lib/internet.js
index c332dfcd..4cbf5a1f 100644
--- a/lib/internet.js
+++ b/lib/internet.js
@@ -77,15 +77,15 @@ var Internet = function (faker) {
var result;
firstName = firstName || faker.name.firstName();
lastName = lastName || faker.name.lastName();
- switch (faker.random.number(2)) {
+ switch (faker.datatype.number(2)) {
case 0:
- result = firstName + faker.random.number(99);
+ result = firstName + faker.datatype.number(99);
break;
case 1:
result = firstName + faker.random.arrayElement([".", "_"]) + lastName;
break;
case 2:
- result = firstName + faker.random.arrayElement([".", "_"]) + lastName + faker.random.number(99);
+ result = firstName + faker.random.arrayElement([".", "_"]) + lastName + faker.datatype.number(99);
break;
}
result = result.toString().replace(/'/g, "");
@@ -212,7 +212,7 @@ var Internet = function (faker) {
*/
self.ip = function () {
var randNum = function () {
- return (faker.random.number(255)).toFixed(0);
+ return (faker.datatype.number(255)).toFixed(0);
};
var result = [];
@@ -260,7 +260,7 @@ var Internet = function (faker) {
* @method faker.internet.port
*/
self.port = function() {
- return faker.random.number({ min: 0, max: 65535 });
+ return faker.datatype.number({ min: 0, max: 65535 });
};
self.port.schema = {
@@ -295,9 +295,9 @@ var Internet = function (faker) {
baseGreen255 = baseGreen255 || 0;
baseBlue255 = baseBlue255 || 0;
// based on awesome response : http://stackoverflow.com/questions/43044/algorithm-to-randomly-generate-an-aesthetically-pleasing-color-palette
- var red = Math.floor((faker.random.number(256) + baseRed255) / 2);
- var green = Math.floor((faker.random.number(256) + baseGreen255) / 2);
- var blue = Math.floor((faker.random.number(256) + baseBlue255) / 2);
+ var red = Math.floor((faker.datatype.number(256) + baseRed255) / 2);
+ var green = Math.floor((faker.datatype.number(256) + baseGreen255) / 2);
+ var blue = Math.floor((faker.datatype.number(256) + baseBlue255) / 2);
var redStr = red.toString(16);
var greenStr = green.toString(16);
var blueStr = blue.toString(16);
@@ -348,7 +348,7 @@ var Internet = function (faker) {
}
for (i=0; i < 12; i++) {
- mac+= faker.random.number(15).toString(16);
+ mac+= faker.datatype.number(15).toString(16);
if (i%2==1 && i != 11) {
mac+=validSep;
}
@@ -408,7 +408,7 @@ var Internet = function (faker) {
pattern = consonant;
}
}
- n = faker.random.number(94) + 33;
+ n = faker.datatype.number(94) + 33;
char = String.fromCharCode(n);
if (memorable) {
char = char.toLowerCase();
diff --git a/lib/lorem.js b/lib/lorem.js
index c25234cb..f8d4fcef 100644
--- a/lib/lorem.js
+++ b/lib/lorem.js
@@ -47,7 +47,7 @@ var Lorem = function (faker) {
* @param {number} range
*/
self.sentence = function (wordCount, range) {
- if (typeof wordCount == 'undefined') { wordCount = faker.random.number({ min: 3, max: 10 }); }
+ if (typeof wordCount == 'undefined') { wordCount = faker.datatype.number({ min: 3, max: 10 }); }
// if (typeof range == 'undefined') { range = 7; }
// strange issue with the node_min_test failing for captialize, please fix and add faker.lorem.back
@@ -76,7 +76,7 @@ var Lorem = function (faker) {
* @param {string} separator defaults to `' '`
*/
self.sentences = function (sentenceCount, separator) {
- if (typeof sentenceCount === 'undefined') { sentenceCount = faker.random.number({ min: 2, max: 6 });}
+ if (typeof sentenceCount === 'undefined') { sentenceCount = faker.datatype.number({ min: 2, max: 6 });}
if (typeof separator == 'undefined') { separator = " "; }
var sentences = [];
for (sentenceCount; sentenceCount > 0; sentenceCount--) {
@@ -93,7 +93,7 @@ var Lorem = function (faker) {
*/
self.paragraph = function (sentenceCount) {
if (typeof sentenceCount == 'undefined') { sentenceCount = 3; }
- return faker.lorem.sentences(sentenceCount + faker.random.number(3));
+ return faker.lorem.sentences(sentenceCount + faker.datatype.number(3));
};
/**
@@ -134,7 +134,7 @@ var Lorem = function (faker) {
* @param {number} lineCount defaults to a random number between 1 and 5
*/
self.lines = function lines (lineCount) {
- if (typeof lineCount === 'undefined') { lineCount = faker.random.number({ min: 1, max: 5 });}
+ if (typeof lineCount === 'undefined') { lineCount = faker.datatype.number({ min: 1, max: 5 });}
return faker.lorem.sentences(lineCount, '\n')
};
diff --git a/lib/name.js b/lib/name.js
index 3d42cb10..053e3a01 100644
--- a/lib/name.js
+++ b/lib/name.js
@@ -27,7 +27,7 @@ function Name (faker) {
if (typeof gender !== 'number') {
if(typeof faker.definitions.name.first_name === "undefined") {
- gender = faker.random.number(1);
+ gender = faker.datatype.number(1);
}
else {
//Fall back to non-gendered names if they exist and gender wasn't specified
@@ -55,7 +55,7 @@ function Name (faker) {
// some locale datasets ( like ru ) have last_name split by gender. i have no idea how last names can have genders, but also i do not speak russian
// see above comment of firstName method
if (typeof gender !== 'number') {
- gender = faker.random.number(1);
+ gender = faker.datatype.number(1);
}
if (gender === 0) {
return faker.random.arrayElement(faker.locales[faker.locale].name.male_last_name);
@@ -76,7 +76,7 @@ function Name (faker) {
this.middleName = function (gender) {
if (typeof faker.definitions.name.male_middle_name !== "undefined" && typeof faker.definitions.name.female_middle_name !== "undefined") {
if (typeof gender !== 'number') {
- gender = faker.random.number(1);
+ gender = faker.datatype.number(1);
}
if (gender === 0) {
return faker.random.arrayElement(faker.locales[faker.locale].name.male_middle_name);
@@ -97,12 +97,12 @@ function Name (faker) {
* @memberof faker.name
*/
this.findName = function (firstName, lastName, gender) {
- var r = faker.random.number(8);
+ var r = faker.datatype.number(8);
var prefix, suffix;
// in particular locales first and last names split by gender,
// thus we keep consistency by passing 0 as male and 1 as female
if (typeof gender !== 'number') {
- gender = faker.random.number(1);
+ gender = faker.datatype.number(1);
}
firstName = firstName || faker.name.firstName(gender);
lastName = lastName || faker.name.lastName(gender);
@@ -158,7 +158,7 @@ function Name (faker) {
this.prefix = function (gender) {
if (typeof faker.definitions.name.male_prefix !== "undefined" && typeof faker.definitions.name.female_prefix !== "undefined") {
if (typeof gender !== 'number') {
- gender = faker.random.number(1);
+ gender = faker.datatype.number(1);
}
if (gender === 0) {
return faker.random.arrayElement(faker.locales[faker.locale].name.male_prefix);
diff --git a/lib/random.js b/lib/random.js
index 5c585236..5b4eebac 100644
--- a/lib/random.js
+++ b/lib/random.js
@@ -29,68 +29,27 @@ function Random (faker, seed) {
}
/**
+ * @Deprecated
* returns a single random number based on a max number or range
*
* @method faker.random.number
* @param {mixed} options {min, max, precision}
*/
this.number = function (options) {
-
- if (typeof options === "number") {
- options = {
- max: options
- };
- }
-
- options = options || {};
-
- if (typeof options.min === "undefined") {
- options.min = 0;
- }
-
- if (typeof options.max === "undefined") {
- options.max = 99999;
- }
- if (typeof options.precision === "undefined") {
- options.precision = 1;
- }
-
- // Make the range inclusive of the max value
- var max = options.max;
- if (max >= 0) {
- max += options.precision;
- }
-
- var randomNumber = Math.floor(
- mersenne.rand(max / options.precision, options.min / options.precision));
- // Workaround problem in Float point arithmetics for e.g. 6681493 / 0.01
- randomNumber = randomNumber / (1 / options.precision);
-
- return randomNumber;
-
+ console.log("DeprecationWarning: Method is now located in faker.datatype.number");
+ return faker.datatype.number(options);
};
/**
+ * @Deprecated
* returns a single random floating-point number based on a max number or range
*
* @method faker.random.float
* @param {mixed} options
*/
this.float = function (options) {
- if (typeof options === "number") {
- options = {
- precision: options
- };
- }
- options = options || {};
- var opts = {};
- for (var p in options) {
- opts[p] = options[p];
- }
- if (typeof opts.precision === 'undefined') {
- opts.precision = 0.01;
- }
- return faker.random.number(opts);
+ console.log("DeprecationWarning: Method is now located in faker.datatype.float");
+ return faker.datatype.float(options);
};
/**
@@ -101,7 +60,7 @@ function Random (faker, seed) {
*/
this.arrayElement = function (array) {
array = array || ["a", "b", "c"];
- var r = faker.random.number({ max: array.length - 1 });
+ var r = faker.datatype.number({ max: array.length - 1 });
return array[r];
};
@@ -116,7 +75,7 @@ function Random (faker, seed) {
array = array || ["a", "b", "c"];
if (typeof count !== 'number') {
- count = faker.random.number({ min: 1, max: array.length });
+ count = faker.datatype.number({ min: 1, max: array.length });
} else if (count > array.length) {
count = array.length;
} else if (count < 0) {
@@ -126,7 +85,7 @@ function Random (faker, seed) {
var arrayCopy = array.slice();
var countToRemove = arrayCopy.length - count;
for (var i = 0; i < countToRemove; i++) {
- var indexToRemove = faker.random.number({ max: arrayCopy.length - 1 });
+ var indexToRemove = faker.datatype.number({ max: arrayCopy.length - 1 });
arrayCopy.splice(indexToRemove, 1);
}
@@ -149,18 +108,14 @@ function Random (faker, seed) {
};
/**
+ * @Deprecated
* uuid
*
* @method faker.random.uuid
*/
this.uuid = function () {
- var RFC4122_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
- var replacePlaceholders = function (placeholder) {
- var random = faker.random.number({ min: 0, max: 15 });
- var value = placeholder == 'x' ? random : (random &0x3 | 0x8);
- return value.toString(16);
- };
- return RFC4122_TEMPLATE.replace(/[xy]/g, replacePlaceholders);
+ console.log("DeprecationWarning: Method is now located in faker.datatype.uuid");
+ return faker.datatype.uuid();
};
/**
@@ -169,7 +124,8 @@ function Random (faker, seed) {
* @method faker.random.boolean
*/
this.boolean = function () {
- return !!faker.random.number(1)
+ console.log("DeprecationWarning: Method is now located in faker.datatype.boolean");
+ return faker.datatype.boolean();
};
// TODO: have ability to return specific type of word? As in: noun, adjective, verb, etc
@@ -229,7 +185,7 @@ function Random (faker, seed) {
this.words = function randomWords (count) {
var words = [];
if (typeof count === "undefined") {
- count = faker.random.number({min:1, max: 3});
+ count = faker.datatype.number({min:1, max: 3});
}
for (var i = 0; i<count; i++) {
words.push(faker.random.word());
@@ -327,6 +283,7 @@ function Random (faker, seed) {
};
/**
+ * @Deprecated
* hexaDecimal
*
* @method faker.random.hexaDecimal
diff --git a/lib/system.js b/lib/system.js
index 1bfe1bfb..f3428271 100644
--- a/lib/system.js
+++ b/lib/system.js
@@ -151,9 +151,9 @@ function System (faker) {
* @method faker.system.semver
*/
this.semver = function () {
- return [faker.random.number(9),
- faker.random.number(9),
- faker.random.number(9)].join('.');
+ return [faker.datatype.number(9),
+ faker.datatype.number(9),
+ faker.datatype.number(9)].join('.');
}
}
diff --git a/lib/vehicle.js b/lib/vehicle.js
index 3a8fa7a5..7f1ae782 100644
--- a/lib/vehicle.js
+++ b/lib/vehicle.js
@@ -88,7 +88,7 @@ var Vehicle = function (faker) {
faker.random.alphaNumeric(10, {bannedChars:bannedChars}) +
faker.random.alpha({ count: 1, upcase: true ,bannedChars:bannedChars}) +
faker.random.alphaNumeric(1, {bannedChars:bannedChars}) +
- faker.random.number({ min: 10000, max: 100000}) // return five digit #
+ faker.datatype.number({ min: 10000, max: 100000}) // return five digit #
).toUpperCase();
};
@@ -119,8 +119,8 @@ var Vehicle = function (faker) {
self.vrm = function () {
return (
faker.random.alpha({ count: 2, upcase: true }) +
- faker.random.number({ min: 0, max: 9 }) +
- faker.random.number({ min: 0, max: 9 }) +
+ faker.datatype.number({ min: 0, max: 9 }) +
+ faker.datatype.number({ min: 0, max: 9 }) +
faker.random.alpha({ count: 3, upcase: true })
).toUpperCase();
};
diff --git a/test/address.unit.js b/test/address.unit.js
index 5b56266c..0306f4f1 100644
--- a/test/address.unit.js
+++ b/test/address.unit.js
@@ -14,7 +14,7 @@ describe("address.js", function () {
});
afterEach(function () {
- faker.random.number.restore();
+ faker.datatype.number.restore();
faker.address.cityPrefix.restore();
faker.name.firstName.restore();
faker.name.lastName.restore();
@@ -22,7 +22,7 @@ describe("address.js", function () {
});
it("occasionally returns prefix + first name + suffix", function () {
- sinon.stub(faker.random, 'number').returns(0);
+ sinon.stub(faker.datatype, 'number').returns(0);
var city = faker.address.city();
assert.ok(city);
@@ -33,7 +33,7 @@ describe("address.js", function () {
});
it("occasionally returns prefix + first name", function () {
- sinon.stub(faker.random, 'number').returns(1);
+ sinon.stub(faker.datatype, 'number').returns(1);
var city = faker.address.city();
assert.ok(city);
@@ -43,7 +43,7 @@ describe("address.js", function () {
});
it("occasionally returns first name + suffix", function () {
- sinon.stub(faker.random, 'number').returns(2);
+ sinon.stub(faker.datatype, 'number').returns(2);
var city = faker.address.city();
assert.ok(city);
@@ -52,7 +52,7 @@ describe("address.js", function () {
});
it("occasionally returns last name + suffix", function () {
- sinon.stub(faker.random, 'number').returns(3);
+ sinon.stub(faker.datatype, 'number').returns(3);
var city = faker.address.city();
assert.ok(city);
@@ -79,7 +79,7 @@ describe("address.js", function () {
});
it("occasionally returns last name + suffix", function () {
- sinon.stub(faker.random, 'number').returns(0);
+ sinon.stub(faker.datatype, 'number').returns(0);
var street_name = faker.address.streetName();
assert.ok(street_name);
@@ -87,11 +87,11 @@ describe("address.js", function () {
assert.ok(faker.name.lastName.calledOnce);
assert.ok(faker.address.streetSuffix.calledOnce);
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("occasionally returns first name + suffix", function () {
- sinon.stub(faker.random, 'number').returns(1);
+ sinon.stub(faker.datatype, 'number').returns(1);
var street_name = faker.address.streetName();
assert.ok(street_name);
@@ -100,7 +100,7 @@ describe("address.js", function () {
assert.ok(!faker.name.lastName.called);
assert.ok(faker.address.streetSuffix.calledOnce);
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("trims trailing whitespace from the name", function() {
@@ -131,7 +131,7 @@ describe("address.js", function () {
});
it("occasionally returns a 5-digit street number", function () {
- sinon.stub(faker.random, 'number').returns(0);
+ sinon.stub(faker.datatype, 'number').returns(0);
var address = faker.address.streetAddress();
var expected = 5
var parts = address.split(' ');
@@ -139,11 +139,11 @@ describe("address.js", function () {
assert.strictEqual(parts[0].length, expected, errorExpectDigits(expected));
assert.ok(faker.address.streetName.called);
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("occasionally returns a 4-digit street number", function () {
- sinon.stub(faker.random, 'number').returns(1);
+ sinon.stub(faker.datatype, 'number').returns(1);
var address = faker.address.streetAddress();
var parts = address.split(' ');
var expected = 4
@@ -151,11 +151,11 @@ describe("address.js", function () {
assert.strictEqual(parts[0].length, expected, errorExpectDigits(expected));
assert.ok(faker.address.streetName.called);
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("occasionally returns a 3-digit street number", function () {
- sinon.stub(faker.random, 'number').returns(2);
+ sinon.stub(faker.datatype, 'number').returns(2);
var address = faker.address.streetAddress();
var parts = address.split(' ');
var expected = 3
@@ -164,7 +164,7 @@ describe("address.js", function () {
assert.ok(faker.address.streetName.called);
assert.ok(!faker.address.secondaryAddress.called);
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
context("when useFulladdress is true", function () {
@@ -307,42 +307,42 @@ describe("address.js", function () {
describe("latitude()", function () {
it("returns random latitude", function () {
for (var i = 0; i < 100; i++) {
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
var latitude = faker.address.latitude();
assert.ok(typeof latitude === 'string');
var latitude_float = parseFloat(latitude);
assert.ok(latitude_float >= -90.0);
assert.ok(latitude_float <= 90.0);
- assert.ok(faker.random.number.called);
- faker.random.number.restore();
+ assert.ok(faker.datatype.number.called);
+ faker.datatype.number.restore();
}
});
it("returns latitude with min and max and default precision", function () {
for (var i = 0; i < 100; i++) {
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
var latitude = faker.address.latitude(-5, 5);
assert.ok(typeof latitude === 'string');
assert.strictEqual(latitude.split('.')[1].length, 4, "The precision of latitude should be had of 4 digits");
var latitude_float = parseFloat(latitude);
assert.ok(latitude_float >= -5);
assert.ok(latitude_float <= 5);
- assert.ok(faker.random.number.called);
- faker.random.number.restore();
+ assert.ok(faker.datatype.number.called);
+ faker.datatype.number.restore();
}
});
it("returns random latitude with custom precision", function () {
for (var i = 0; i < 100; i++) {
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
var latitude = faker.address.latitude(undefined, undefined, 7);
assert.ok(typeof latitude === 'string');
assert.strictEqual(latitude.split('.')[1].length, 7, "The precision of latitude should be had of 7 digits");
var latitude_float = parseFloat(latitude);
assert.ok(latitude_float >= -180);
assert.ok(latitude_float <= 180);
- assert.ok(faker.random.number.called);
- faker.random.number.restore();
+ assert.ok(faker.datatype.number.called);
+ faker.datatype.number.restore();
}
});
});
@@ -350,42 +350,42 @@ describe("address.js", function () {
describe("longitude()", function () {
it("returns random longitude", function () {
for (var i = 0; i < 100; i++) {
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
var longitude = faker.address.longitude();
assert.ok(typeof longitude === 'string');
var longitude_float = parseFloat(longitude);
assert.ok(longitude_float >= -180.0);
assert.ok(longitude_float <= 180.0);
- assert.ok(faker.random.number.called);
- faker.random.number.restore();
+ assert.ok(faker.datatype.number.called);
+ faker.datatype.number.restore();
}
});
it("returns random longitude with min and max and default precision", function () {
for (var i = 0; i < 100; i++) {
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
var longitude = faker.address.longitude(100, -30);
assert.ok(typeof longitude === 'string');
assert.strictEqual(longitude.split('.')[1].length, 4, "The precision of longitude should be had of 4 digits");
var longitude_float = parseFloat(longitude);
assert.ok(longitude_float >= -30);
assert.ok(longitude_float <= 100);
- assert.ok(faker.random.number.called);
- faker.random.number.restore();
+ assert.ok(faker.datatype.number.called);
+ faker.datatype.number.restore();
}
});
it("returns random longitude with custom precision", function () {
for (var i = 0; i < 100; i++) {
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
var longitude = faker.address.longitude(undefined, undefined, 7);
assert.ok(typeof longitude === 'string');
assert.strictEqual(longitude.split('.')[1].length, 7, "The precision of longitude should be had of 7 digits");
var longitude_float = parseFloat(longitude);
assert.ok(longitude_float >= -180);
assert.ok(longitude_float <= 180);
- assert.ok(faker.random.number.called);
- faker.random.number.restore();
+ assert.ok(faker.datatype.number.called);
+ faker.datatype.number.restore();
}
});
});
diff --git a/test/company.unit.js b/test/company.unit.js
index 06292b35..df8b5a2c 100644
--- a/test/company.unit.js
+++ b/test/company.unit.js
@@ -9,34 +9,34 @@ describe("company.js", function () {
it("sometimes returns three last names", function () {
sinon.spy(faker.name, 'lastName');
- sinon.stub(faker.random, 'number').returns(2);
+ sinon.stub(faker.datatype, 'number').returns(2);
var name = faker.company.companyName();
var parts = name.split(' ');
assert.strictEqual(parts.length, 4); // account for word 'and'
assert.ok(faker.name.lastName.calledThrice);
- faker.random.number.restore();
+ faker.datatype.number.restore();
faker.name.lastName.restore();
});
it("sometimes returns two last names separated by a hyphen", function () {
sinon.spy(faker.name, 'lastName');
- sinon.stub(faker.random, 'number').returns(1);
+ sinon.stub(faker.datatype, 'number').returns(1);
var name = faker.company.companyName();
var parts = name.split('-');
assert.ok(parts.length >= 2);
assert.ok(faker.name.lastName.calledTwice);
- faker.random.number.restore();
+ faker.datatype.number.restore();
faker.name.lastName.restore();
});
it("sometimes returns a last name with a company suffix", function () {
sinon.spy(faker.company, 'companySuffix');
sinon.spy(faker.name, 'lastName');
- sinon.stub(faker.random, 'number').returns(0);
+ sinon.stub(faker.datatype, 'number').returns(0);
var name = faker.company.companyName();
var parts = name.split(' ');
@@ -44,7 +44,7 @@ describe("company.js", function () {
assert.ok(faker.name.lastName.calledOnce);
assert.ok(faker.company.companySuffix.calledOnce);
- faker.random.number.restore();
+ faker.datatype.number.restore();
faker.name.lastName.restore();
faker.company.companySuffix.restore();
});
diff --git a/test/datatype.unit.js b/test/datatype.unit.js
new file mode 100644
index 00000000..7300d26f
--- /dev/null
+++ b/test/datatype.unit.js
@@ -0,0 +1,214 @@
+if (typeof module !== 'undefined') {
+ var assert = require('assert');
+ var sinon = require('sinon');
+ var _ = require('lodash');
+ var faker = require('../index');
+ var mersenne = require('../vendor/mersenne');
+}
+
+
+describe("datatype.js", function () {
+
+ describe("number", function() {
+
+ it("returns a random number given a maximum value as Number", function() {
+ var max = 10;
+ assert.ok(faker.datatype.number(max) <= max);
+ });
+
+ it("returns a random number given a maximum value as Object", function() {
+ var options = { max: 10 };
+ assert.ok(faker.datatype.number(options) <= options.max);
+ });
+
+ it("returns a random number given a maximum value of 0", function() {
+ var options = { max: 0 };
+ assert.ok(faker.datatype.number(options) === 0);
+ });
+
+ it("returns a random number given a negative number minimum and maximum value of 0", function() {
+ var options = { min: -100, max: 0 };
+ assert.ok(faker.datatype.number(options) <= options.max);
+ });
+
+ it("returns a random number between a range", function() {
+ var options = { min: 22, max: 33 };
+ for(var i = 0; i < 100; i++) {
+ var randomNumber = faker.datatype.number(options);
+ assert.ok(randomNumber >= options.min);
+ assert.ok(randomNumber <= options.max);
+ }
+ });
+
+ it("provides numbers with a given precision", function() {
+ var options = { min: 0, max: 1.5, precision: 0.5 };
+ var results = _.chain(_.range(50))
+ .map(function() {
+ return faker.datatype.number(options);
+ })
+ .uniq()
+ .value()
+ .sort();
+
+ assert.ok(_.includes(results, 0.5));
+ assert.ok(_.includes(results, 1.0));
+
+ assert.strictEqual(results[0], 0);
+ assert.strictEqual(_.last(results), 1.5);
+
+ });
+
+ it("provides numbers with a with exact precision", function() {
+ var options = { min: 0.5, max: 0.99, precision: 0.01 };
+ for(var i = 0; i < 100; i++) {
+ var number = faker.datatype.number(options);
+ assert.strictEqual(number, Number(number.toFixed(2)));
+ }
+ });
+
+ it("should not modify the input object", function() {
+ var min = 1;
+ var max = 2;
+ var opts = {
+ min: min,
+ max: max
+ };
+
+ faker.datatype.number(opts);
+
+ assert.strictEqual(opts.min, min);
+ assert.strictEqual(opts.max, max);
+ });
+
+ it('should return deterministic results when seeded with integer', function() {
+ faker.seed(100);
+ var name = faker.name.findName();
+ assert.strictEqual(name, 'Eva Jenkins');
+ })
+
+ it('should return deterministic results when seeded with 0', function() {
+ faker.seed(0);
+ var name = faker.name.findName();
+ assert.strictEqual(name, 'Lola Sporer');
+ })
+
+ it('should return deterministic results when seeded with array - one element', function() {
+ faker.seed([10]);
+ var name = faker.name.findName();
+ assert.strictEqual(name, 'Duane Kub');
+ })
+
+ it('should return deterministic results when seeded with array - multiple elements', function() {
+ faker.seed([10, 100, 1000]);
+ var name = faker.name.findName();
+ assert.strictEqual(name, 'Alma Shanahan');
+ })
+
+ });
+
+ describe("float", function() {
+
+ it("returns a random float with a default precision value (0.01)", function() {
+ var number = faker.datatype.float();
+ assert.strictEqual(number, Number(number.toFixed(2)));
+ });
+
+ it("returns a random float given a precision value", function() {
+ var number = faker.datatype.float(0.001);
+ assert.strictEqual(number, Number(number.toFixed(3)));
+ });
+
+ it("returns a random number given a maximum value as Object", function() {
+ var options = { max: 10 };
+ assert.ok(faker.datatype.float(options) <= options.max);
+ });
+
+ it("returns a random number given a maximum value of 0", function() {
+ var options = { max: 0 };
+ assert.ok(faker.datatype.float(options) === 0);
+ });
+
+ it("returns a random number given a negative number minimum and maximum value of 0", function() {
+ var options = { min: -100, max: 0 };
+ assert.ok(faker.datatype.float(options) <= options.max);
+ });
+
+ it("returns a random number between a range", function() {
+ var options = { min: 22, max: 33 };
+ for(var i = 0; i < 5; i++) {
+ var randomNumber = faker.datatype.float(options);
+ assert.ok(randomNumber >= options.min);
+ assert.ok(randomNumber <= options.max);
+ }
+ });
+
+ it("provides numbers with a given precision", function() {
+ var options = { min: 0, max: 1.5, precision: 0.5 };
+ var results = _.chain(_.range(50))
+ .map(function() {
+ return faker.datatype.float(options);
+ })
+ .uniq()
+ .value()
+ .sort();
+
+ assert.ok(_.includes(results, 0.5));
+ assert.ok(_.includes(results, 1.0));
+
+ assert.strictEqual(results[0], 0);
+ assert.strictEqual(_.last(results), 1.5);
+
+ });
+
+ it("provides numbers with a with exact precision", function() {
+ var options = { min: 0.5, max: 0.99, precision: 0.01 };
+ for(var i = 0; i < 100; i++) {
+ var number = faker.datatype.float(options);
+ assert.strictEqual(number, Number(number.toFixed(2)));
+ }
+ });
+
+ it("should not modify the input object", function() {
+ var min = 1;
+ var max = 2;
+ var opts = {
+ min: min,
+ max: max
+ };
+
+ faker.datatype.float(opts);
+
+ assert.strictEqual(opts.min, min);
+ assert.strictEqual(opts.max, max);
+ });
+ });
+
+ describe('boolean', function() {
+ it('should generate a boolean value', function() {
+ var bool = faker.datatype.boolean();
+ assert.ok(typeof bool == 'boolean');
+ });
+ });
+
+ describe('UUID', function() {
+ it('should generate a valid UUID', function() {
+ var UUID = faker.datatype.uuid();
+ var RFC4122 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
+ assert.ok(RFC4122.test(UUID));
+ })
+ })
+
+ describe('hexaDecimal', function() {
+ var hexaDecimal = faker.datatype.hexaDecimal;
+
+ it('should generate single hex character when no additional argument was provided', function() {
+ var hex = hexaDecimal();
+ assert.ok(hex.match(/^(0x)[0-9a-f]{1}$/i));
+ })
+
+ it('should generate a random hex string', function() {
+ var hex = hexaDecimal(5);
+ assert.ok(hex.match(/^(0x)[0-9a-f]+$/i));
+ })
+ })
+}) \ No newline at end of file
diff --git a/test/finance.unit.js b/test/finance.unit.js
index 47c457c9..aa617d0a 100644
--- a/test/finance.unit.js
+++ b/test/finance.unit.js
@@ -85,7 +85,7 @@ describe('finance.js', function () {
it("should set a specified length", function () {
- var expected = faker.random.number(20);
+ var expected = faker.datatype.number(20);
expected = (expected == 0 || !expected || typeof expected == 'undefined') ? 4 : expected;
@@ -138,7 +138,7 @@ describe('finance.js', function () {
it("should work when random variables are passed into the arguments", function () {
- var length = faker.random.number(20);
+ var length = faker.datatype.number(20);
var ellipsis = (length % 2 === 0) ? true : false;
var parens = !ellipsis;
diff --git a/test/git.unit.js b/test/git.unit.js
index df86be0b..46e25724 100644
--- a/test/git.unit.js
+++ b/test/git.unit.js
@@ -31,7 +31,7 @@ describe("git.js", function() {
sinon.spy(faker.internet, 'email');
sinon.spy(faker.name, 'firstName');
sinon.spy(faker.name, 'lastName');
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
});
afterEach(function() {
@@ -40,13 +40,13 @@ describe("git.js", function() {
faker.internet.email.restore();
faker.name.firstName.restore();
faker.name.lastName.restore();
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("returns merge entry at random", function() {
faker.git.commitEntry();
- assert.ok(faker.random.number.called);
+ assert.ok(faker.datatype.number.called);
});
it("returns a commit entry with git commit message and sha", function() {
diff --git a/test/helpers.unit.js b/test/helpers.unit.js
index 5bbe0fcc..7436da03 100644
--- a/test/helpers.unit.js
+++ b/test/helpers.unit.js
@@ -32,11 +32,11 @@ describe("helpers.js", function () {
describe("shuffle()", function () {
it("the output is the same length as the input", function () {
- sinon.spy(faker.random, 'number');
+ sinon.spy(faker.datatype, 'number');
var shuffled = faker.helpers.shuffle(["a", "b"]);
assert.ok(shuffled.length === 2);
- assert.ok(faker.random.number.calledWith(1));
- faker.random.number.restore();
+ assert.ok(faker.datatype.number.calledWith(1));
+ faker.datatype.number.restore();
});
it("empty array returns empty array", function () {
diff --git a/test/name.unit.js b/test/name.unit.js
index 40291d2b..89d7effa 100644
--- a/test/name.unit.js
+++ b/test/name.unit.js
@@ -99,28 +99,28 @@ describe("name.js", function () {
describe("findName()", function () {
it("usually returns a first name and last name", function () {
- sinon.stub(faker.random, 'number').returns(5);
+ sinon.stub(faker.datatype, 'number').returns(5);
var name = faker.name.findName();
assert.ok(name);
var parts = name.split(' ');
assert.strictEqual(parts.length, 2);
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("occasionally returns a first name and last name with a prefix", function () {
- sinon.stub(faker.random, 'number').returns(0);
+ sinon.stub(faker.datatype, 'number').returns(0);
var name = faker.name.findName();
var parts = name.split(' ');
assert.ok(parts.length >= 3);
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("occasionally returns a male full name with a prefix", function () {
- sinon.stub(faker.random, 'number')
+ sinon.stub(faker.datatype, 'number')
.withArgs(8).returns(0) // with prefix
.withArgs(1).returns(0); // gender male
@@ -132,14 +132,14 @@ describe("name.js", function () {
assert.strictEqual(name, 'X Y Z');
- faker.random.number.restore();
+ faker.datatype.number.restore();
faker.name.prefix.restore();
faker.name.firstName.restore();
faker.name.lastName.restore();
});
it("occasionally returns a female full name with a prefix", function () {
- sinon.stub(faker.random, 'number')
+ sinon.stub(faker.datatype, 'number')
.withArgs(8).returns(0) // with prefix
.withArgs(1).returns(1); // gender female
@@ -151,14 +151,14 @@ describe("name.js", function () {
assert.strictEqual(name, 'J K L');
- faker.random.number.restore();
+ faker.datatype.number.restore();
faker.name.prefix.restore();
faker.name.firstName.restore();
faker.name.lastName.restore();
});
it("occasionally returns a first name and last name with a suffix", function () {
- sinon.stub(faker.random, 'number').returns(1);
+ sinon.stub(faker.datatype, 'number').returns(1);
sinon.stub(faker.name, 'suffix').returns('Jr.');
var name = faker.name.findName();
var parts = name.split(' ');
@@ -167,7 +167,7 @@ describe("name.js", function () {
assert.strictEqual(parts[parts.length-1], 'Jr.');
faker.name.suffix.restore();
- faker.random.number.restore();
+ faker.datatype.number.restore();
});
it("needs to work with specific locales and respect the fallbacks", function () {
diff --git a/test/random.unit.js b/test/random.unit.js
index e068c905..28675c31 100644
--- a/test/random.unit.js
+++ b/test/random.unit.js
@@ -9,176 +9,26 @@ if (typeof module !== 'undefined') {
describe("random.js", function () {
describe("number", function() {
-
- it("returns a random number given a maximum value as Number", function() {
- var max = 10;
- assert.ok(faker.random.number(max) <= max);
- });
-
- it("returns a random number given a maximum value as Object", function() {
- var options = { max: 10 };
- assert.ok(faker.random.number(options) <= options.max);
+ it("random.number() uses datatype module and prints deprecation warning", function() {
+ sinon.spy(console, 'log')
+ sinon.spy(faker.datatype, 'number');
+ faker.random.number();
+ assert.ok(faker.datatype.number.called);
+ assert.ok(console.log.calledWith('DeprecationWarning: Method is now located in faker.datatype.number'));
+ faker.datatype.number.restore()
+ console.log.restore();
});
-
- it("returns a random number given a maximum value of 0", function() {
- var options = { max: 0 };
- assert.ok(faker.random.number(options) === 0);
- });
-
- it("returns a random number given a negative number minimum and maximum value of 0", function() {
- var options = { min: -100, max: 0 };
- assert.ok(faker.random.number(options) <= options.max);
- });
-
- it("returns a random number between a range", function() {
- var options = { min: 22, max: 33 };
- for(var i = 0; i < 100; i++) {
- var randomNumber = faker.random.number(options);
- assert.ok(randomNumber >= options.min);
- assert.ok(randomNumber <= options.max);
- }
- });
-
- it("provides numbers with a given precision", function() {
- var options = { min: 0, max: 1.5, precision: 0.5 };
- var results = _.chain(_.range(50))
- .map(function() {
- return faker.random.number(options);
- })
- .uniq()
- .value()
- .sort();
-
- assert.ok(_.includes(results, 0.5));
- assert.ok(_.includes(results, 1.0));
-
- assert.strictEqual(results[0], 0);
- assert.strictEqual(_.last(results), 1.5);
-
- });
-
- it("provides numbers with a with exact precision", function() {
- var options = { min: 0.5, max: 0.99, precision: 0.01 };
- for(var i = 0; i < 100; i++) {
- var number = faker.random.number(options);
- assert.strictEqual(number, Number(number.toFixed(2)));
- }
- });
-
- it("should not modify the input object", function() {
- var min = 1;
- var max = 2;
- var opts = {
- min: min,
- max: max
- };
-
- faker.random.number(opts);
-
- assert.strictEqual(opts.min, min);
- assert.strictEqual(opts.max, max);
- });
-
- it('should return deterministic results when seeded with integer', function() {
- faker.seed(100);
- var name = faker.name.findName();
- assert.strictEqual(name, 'Eva Jenkins');
- })
-
- it('should return deterministic results when seeded with 0', function() {
- faker.seed(0);
- var name = faker.name.findName();
- assert.strictEqual(name, 'Lola Sporer');
- })
-
- it('should return deterministic results when seeded with array - one element', function() {
- faker.seed([10]);
- var name = faker.name.findName();
- assert.strictEqual(name, 'Duane Kub');
- })
-
- it('should return deterministic results when seeded with array - multiple elements', function() {
- faker.seed([10, 100, 1000]);
- var name = faker.name.findName();
- assert.strictEqual(name, 'Alma Shanahan');
- })
-
});
describe("float", function() {
-
- it("returns a random float with a default precision value (0.01)", function() {
- var number = faker.random.float();
- assert.strictEqual(number, Number(number.toFixed(2)));
- });
-
- it("returns a random float given a precision value", function() {
- var number = faker.random.float(0.001);
- assert.strictEqual(number, Number(number.toFixed(3)));
- });
-
- it("returns a random number given a maximum value as Object", function() {
- var options = { max: 10 };
- assert.ok(faker.random.float(options) <= options.max);
- });
-
- it("returns a random number given a maximum value of 0", function() {
- var options = { max: 0 };
- assert.ok(faker.random.float(options) === 0);
- });
-
- it("returns a random number given a negative number minimum and maximum value of 0", function() {
- var options = { min: -100, max: 0 };
- assert.ok(faker.random.float(options) <= options.max);
- });
-
- it("returns a random number between a range", function() {
- var options = { min: 22, max: 33 };
- for(var i = 0; i < 5; i++) {
- var randomNumber = faker.random.float(options);
- assert.ok(randomNumber >= options.min);
- assert.ok(randomNumber <= options.max);
- }
- });
-
- it("provides numbers with a given precision", function() {
- var options = { min: 0, max: 1.5, precision: 0.5 };
- var results = _.chain(_.range(50))
- .map(function() {
- return faker.random.float(options);
- })
- .uniq()
- .value()
- .sort();
-
- assert.ok(_.includes(results, 0.5));
- assert.ok(_.includes(results, 1.0));
-
- assert.strictEqual(results[0], 0);
- assert.strictEqual(_.last(results), 1.5);
-
- });
-
- it("provides numbers with a with exact precision", function() {
- var options = { min: 0.5, max: 0.99, precision: 0.01 };
- for(var i = 0; i < 100; i++) {
- var number = faker.random.float(options);
- assert.strictEqual(number, Number(number.toFixed(2)));
- }
- });
-
- it("should not modify the input object", function() {
- var min = 1;
- var max = 2;
- var opts = {
- min: min,
- max: max
- };
-
- faker.random.float(opts);
-
- assert.strictEqual(opts.min, min);
- assert.strictEqual(opts.max, max);
+ it("random.float() uses datatype module and prints deprecation warning", function() {
+ sinon.spy(console, 'log')
+ sinon.spy(faker.datatype, 'float');
+ faker.random.float();
+ assert.ok(faker.datatype.float.called);
+ assert.ok(console.log.calledWith('DeprecationWarning: Method is now located in faker.datatype.float'));
+ faker.datatype.float.restore()
+ console.log.restore();
});
});
@@ -235,17 +85,26 @@ describe("random.js", function () {
});
describe('UUID', function() {
- it('should generate a valid UUID', function() {
- var UUID = faker.random.uuid();
- var RFC4122 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
- assert.ok(RFC4122.test(UUID));
- })
+ it("random.uuid() uses datatype module and prints deprecation warning", function() {
+ sinon.spy(console, 'log')
+ sinon.spy(faker.datatype, 'uuid');
+ faker.random.uuid();
+ assert.ok(faker.datatype.uuid.called);
+ assert.ok(console.log.calledWith('DeprecationWarning: Method is now located in faker.datatype.uuid'));
+ faker.datatype.uuid.restore()
+ console.log.restore();
+ });
})
describe('boolean', function() {
- it('should generate a boolean value', function() {
- var bool = faker.random.boolean();
- assert.ok(typeof bool == 'boolean');
+ it("random.boolean() uses datatype module and prints deprecation warning", function() {
+ sinon.spy(console, 'log')
+ sinon.spy(faker.datatype, 'boolean');
+ faker.random.boolean();
+ assert.ok(faker.datatype.boolean.called);
+ assert.ok(console.log.calledWith('DeprecationWarning: Method is now located in faker.datatype.boolean'));
+ faker.datatype.boolean.restore()
+ console.log.restore();
});
});
@@ -316,17 +175,15 @@ describe("random.js", function () {
});
describe('hexaDecimal', function() {
- var hexaDecimal = faker.random.hexaDecimal;
-
- it('should generate single hex character when no additional argument was provided', function() {
- var hex = hexaDecimal();
- assert.ok(hex.match(/^(0x)[0-9a-f]{1}$/i));
- })
-
- it('should generate a random hex string', function() {
- var hex = hexaDecimal(5);
- assert.ok(hex.match(/^(0x)[0-9a-f]+$/i));
- })
+ it("random.hexaDecimal() uses datatype module and prints deprecation warning", function() {
+ sinon.spy(console, 'log')
+ sinon.spy(faker.datatype, 'hexaDecimal');
+ faker.random.hexaDecimal();
+ assert.ok(faker.datatype.hexaDecimal.called);
+ assert.ok(console.log.calledWith('DeprecationWarning: Method is now located in faker.datatype.hexaDecimal'));
+ faker.datatype.hexaDecimal.restore()
+ console.log.restore();
+ });
})
describe("mersenne twister", function() {
diff --git a/vendor/user-agent.js b/vendor/user-agent.js
index c279db18..1148abc4 100644
--- a/vendor/user-agent.js
+++ b/vendor/user-agent.js
@@ -38,7 +38,7 @@ exports.generate = function generate(faker) {
if (typeof b === 'number' && typeof a === 'number') {
// 9/2018 - Added faker random to ensure mersenne and seed
- return faker.random.number({ min: a, max: b});
+ return faker.datatype.number({ min: a, max: b});
}