Initial commit
This commit is contained in:
38
src/test/asserts.html
Normal file
38
src/test/asserts.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Test Asserts</title>
|
||||
<link rel="stylesheet" href="css/main.css" />
|
||||
<link rel="stylesheet" href="../css/wterminal.css" />
|
||||
|
||||
<script src="../js/wterminal.js"></script>
|
||||
<script src="../js/wterminal-autoextend.js"></script>
|
||||
|
||||
<script src="../js/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<button style="float: right;" title="Dark theme on/off" onclick="toggleTheme();">☀</button>
|
||||
<a href="/test/">WTerminal testing home</a>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<h1>Test Asserts:</h1>
|
||||
<div id="static-terminal"></div>
|
||||
<script>
|
||||
let term = new WTerminal("static", "static-terminal", null);
|
||||
term.terminalCommand("height 40em");
|
||||
term.clearOutput();
|
||||
</script>
|
||||
<script src="js/asserts.js"></script>
|
||||
<script src="js/test-asserts.js"></script>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p class="float-right">Author: Ward Truyen</p>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
99
src/test/css/main.css
Normal file
99
src/test/css/main.css
Normal file
@@ -0,0 +1,99 @@
|
||||
/* Author: Ward Truyen
|
||||
* Version: 1.3.0
|
||||
*/
|
||||
|
||||
html,
|
||||
body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
background: radial-gradient(ellipse at top, #8888ff, transparent),
|
||||
radial-gradient(ellipse at bottom, #ad9fff, transparent);
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main {
|
||||
margin: auto;
|
||||
width: 80%;
|
||||
border: 2px solid darkgreen;
|
||||
padding: 10px;
|
||||
background-color: white;
|
||||
box-shadow: 3px 3px 3px black;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 4px;
|
||||
margin-bottom: 8px;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
header {
|
||||
padding: 2px 16px 4px 16px;
|
||||
/* width: 100%; */
|
||||
border-bottom: 1px solid black;
|
||||
/* background-image: linear-gradient(#0000008f, #0000004f); */
|
||||
background-color: #80808080;
|
||||
/* linear-gradient(#0000008f, #0000004f);*/
|
||||
/* margin-top: 16px; */
|
||||
text-shadow: 1px 1px 1px #0000004f;
|
||||
}
|
||||
|
||||
header a {
|
||||
/* border: solid 1px black; */
|
||||
padding: 2px;
|
||||
margin: 1px;
|
||||
}
|
||||
|
||||
footer {
|
||||
padding: 8px 16px 4px 16px;
|
||||
/* width: 100%; */
|
||||
border-top: 1px solid black;
|
||||
/* background-color: #0000004f; */
|
||||
background-image: linear-gradient(#0000008f, #0000004f);
|
||||
/* margin-top: 16px; */
|
||||
margin-top: auto;
|
||||
text-shadow: 1px 1px 1px #0000004f;
|
||||
}
|
||||
|
||||
footer h1,
|
||||
footer h2,
|
||||
footer h3,
|
||||
footer p {
|
||||
display: inline;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.float-right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.text-red {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.button-red {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
.button-black {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
html.theme-dark {
|
||||
color-scheme: dark;
|
||||
background-image: linear-gradient(-10deg, #1010206F 60%, #5050506F);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.theme-dark>body>main {
|
||||
border: 1px solid darkgray;
|
||||
background-color: black;
|
||||
box-shadow: 3px 3px 5px #101010C0;
|
||||
}
|
||||
|
||||
.theme-dark>body>main>h1 {
|
||||
text-shadow: 0px 0px 3px blue, 2px 2px 6px;
|
||||
}
|
||||
|
38
src/test/index.html
Normal file
38
src/test/index.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>WTerminal test home</title>
|
||||
<link rel="stylesheet" href="css/main.css" />
|
||||
<!-- <link rel="stylesheet" href="../css/wterminal.css" /> -->
|
||||
|
||||
<!-- <script src="../wterminal.js"></script> -->
|
||||
<script src="../js/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<button style="float: right;" title="Dark theme on/off" onclick="toggleTheme();">☀</button>
|
||||
<a href="/test/">WTerminal testing home</a>
|
||||
<!-- <a href="splitToArguments.html">splitToArguments</a> -->
|
||||
<!-- <a href="asserts.html">Asserts</a> -->
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<h1>Tests:</h1>
|
||||
<div style="display: inline-block;">
|
||||
<a href="/test/test-all.html">Test All</a><br>
|
||||
<hr>
|
||||
<a href="/test/asserts.html">Test Asserts</a><br>
|
||||
<a href="/test/splitToArguments.html">Test WTerminal.splitToArguments</a><br>
|
||||
</div>
|
||||
<h2>Others:</h2>
|
||||
<a href="../index.html">WTerminal site home</a>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p class="float-right">Author: Ward Truyen</p>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
74
src/test/js/asserts.js
Normal file
74
src/test/js/asserts.js
Normal file
@@ -0,0 +1,74 @@
|
||||
/* Author: Ward Truyen
|
||||
* Version: 1.0.0
|
||||
* About: A tool for testing purposes
|
||||
*/
|
||||
|
||||
class Asserts {
|
||||
static runTest(name, testFunction, term, pre = " ", printStacktraceAndStop = true) {
|
||||
term.print(pre+name);
|
||||
try {
|
||||
testFunction();
|
||||
term.printLn(WTerminal.createElement("span", {style:"color: green;"}, " OK"));
|
||||
} catch (e) {
|
||||
term.printError(" failed: " + e.toString());
|
||||
if(printStacktraceAndStop){
|
||||
term.printLn(WTerminal.createElement("span", {style:"color: blue;"}, e.stack));
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Throws error when not true
|
||||
*/
|
||||
static isTrue(value) {
|
||||
if (value === true) return;
|
||||
throw new Error('assert isTrue failed');
|
||||
}
|
||||
|
||||
/* Throws error when not false
|
||||
*/
|
||||
static isFalse(value) {
|
||||
if (value === false) return;
|
||||
throw new Error('assert isFalse failed');
|
||||
}
|
||||
/* Throws error when not equal
|
||||
*/
|
||||
static isEqual(value1, value2) {
|
||||
if (Asserts._equals(value1, value2)) return;
|
||||
// if( typeof value1 === "object" || typeof value2 === "object") throw new Error('assert isEqual failed');
|
||||
throw new Error('assert isEqual failed\n' + value1 + " != " + value2);
|
||||
}
|
||||
|
||||
/* returns true when values/objects v1 and v2 are equal
|
||||
*/
|
||||
static _equals(v1, v2, _depth = 0) {
|
||||
if (v1 === v2) return true; // easy peasy
|
||||
let t = typeof v1
|
||||
if (t === "string" || v1 instanceof String && typeof v2 === "string" || v2 instanceof String) return v1.valueOf() === v2.valueOf(); // "Hello" equals to new String("Hello")
|
||||
if (t !== typeof v2 || v1.constructor.name !== v2.constructor.name) return false; // must be of identical type
|
||||
t += " " + v1.constructor.name;
|
||||
switch (t) {
|
||||
default: // Yet Unkown when i coded this?
|
||||
throw new Error("Todo: checking of type " + t);
|
||||
case 'boolean Boolean':
|
||||
case 'number Number':
|
||||
case 'object Date':
|
||||
return v1.valueOf() === v2.valueOf();
|
||||
case 'object Array':
|
||||
if (_depth > 4) throw Error("too deep");
|
||||
if (v1.length !== v2.length) return false;
|
||||
for (let i = 0; i < v1.length; i++) {
|
||||
if (Asserts._equals(v1[i], v2[i], _depth + 1) === false) return false;
|
||||
}
|
||||
return true;
|
||||
case 'object Object':
|
||||
if (_depth > 4) throw Error("too deep");
|
||||
const keys = Object.keys(v1);
|
||||
if (keys.length != Object.keys(v2).length) return false;
|
||||
for (let k in keys) {
|
||||
if (Asserts._equals(v1[k], v2[k], _depth + 1) === false) return false;
|
||||
}
|
||||
return true;
|
||||
}//-> switch (t)
|
||||
}//-> static equals(v1, v2)
|
||||
}//-> class Asserts
|
106
src/test/js/test-asserts.js
Normal file
106
src/test/js/test-asserts.js
Normal file
@@ -0,0 +1,106 @@
|
||||
{
|
||||
const term = getWTerminal();
|
||||
term.printLn("Testing Asserts");
|
||||
//isTrue testing
|
||||
Asserts.runTest(`Asserts.isTrue(true)`,
|
||||
() => {
|
||||
try {
|
||||
Asserts.isTrue(true);
|
||||
} catch (e) {
|
||||
throw new Error("Assserts.isTrue(true) failed", e);
|
||||
}
|
||||
}, term);
|
||||
Asserts.runTest(`Asserts.isTrue(false)`,
|
||||
() => {
|
||||
let throwsNoError = true;
|
||||
try {
|
||||
Asserts.isTrue(false);
|
||||
} catch (e) {
|
||||
throwsNoError = false;
|
||||
}
|
||||
if (throwsNoError) throw new Error("Assert.isTrue(false) does not throw Error");
|
||||
}, term);
|
||||
// Asserts.runTest('This test should fail', ()=>{throw new Error("To fail test")}, term);
|
||||
//isFalse testing
|
||||
Asserts.runTest(`Asserts.isFalse(false)`,
|
||||
() => {
|
||||
try {
|
||||
Asserts.isFalse(false);
|
||||
} catch (e) {
|
||||
throw new Error("Assserts.isFalse(false) failed", e);
|
||||
}
|
||||
}, term);
|
||||
Asserts.runTest(`Asserts.isFalse(true)`,
|
||||
() => {
|
||||
let throwsNoError = true;
|
||||
try {
|
||||
Asserts.isFalse(true);
|
||||
} catch (e) {
|
||||
throwsNoError = false;
|
||||
}
|
||||
if (throwsNoError) throw new Error("Assert.isFalse(true) does not throw Error");
|
||||
}, term);
|
||||
//isEqual testing
|
||||
Asserts.runTest(`Asserts.isEqual(true, true)`,
|
||||
() => {
|
||||
try {
|
||||
Asserts.isEqual(true, true);
|
||||
} catch (e) {
|
||||
throw new Error("Assserts.isEqual(true, true) failed", e);
|
||||
}
|
||||
}, term);
|
||||
Asserts.runTest(`Asserts.isEqual(true, false)`,
|
||||
() => {
|
||||
let throwsNoError = true;
|
||||
try {
|
||||
Asserts.isEqual(true, false);
|
||||
} catch (e) {
|
||||
throwsNoError = false;
|
||||
}
|
||||
if (throwsNoError) throw new Error("Assert.isEqual(true, false) does not throw Error");
|
||||
}, term);
|
||||
//_equals testing
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(null, 0))`,
|
||||
() => Asserts.isFalse(Asserts._equals(null, 0)), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(null, undefined))`,
|
||||
() => Asserts.isFalse(Asserts._equals(null, undefined)), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(false, true))`,
|
||||
() => Asserts.isFalse(Asserts._equals(false, true)), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(false, 0))`,
|
||||
() => Asserts.isFalse(Asserts._equals(false, 0)), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals(true, true))`,
|
||||
() => Asserts.isTrue(Asserts._equals(true, true)), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(true, 1))`,
|
||||
() => Asserts.isFalse(Asserts._equals(true, 1)), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(0, '0'))`,
|
||||
() => Asserts.isFalse(Asserts._equals(0, '0')), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(0, 1))`,
|
||||
() => Asserts.isFalse(Asserts._equals(0, 1)), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals(1, 1))`,
|
||||
() => Asserts.isTrue(Asserts._equals(1, 1)), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(1, '1'))`,
|
||||
() => Asserts.isFalse(Asserts._equals(1, '1')), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals(Math.PI, Math.PI))`,
|
||||
() => Asserts.isTrue(Asserts._equals(Math.PI, Math.PI)), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals("Hello", "Hello"))`,
|
||||
() => Asserts.isTrue(Asserts._equals("Hello", "Hello")), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals("Hello", new String("Hello")))`,
|
||||
() => Asserts.isTrue(Asserts._equals("Hello", new String("Hello"))), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals("Hello", "hello"))`,
|
||||
() => Asserts.isFalse(Asserts._equals("Hello", "hello")), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals(["Hello", 1], ["Hello", 1]))`,
|
||||
() => Asserts.isTrue(Asserts._equals(["Hello", 1], ["Hello", 1])), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals(["Hello", 1], [1, "Hello"]))`,
|
||||
() => Asserts.isFalse(Asserts._equals(["Hello", 1], [1, "Hello"])), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals({}, {}))`,
|
||||
() => Asserts.isTrue(Asserts._equals({}, {})), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals({ a: "Hello", b: 1 }, { a: "Hello", b: 1 }))`,
|
||||
() => Asserts.isTrue(Asserts._equals({ a: "Hello", b: 1 }, { a: "Hello", b: 1 })), term);
|
||||
Asserts.runTest(`Asserts.isTrue(Asserts._equals({ a: "Hello", b: 1 }, { b: 1, a: "Hello" }))`,
|
||||
() => Asserts.isTrue(Asserts._equals({ a: "Hello", b: 1 }, { b: 1, a: "Hello" })), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals({ a: "Hello", b: 1 }, { b: 1, a: "Hello", c: undefined }))`,
|
||||
() => Asserts.isFalse(Asserts._equals({ a: "Hello", b: 1 }, { b: 1, a: "Hello", c: undefined })), term);
|
||||
Asserts.runTest(`Asserts.isFalse(Asserts._equals({ a: "Hello", b: 1 }, { b: 1, a: "Hello", c: null }))`,
|
||||
() => Asserts.isFalse(Asserts._equals({ a: "Hello", b: 1 }, { b: 1, a: "Hello", c: null })), term);
|
||||
term.printLn("Asserts OK");
|
||||
}
|
20
src/test/js/test-splitToArguments.js
Normal file
20
src/test/js/test-splitToArguments.js
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
const term = getWTerminal();
|
||||
term.printLn("Testing WTerminal.splitToArguments");
|
||||
Asserts.runTest(`Asserts.isEqual(WTerminal.splitToArguments("hello world"), ["hello", "world"]);`,
|
||||
() => Asserts.isEqual(WTerminal.splitToArguments("hello world"), ["hello", "world"]), term);
|
||||
Asserts.runTest(`Asserts.isEqual(WTerminal.splitToArguments("hello 1"), ["hello", "1"])`,
|
||||
() => Asserts.isEqual(WTerminal.splitToArguments("hello 1"), ["hello", "1"]), term);
|
||||
Asserts.runTest(`Asserts.isEqual(WTerminal.splitToArguments('"hello world" 1'), ["hello world", "1"])`,
|
||||
() => Asserts.isEqual(WTerminal.splitToArguments('"hello world" 1'), ["hello world", "1"]), term);
|
||||
Asserts.runTest(`Asserts.isEqual(WTerminal.splitToArguments("'hello world' 1"), ["hello world", "1"])`,
|
||||
() => Asserts.isEqual(WTerminal.splitToArguments("'hello world' 1"), ["hello world", "1"]), term);
|
||||
// Asserts.runTest('This test should fail', ()=>{throw new Error("To fail test")}, term);
|
||||
Asserts.runTest(`Asserts.isEqual(WTerminal.splitToArguments("\`hello world\` 1"), ["hello world", "1"])`,
|
||||
() => Asserts.isEqual(WTerminal.splitToArguments("`hello world` 1"), ["hello world", "1"]), term);
|
||||
Asserts.runTest(`Asserts.isEqual(WTerminal.splitToArguments("-rf /css/test.css myKitty.js 'my name with spaces'"),
|
||||
["-rf", "/css/test.css", "myKitty.js", "my name with spaces"])`,
|
||||
() => Asserts.isEqual(WTerminal.splitToArguments("-rf /css/test.css myKitty.js 'my name with spaces'"),
|
||||
["-rf", "/css/test.css", "myKitty.js", "my name with spaces"]), term);
|
||||
term.printLn("WTerminal.splitToArguments OK");
|
||||
}
|
38
src/test/splitToArguments.html
Normal file
38
src/test/splitToArguments.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Test WTerminal.splitToArguements</title>
|
||||
<link rel="stylesheet" href="css/main.css" />
|
||||
<link rel="stylesheet" href="../css/wterminal.css" />
|
||||
|
||||
<script src="../js/wterminal.js"></script>
|
||||
<script src="../js/wterminal-autoextend.js"></script>
|
||||
|
||||
<script src="../js/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<button style="float: right;" title="Dark theme on/off" onclick="toggleTheme();">☀</button>
|
||||
<a href="/test/">WTerminal testing home</a>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<h1>Test WTerminal.splitToArguements:</h1>
|
||||
<div id="static-terminal"></div>
|
||||
<script>
|
||||
let term = new WTerminal("static", "static-terminal", null);
|
||||
term.terminalCommand("height 40em");
|
||||
term.clearOutput();
|
||||
</script>
|
||||
<script src="js/asserts.js"></script>
|
||||
<script src="js/test-splitToArguments.js"></script>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p class="float-right">Author: Ward Truyen</p>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
39
src/test/test-all.html
Normal file
39
src/test/test-all.html
Normal file
@@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Test all</title>
|
||||
<link rel="stylesheet" href="css/main.css" />
|
||||
<link rel="stylesheet" href="../css/wterminal.css" />
|
||||
|
||||
<script src="../js/wterminal.js"></script>
|
||||
<script src="../js/wterminal-autoextend.js"></script>
|
||||
|
||||
<script src="../js/theme.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<button style="float: right;" title="Dark theme on/off" onclick="toggleTheme();">☀</button>
|
||||
<a href="/test/">WTerminal testing home</a>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<h1>Test all:</h1>
|
||||
<div id="static-terminal"></div>
|
||||
<script>
|
||||
let term = new WTerminal("static", "static-terminal", null);
|
||||
term.terminalCommand("height 40em");
|
||||
term.clearOutput();
|
||||
</script>
|
||||
<script src="js/asserts.js"></script>
|
||||
<script src="js/test-asserts.js"></script>
|
||||
<script src="js/test-splitToArguments.js"></script>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p class="float-right">Author: Ward Truyen</p>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
Reference in New Issue
Block a user