diff options
| author | LBuerstmayr <[email protected]> | 2021-03-01 22:46:26 +0100 |
|---|---|---|
| committer | Marak <[email protected]> | 2021-03-03 20:14:45 -0500 |
| commit | 7ad22c2e2aae2f5e6215bcdb91cf3fd28e727d92 (patch) | |
| tree | 03941188e92583a105c8ef17fde438fb1b52bdcf | |
| parent | 58c61afb1b8baa160add593e5af7c110de011968 (diff) | |
| download | faker-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.md | 4 | ||||
| -rw-r--r-- | examples/node/generateMultiLevelMultiLocaleJSON.js | 4 | ||||
| -rw-r--r-- | lib/address.js | 12 | ||||
| -rw-r--r-- | lib/commerce.js | 2 | ||||
| -rw-r--r-- | lib/company.js | 2 | ||||
| -rw-r--r-- | lib/datatype.js | 78 | ||||
| -rw-r--r-- | lib/date.js | 10 | ||||
| -rw-r--r-- | lib/finance.js | 23 | ||||
| -rw-r--r-- | lib/git.js | 2 | ||||
| -rw-r--r-- | lib/helpers.js | 14 | ||||
| -rw-r--r-- | lib/image.js | 2 | ||||
| -rw-r--r-- | lib/image_providers/lorempixel.js | 2 | ||||
| -rw-r--r-- | lib/index.js | 4 | ||||
| -rw-r--r-- | lib/internet.js | 20 | ||||
| -rw-r--r-- | lib/lorem.js | 8 | ||||
| -rw-r--r-- | lib/name.js | 12 | ||||
| -rw-r--r-- | lib/random.js | 75 | ||||
| -rw-r--r-- | lib/system.js | 6 | ||||
| -rw-r--r-- | lib/vehicle.js | 6 | ||||
| -rw-r--r-- | test/address.unit.js | 66 | ||||
| -rw-r--r-- | test/company.unit.js | 12 | ||||
| -rw-r--r-- | test/datatype.unit.js | 214 | ||||
| -rw-r--r-- | test/finance.unit.js | 4 | ||||
| -rw-r--r-- | test/git.unit.js | 6 | ||||
| -rw-r--r-- | test/helpers.unit.js | 6 | ||||
| -rw-r--r-- | test/name.unit.js | 20 | ||||
| -rw-r--r-- | test/random.unit.js | 227 | ||||
| -rw-r--r-- | vendor/user-agent.js | 2 |
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) + @@ -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}); } |
