aboutsummaryrefslogtreecommitdiff
path: root/node_modules/toml/test/test_toml.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/toml/test/test_toml.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/toml/test/test_toml.js')
-rw-r--r--node_modules/toml/test/test_toml.js586
1 files changed, 586 insertions, 0 deletions
diff --git a/node_modules/toml/test/test_toml.js b/node_modules/toml/test/test_toml.js
new file mode 100644
index 00000000..adbdc4a6
--- /dev/null
+++ b/node_modules/toml/test/test_toml.js
@@ -0,0 +1,586 @@
+var toml = require('../');
+var fs = require('fs');
+
+var assert = require("nodeunit").assert;
+
+assert.parsesToml = function(tomlStr, expected) {
+ try {
+ var actual = toml.parse(tomlStr);
+ } catch (e) {
+ var errInfo = "line: " + e.line + ", column: " + e.column;
+ return assert.fail("TOML parse error: " + e.message, errInfo, null, "at", assert.parsesToml);
+ }
+ return assert.deepEqual(actual, expected);
+};
+
+var exampleExpected = {
+ title: "TOML Example",
+ owner: {
+ name: "Tom Preston-Werner",
+ organization: "GitHub",
+ bio: "GitHub Cofounder & CEO\n\tLikes \"tater tots\" and beer and backslashes: \\",
+ dob: new Date("1979-05-27T07:32:00Z")
+ },
+ database: {
+ server: "192.168.1.1",
+ ports: [8001, 8001, 8003],
+ connection_max: 5000,
+ connection_min: -2,
+ max_temp: 87.1,
+ min_temp: -17.76,
+ enabled: true
+ },
+ servers: {
+ alpha: {
+ ip: "10.0.0.1",
+ dc: "eqdc10"
+ },
+ beta: {
+ ip: "10.0.0.2",
+ dc: "eqdc10"
+ }
+ },
+ clients: {
+ data: [ ["gamma", "delta"], [1, 2] ]
+ }
+};
+
+var hardExampleExpected = {
+ the: {
+ hard: {
+ another_test_string: ' Same thing, but with a string #',
+ 'bit#': {
+ multi_line_array: [']'],
+ 'what?': "You don't think some user won't do that?"
+ },
+ harder_test_string: " And when \"'s are in the string, along with # \"",
+ test_array: ['] ', ' # '],
+ test_array2: ['Test #11 ]proved that', 'Experiment #9 was a success']
+ },
+ test_string: "You'll hate me after this - #"
+ }
+};
+
+var easyTableArrayExpected = {
+ "products": [
+ { "name": "Hammer", "sku": 738594937 },
+ { },
+ { "name": "Nail", "sku": 284758393, "color": "gray" }
+ ]
+};
+
+var hardTableArrayExpected = {
+ "fruit": [
+ {
+ "name": "durian",
+ "variety": []
+ },
+ {
+ "name": "apple",
+ "physical": {
+ "color": "red",
+ "shape": "round"
+ },
+ "variety": [
+ { "name": "red delicious" },
+ { "name": "granny smith" }
+ ]
+ },
+ {},
+ {
+ "name": "banana",
+ "variety": [
+ { "name": "plantain" }
+ ]
+ },
+ {
+ "name": "orange",
+ "physical": {
+ "color": "orange",
+ "shape": "round"
+ }
+ }
+ ]
+}
+
+var badInputs = [
+ '[error] if you didn\'t catch this, your parser is broken',
+ 'string = "Anything other than tabs, spaces and newline after a table or key value pair has ended should produce an error unless it is a comment" like this',
+ 'array = [\n \"This might most likely happen in multiline arrays\",\n Like here,\n \"or here,\n and here\"\n ] End of array comment, forgot the #',
+ 'number = 3.14 pi <--again forgot the #'
+];
+
+exports.testParsesExample = function(test) {
+ var str = fs.readFileSync(__dirname + "/example.toml", 'utf-8')
+ test.parsesToml(str, exampleExpected);
+ test.done();
+};
+
+exports.testParsesHardExample = function(test) {
+ var str = fs.readFileSync(__dirname + "/hard_example.toml", 'utf-8')
+ test.parsesToml(str, hardExampleExpected);
+ test.done();
+};
+
+exports.testEasyTableArrays = function(test) {
+ var str = fs.readFileSync(__dirname + "/table_arrays_easy.toml", 'utf8')
+ test.parsesToml(str, easyTableArrayExpected);
+ test.done();
+};
+
+exports.testHarderTableArrays = function(test) {
+ var str = fs.readFileSync(__dirname + "/table_arrays_hard.toml", 'utf8')
+ test.parsesToml(str, hardTableArrayExpected);
+ test.done();
+};
+
+exports.testSupportsTrailingCommasInArrays = function(test) {
+ var str = 'arr = [1, 2, 3,]';
+ var expected = { arr: [1, 2, 3] };
+ test.parsesToml(str, expected);
+ test.done();
+};
+
+exports.testSingleElementArrayWithNoTrailingComma = function(test) {
+ var str = "a = [1]";
+ test.parsesToml(str, {
+ a: [1]
+ });
+ test.done();
+};
+
+exports.testEmptyArray = function(test) {
+ var str = "a = []";
+ test.parsesToml(str, {
+ a: []
+ });
+ test.done();
+};
+
+exports.testArrayWithWhitespace = function(test) {
+ var str = "[versions]\nfiles = [\n 3, \n 5 \n\n ]";
+ test.parsesToml(str, {
+ versions: {
+ files: [3, 5]
+ }
+ });
+ test.done();
+};
+
+exports.testEmptyArrayWithWhitespace = function(test) {
+ var str = "[versions]\nfiles = [\n \n ]";
+ test.parsesToml(str, {
+ versions: {
+ files: []
+ }
+ });
+ test.done();
+};
+
+exports.testDefineOnSuperkey = function(test) {
+ var str = "[a.b]\nc = 1\n\n[a]\nd = 2";
+ var expected = {
+ a: {
+ b: {
+ c: 1
+ },
+ d: 2
+ }
+ };
+ test.parsesToml(str, expected);
+ test.done();
+};
+
+exports.testWhitespace = function(test) {
+ var str = "a = 1\n \n b = 2 ";
+ test.parsesToml(str, {
+ a: 1, b: 2
+ });
+ test.done();
+};
+
+exports.testUnicode = function(test) {
+ var str = "str = \"My name is Jos\\u00E9\"";
+ test.parsesToml(str, {
+ str: "My name is Jos\u00E9"
+ });
+
+ var str = "str = \"My name is Jos\\U000000E9\"";
+ test.parsesToml(str, {
+ str: "My name is Jos\u00E9"
+ });
+ test.done();
+};
+
+exports.testMultilineStrings = function(test) {
+ var str = fs.readFileSync(__dirname + "/multiline_strings.toml", 'utf8');
+ test.parsesToml(str, {
+ key1: "One\nTwo",
+ key2: "One\nTwo",
+ key3: "One\nTwo"
+ });
+ test.done();
+};
+
+exports.testMultilineEatWhitespace = function(test) {
+ var str = fs.readFileSync(__dirname + "/multiline_eat_whitespace.toml", 'utf8');
+ test.parsesToml(str, {
+ key1: "The quick brown fox jumps over the lazy dog.",
+ key2: "The quick brown fox jumps over the lazy dog.",
+ key3: "The quick brown fox jumps over the lazy dog."
+ });
+ test.done();
+};
+
+exports.testLiteralStrings = function(test) {
+ var str = fs.readFileSync(__dirname + "/literal_strings.toml", 'utf8');
+ test.parsesToml(str, {
+ winpath: "C:\\Users\\nodejs\\templates",
+ winpath2: "\\\\ServerX\\admin$\\system32\\",
+ quoted: "Tom \"Dubs\" Preston-Werner",
+ regex: "<\\i\\c*\\s*>"
+ });
+ test.done();
+};
+
+exports.testMultilineLiteralStrings = function(test) {
+ var str = fs.readFileSync(__dirname + "/multiline_literal_strings.toml", 'utf8');
+ test.parsesToml(str, {
+ regex2: "I [dw]on't need \\d{2} apples",
+ lines: "The first newline is\ntrimmed in raw strings.\n All other whitespace\n is preserved.\n"
+ });
+ test.done();
+};
+
+exports.testIntegerFormats = function(test) {
+ var str = "a = +99\nb = 42\nc = 0\nd = -17\ne = 1_000_001\nf = 1_2_3_4_5 # why u do dis";
+ test.parsesToml(str, {
+ a: 99,
+ b: 42,
+ c: 0,
+ d: -17,
+ e: 1000001,
+ f: 12345
+ });
+ test.done();
+};
+
+exports.testFloatFormats = function(test) {
+ var str = "a = +1.0\nb = 3.1415\nc = -0.01\n" +
+ "d = 5e+22\ne = 1e6\nf = -2E-2\n" +
+ "g = 6.626e-34\n" +
+ "h = 9_224_617.445_991_228_313\n" +
+ "i = 1e1_000";
+ test.parsesToml(str, {
+ a: 1.0,
+ b: 3.1415,
+ c: -0.01,
+ d: 5e22,
+ e: 1e6,
+ f: -2e-2,
+ g: 6.626e-34,
+ h: 9224617.445991228313,
+ i: 1e1000
+ });
+ test.done();
+};
+
+exports.testDate = function(test) {
+ var date = new Date("1979-05-27T07:32:00Z");
+ test.parsesToml("a = 1979-05-27T07:32:00Z", {
+ a: date
+ });
+ test.done();
+};
+
+exports.testDateWithOffset = function(test) {
+ var date1 = new Date("1979-05-27T07:32:00-07:00"),
+ date2 = new Date("1979-05-27T07:32:00+02:00");
+ test.parsesToml("a = 1979-05-27T07:32:00-07:00\nb = 1979-05-27T07:32:00+02:00", {
+ a: date1,
+ b: date2
+ });
+ test.done();
+};
+
+exports.testDateWithSecondFraction = function(test) {
+ var date = new Date("1979-05-27T00:32:00.999999-07:00");
+ test.parsesToml("a = 1979-05-27T00:32:00.999999-07:00", {
+ a: date
+ });
+ test.done();
+};
+
+exports.testDateFromIsoString = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/20
+ var date = new Date(),
+ dateStr = date.toISOString(),
+ tomlStr = "a = " + dateStr;
+
+ test.parsesToml(tomlStr, {
+ a: date
+ });
+ test.done();
+};
+
+exports.testLeadingNewlines = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/22
+ var str = "\ntest = \"ing\"";
+ test.parsesToml(str, {
+ test: "ing"
+ });
+ test.done();
+};
+
+exports.testInlineTables = function(test) {
+ var str = fs.readFileSync(__dirname + "/inline_tables.toml", 'utf8');
+ test.parsesToml(str, {
+ name: {
+ first: "Tom",
+ last: "Preston-Werner"
+ },
+ point: {
+ x: 1,
+ y: 2
+ },
+ nested: {
+ x: {
+ a: {
+ b: 3
+ }
+ }
+ },
+ points: [
+ { x: 1, y: 2, z: 3 },
+ { x: 7, y: 8, z: 9 },
+ { x: 2, y: 4, z: 8 }
+ ],
+ arrays: [
+ { x: [1, 2, 3], y: [4, 5, 6] },
+ { x: [7, 8, 9], y: [0, 1, 2] }
+ ]
+ });
+ test.done();
+};
+
+exports.testEmptyInlineTables = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/24
+ var str = "a = { }";
+ test.parsesToml(str, {
+ a: {}
+ });
+ test.done();
+};
+
+exports.testKeyNamesWithWhitespaceAroundStartAndFinish = function(test) {
+ var str = "[ a ]\nb = 1";
+ test.parsesToml(str, {
+ a: {
+ b: 1
+ }
+ });
+ test.done();
+};
+
+exports.testKeyNamesWithWhitespaceAroundDots = function(test) {
+ var str = "[ a . b . c]\nd = 1";
+ test.parsesToml(str, {
+ a: {
+ b: {
+ c: {
+ d: 1
+ }
+ }
+ }
+ });
+ test.done();
+};
+
+exports.testSimpleQuotedKeyNames = function(test) {
+ var str = "[\"ʞ\"]\na = 1";
+ test.parsesToml(str, {
+ "ʞ": {
+ a: 1
+ }
+ });
+ test.done();
+};
+
+exports.testComplexQuotedKeyNames = function(test) {
+ var str = "[ a . \"ʞ\" . c ]\nd = 1";
+ test.parsesToml(str, {
+ a: {
+ "ʞ": {
+ c: {
+ d: 1
+ }
+ }
+ }
+ });
+ test.done();
+};
+
+exports.testEscapedQuotesInQuotedKeyNames = function(test) {
+ test.parsesToml("[\"the \\\"thing\\\"\"]\na = true", {
+ 'the "thing"': {
+ a: true
+ }
+ });
+ test.done();
+};
+
+exports.testMoreComplexQuotedKeyNames = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/21
+ test.parsesToml('["the\\ key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ "the\\ key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ });
+ test.parsesToml('[a."the\\ key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ a: {
+ "the\\ key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ }
+ });
+ test.parsesToml('[a."the-key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ a: {
+ "the-key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ }
+ });
+ test.parsesToml('[a."the.key"]\n\none = "one"\ntwo = 2\nthree = false', {
+ a: {
+ "the.key": {
+ one: "one",
+ two: 2,
+ three: false
+ }
+ }
+ });
+ // https://github.com/BinaryMuse/toml-node/issues/34
+ test.parsesToml('[table]\n\'a "quoted value"\' = "value"', {
+ table: {
+ 'a "quoted value"': "value"
+ }
+ });
+ // https://github.com/BinaryMuse/toml-node/issues/33
+ test.parsesToml('[module]\n"foo=bar" = "zzz"', {
+ module: {
+ "foo=bar": "zzz"
+ }
+ });
+
+ test.done();
+};
+
+exports.testErrorOnBadUnicode = function(test) {
+ var str = "str = \"My name is Jos\\uD800\"";
+ test.throws(function() {
+ toml.parse(str);
+ });
+ test.done();
+};
+
+exports.testErrorOnDotAtStartOfKey = function(test) {
+ test.throws(function() {
+ var str = "[.a]\nb = 1";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnDotAtEndOfKey = function(test) {
+ test.throws(function() {
+ var str = "[.a]\nb = 1";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnTableOverride = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\n\n[a]\nc = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnKeyOverride = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\n[a.b]\nc = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnKeyOverrideWithNested = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/23
+ test.throws(function() {
+ var str = "[a]\nb = \"a\"\n[a.b.c]";
+ toml.parse(str);
+ }, "existing key 'a.b'");
+ test.done();
+};
+
+exports.testErrorOnKeyOverrideWithArrayTable = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\n[[a]]\nc = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnKeyReplace = function(test) {
+ test.throws(function() {
+ var str = "[a]\nb = 1\nb = 2";
+ toml.parse(str);
+ });
+ test.done()
+};
+
+exports.testErrorOnInlineTableReplace = function(test) {
+ // https://github.com/BinaryMuse/toml-node/issues/25
+ test.throws(function() {
+ var str = "a = { b = 1 }\n[a]\nc = 2";
+ toml.parse(str);
+ }, "existing key 'a'");
+ test.done();
+};
+
+exports.testErrorOnArrayMismatch = function(test) {
+ test.throws(function() {
+ var str = 'data = [1, 2, "test"]'
+ toml.parse(str);
+ });
+ test.done();
+};
+
+exports.testErrorOnBadInputs = function(test) {
+ var count = 0;
+ for (i in badInputs) {
+ (function(num) {
+ test.throws(function() {
+ toml.parse(badInputs[num]);
+ });
+ })(i);
+ }
+ test.done();
+};
+
+exports.testErrorsHaveCorrectLineAndColumn = function(test) {
+ var str = "[a]\nb = 1\n [a.b]\nc = 2";
+ try { toml.parse(str); }
+ catch (e) {
+ test.equal(e.line, 3);
+ test.equal(e.column, 2);
+ test.done();
+ }
+};