Skip to content
Snippets Groups Projects
Commit 8ea6a7e3 authored by André Bargull's avatar André Bargull
Browse files

Replace runTestCase with assert helpers [test/built-ins/JSON]

parent bec87829
No related branches found
No related tags found
No related merge requests found
Showing
with 36 additions and 125 deletions
...@@ -8,13 +8,8 @@ info: > ...@@ -8,13 +8,8 @@ info: >
4.2 calls out JSON as one of the built-in objects. 4.2 calls out JSON as one of the built-in objects.
es5id: 15.12-0-1 es5id: 15.12-0-1
description: JSON must be a built-in object description: JSON must be a built-in object
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var o = JSON; var o = JSON;
if (typeof(o) === "object") {
return true; assert.sameValue(typeof(o), "object", 'typeof(o)');
}
}
runTestCase(testcase);
...@@ -10,18 +10,13 @@ info: > ...@@ -10,18 +10,13 @@ info: >
JSON, and we should not be able to enumerate them. JSON, and we should not be able to enumerate them.
es5id: 15.12-0-4 es5id: 15.12-0-4
description: JSON object's properties must be non enumerable description: JSON object's properties must be non enumerable
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var o = JSON; var o = JSON;
var i = 0; var i = 0;
for (var p in o) { for (var p in o) {
i++; i++;
} }
if (i === 0) {
return true; assert.sameValue(i, 0, 'i');
}
}
runTestCase(testcase);
...@@ -4,16 +4,10 @@ ...@@ -4,16 +4,10 @@
/*--- /*---
es5id: 15.12.1.1-0-9 es5id: 15.12.1.1-0-9
description: Whitespace characters can appear before/after any JSONtoken description: Whitespace characters can appear before/after any JSONtoken
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
JSON.parse('\t\r \n{\t\r \n'+ JSON.parse('\t\r \n{\t\r \n'+
'"property"\t\r \n:\t\r \n{\t\r \n}\t\r \n,\t\r \n' + '"property"\t\r \n:\t\r \n{\t\r \n}\t\r \n,\t\r \n' +
'"prop2"\t\r \n:\t\r \n'+ '"prop2"\t\r \n:\t\r \n'+
'[\t\r \ntrue\t\r \n,\t\r \nnull\t\r \n,123.456\t\r \n]'+ '[\t\r \ntrue\t\r \n,\t\r \nnull\t\r \n,123.456\t\r \n]'+
'\t\r \n}\t\r \n'); // should JOSN parse without error '\t\r \n}\t\r \n'); // should JOSN parse without error
return true;
}
runTestCase(testcase);
...@@ -15,14 +15,8 @@ info: > ...@@ -15,14 +15,8 @@ info: >
taking 2 parameters. taking 2 parameters.
es5id: 15.12.2-0-1 es5id: 15.12.2-0-1
description: JSON.parse must exist as a function description: JSON.parse must exist as a function
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var f = JSON.parse; var f = JSON.parse;
if (typeof(f) === "function") { assert.sameValue(typeof(f), "function", 'typeof(f)');
return true;
}
}
runTestCase(testcase);
...@@ -15,14 +15,9 @@ info: > ...@@ -15,14 +15,9 @@ info: >
taking 2 parameters. taking 2 parameters.
es5id: 15.12.2-0-2 es5id: 15.12.2-0-2
description: JSON.parse must exist as a function taking 2 parameters description: JSON.parse must exist as a function taking 2 parameters
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var f = JSON.parse; var f = JSON.parse;
if (typeof(f) === "function" && f.length === 2) { assert.sameValue(typeof(f), "function", 'typeof(f)');
return true; assert.sameValue(f.length, 2, 'f.length');
}
}
runTestCase(testcase);
...@@ -8,12 +8,9 @@ info: > ...@@ -8,12 +8,9 @@ info: >
should be able to delete (8.6.2.5) the stringify and parse properties. should be able to delete (8.6.2.5) the stringify and parse properties.
es5id: 15.12.2-0-3 es5id: 15.12.2-0-3
description: JSON.parse must be deletable (configurable) description: JSON.parse must be deletable (configurable)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var o = JSON; var o = JSON;
var desc = Object.getOwnPropertyDescriptor(o, "parse"); var desc = Object.getOwnPropertyDescriptor(o, "parse");
return desc.configurable === true;
} assert.sameValue(desc.configurable, true, 'desc.configurable');
runTestCase(testcase);
...@@ -15,14 +15,8 @@ info: > ...@@ -15,14 +15,8 @@ info: >
taking 3 parameters. taking 3 parameters.
es5id: 15.12.3-0-1 es5id: 15.12.3-0-1
description: JSON.stringify must exist as be a function description: JSON.stringify must exist as be a function
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var f = JSON.stringify; var f = JSON.stringify;
if (typeof(f) === "function") { assert.sameValue(typeof(f), "function", 'typeof(f)');
return true;
}
}
runTestCase(testcase);
...@@ -15,14 +15,9 @@ info: > ...@@ -15,14 +15,9 @@ info: >
taking 3 parameters. taking 3 parameters.
es5id: 15.12.3-0-2 es5id: 15.12.3-0-2
description: JSON.stringify must exist as be a function taking 3 parameters description: JSON.stringify must exist as be a function taking 3 parameters
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var f = JSON.stringify; var f = JSON.stringify;
if (typeof(f) === "function" && f.length === 3) { assert.sameValue(typeof(f), "function", 'typeof(f)');
return true; assert.sameValue(f.length, 3, 'f.length');
}
}
runTestCase(testcase);
...@@ -8,14 +8,9 @@ info: > ...@@ -8,14 +8,9 @@ info: >
should be able to delete (8.6.2.5) the stringify and parse properties. should be able to delete (8.6.2.5) the stringify and parse properties.
es5id: 15.12.3-0-3 es5id: 15.12.3-0-3
description: JSON.stringify must be deletable (configurable) description: JSON.stringify must be deletable (configurable)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var o = JSON; var o = JSON;
var desc = Object.getOwnPropertyDescriptor(o, "stringify"); var desc = Object.getOwnPropertyDescriptor(o, "stringify");
if (desc.configurable === true) {
return true; assert.sameValue(desc.configurable, true, 'desc.configurable');
}
}
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property name is the JSON.stringify - stringifying an object where property name is the
union of all null character (The abstract operation Quote(value) union of all null character (The abstract operation Quote(value)
step 2.c) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F": "John" }); var str = JSON.stringify({ "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F": "John" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property name starts JSON.stringify - stringifying an object where property name starts
with the union of all null character (The abstract operation with the union of all null character (The abstract operation
Quote(value) step 2.c) Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fname": "John" }); var str = JSON.stringify({ "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fname": "John" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property name ends JSON.stringify - stringifying an object where property name ends
with the union of all null character (The abstract operation with the union of all null character (The abstract operation
Quote(value) step 2.c) Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "name\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F": "John" }); var str = JSON.stringify({ "name\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F": "John" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property name starts JSON.stringify - stringifying an object where property name starts
and ends with the union of all null character (The abstract and ends with the union of all null character (The abstract
operation Quote(value) step 2.c) operation Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fname\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F": "John" }); var str = JSON.stringify({ "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fname\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F": "John" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1 && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1 && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property name JSON.stringify - stringifying an object where property name
middles with the union of all null character (The abstract middles with the union of all null character (The abstract
operation Quote(value) step 2.c) operation Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "na\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fme": "John" }); var str = JSON.stringify({ "na\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fme": "John" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property value is JSON.stringify - stringifying an object where property value is
the union of all null character (The abstract operation the union of all null character (The abstract operation
Quote(value) step 2.c) Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "name": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" }); var str = JSON.stringify({ "name": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property value JSON.stringify - stringifying an object where property value
starts with the union of all null character (The abstract starts with the union of all null character (The abstract
operation Quote(value) step 2.c) operation Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "name": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001FJohn" }); var str = JSON.stringify({ "name": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001FJohn" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property value ends JSON.stringify - stringifying an object where property value ends
with the union of all null character (The abstract operation with the union of all null character (The abstract operation
Quote(value) step 2.c) Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "name": "John\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" }); var str = JSON.stringify({ "name": "John\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property value JSON.stringify - stringifying an object where property value
starts and ends with the union of all null character (The abstract starts and ends with the union of all null character (The abstract
operation Quote(value) step 2.c) operation Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "name": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001FJohn\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" }); var str = JSON.stringify({ "name": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001FJohn\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1 && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1 && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -7,11 +7,8 @@ description: > ...@@ -7,11 +7,8 @@ description: >
JSON.stringify - stringifying an object where property value JSON.stringify - stringifying an object where property value
middles with the union of all null character (The abstract middles with the union of all null character (The abstract
operation Quote(value) step 2.c) operation Quote(value) step 2.c)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var result = true; var result = true;
var expectedNullChars = new Array(); var expectedNullChars = new Array();
...@@ -53,6 +50,5 @@ function testcase() { ...@@ -53,6 +50,5 @@ function testcase() {
var str = JSON.stringify({ "name": "Jo\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fhn" }); var str = JSON.stringify({ "name": "Jo\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001Fhn" });
result = (result && str.indexOf(expectedNullChars[index]) !== -1 && str.indexOf(expectedNullChars[index]) !== -1); result = (result && str.indexOf(expectedNullChars[index]) !== -1 && str.indexOf(expectedNullChars[index]) !== -1);
} }
return result;
} assert(result, 'result !== true');
runTestCase(testcase);
...@@ -6,16 +6,13 @@ es5id: 15.12.3-11-26 ...@@ -6,16 +6,13 @@ es5id: 15.12.3-11-26
description: > description: >
JSON.stringify - the last element of the concatenation is ']' (The JSON.stringify - the last element of the concatenation is ']' (The
abstract operation JA(value) step 10.b.iii) abstract operation JA(value) step 10.b.iii)
includes: [runTestCase.js]
---*/ ---*/
function testcase() {
var arrObj = []; var arrObj = [];
arrObj[0] = "a"; arrObj[0] = "a";
arrObj[1] = "b"; arrObj[1] = "b";
arrObj[2] = "c"; arrObj[2] = "c";
var jsonText = JSON.stringify(arrObj, undefined, "").toString(); var jsonText = JSON.stringify(arrObj, undefined, "").toString();
return jsonText.charAt(jsonText.length - 1) === "]";
} assert.sameValue(jsonText.charAt(jsonText.length - 1), "]", 'jsonText.charAt(jsonText.length - 1)');
runTestCase(testcase);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment