forked from cory/tildefriends
		
	That's all of the tests.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3653 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		| @@ -93,6 +93,7 @@ static JSValue _database_get(JSContext* context, JSValueConst this_val, int argc | |||||||
| 				sqlite3_step(statement) == SQLITE_ROW) { | 				sqlite3_step(statement) == SQLITE_ROW) { | ||||||
| 				entry = JS_NewStringLen(context, (const char*)sqlite3_column_text(statement, 0), sqlite3_column_bytes(statement, 0)); | 				entry = JS_NewStringLen(context, (const char*)sqlite3_column_text(statement, 0), sqlite3_column_bytes(statement, 0)); | ||||||
| 			} | 			} | ||||||
|  | 			JS_FreeCString(context, keyString); | ||||||
| 			sqlite3_finalize(statement); | 			sqlite3_finalize(statement); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -113,6 +114,8 @@ JSValue _database_set(JSContext* context, JSValueConst this_val, int argc, JSVal | |||||||
| 				sqlite3_bind_text(statement, 3, valueString, valueLength, NULL) == SQLITE_OK && | 				sqlite3_bind_text(statement, 3, valueString, valueLength, NULL) == SQLITE_OK && | ||||||
| 				sqlite3_step(statement) == SQLITE_OK) { | 				sqlite3_step(statement) == SQLITE_OK) { | ||||||
| 			} | 			} | ||||||
|  | 			JS_FreeCString(context, keyString); | ||||||
|  | 			JS_FreeCString(context, valueString); | ||||||
| 			sqlite3_finalize(statement); | 			sqlite3_finalize(statement); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -130,6 +133,7 @@ JSValue _database_remove(JSContext* context, JSValueConst this_val, int argc, JS | |||||||
| 				sqlite3_bind_text(statement, 2, keyString, keyLength, NULL) == SQLITE_OK && | 				sqlite3_bind_text(statement, 2, keyString, keyLength, NULL) == SQLITE_OK && | ||||||
| 				sqlite3_step(statement) == SQLITE_OK) { | 				sqlite3_step(statement) == SQLITE_OK) { | ||||||
| 			} | 			} | ||||||
|  | 			JS_FreeCString(context, keyString); | ||||||
| 			sqlite3_finalize(statement); | 			sqlite3_finalize(statement); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
							
								
								
									
										348
									
								
								src/tests.c
									
									
									
									
									
								
							
							
						
						
									
										348
									
								
								src/tests.c
									
									
									
									
									
								
							| @@ -134,6 +134,345 @@ static void _test_promise_remote_throw(const char* exe_path) | |||||||
| 	unlink("out/child.js"); | 	unlink("out/child.js"); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void _test_promise_remote_reject(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"var task = new Task();\n" | ||||||
|  | 		"task.activate();\n" | ||||||
|  | 		"task.execute({name: 'child.js', source: utf8Decode(File.readFile('out/child.js'))}).then(function() {\n" | ||||||
|  | 		"	task.getExports().then(function(exp) {\n" | ||||||
|  | 		"		return exp.add(1, 1);\n" | ||||||
|  | 		"	}).then(function(sum) {\n" | ||||||
|  | 		"		exit(1);\n" | ||||||
|  | 		"	}).catch(function(error) {\n" | ||||||
|  | 		"		print('Caught: ' + error.message);\n" | ||||||
|  | 		"		if (error.stack) {\n" | ||||||
|  | 		"			print('stack: ' + error.stack);\n" | ||||||
|  | 		"		}\n" | ||||||
|  | 		"		exit(0);\n" | ||||||
|  | 		"	});\n" | ||||||
|  | 		"}).catch(function(e) {\n" | ||||||
|  | 		"	print('caught', e.message);\n" | ||||||
|  | 		"});\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	file = fopen("out/child.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"exports = {\n" | ||||||
|  | 		"	add: function(left, right) {\n" | ||||||
|  | 		"		return new Promise(function(resolve, reject) {\n" | ||||||
|  | 		"			reject(new Error('oops'));\n" | ||||||
|  | 		"		});\n" | ||||||
|  | 		"	}\n" | ||||||
|  | 		"}\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | 	unlink("out/child.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_database(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"var db = new Database('testdb');\n" | ||||||
|  | 		"if (db.get('a')) {\n" | ||||||
|  | 		"	exit(1);\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"db.set('a', 1);\n" | ||||||
|  | 		"if (db.get('a') != 1) {\n" | ||||||
|  | 		"	exit(2);\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"db.set('b', 2);\n" | ||||||
|  | 		"db.set('c', 3);\n" | ||||||
|  | 		"\n" | ||||||
|  | 		"var expected = ['a', 'b', 'c'];\n" | ||||||
|  | 		"var have = db.getAll();\n" | ||||||
|  | 		"for (var i = 0; i < have.length; i++) {\n" | ||||||
|  | 		"	var item = have[i];\n" | ||||||
|  | 		"	if (expected.indexOf(item) == -1) {\n" | ||||||
|  | 		"		print('Did not find ' + item + ' in db.');\n" | ||||||
|  | 		"		exit(3);\n" | ||||||
|  | 		"	} else {\n" | ||||||
|  | 		"		expected.splice(expected.indexOf(item), 1);\n" | ||||||
|  | 		"	}\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"if (expected.length) {\n" | ||||||
|  | 		"	print('Expected but did not find: ' + JSON.stringify(expected));\n" | ||||||
|  | 		"	exit(4);\n" | ||||||
|  | 		"}\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	unlink("out/testdb.sqlite"); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 --db-path=out/testdb.sqlite -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | 	unlink("out/testdb.sqlite"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_this(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"var task = new Task();\n" | ||||||
|  | 		"task.activate.bind(null).apply();\n" | ||||||
|  | 		"exit(0);\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_await(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"print('hi');\n" | ||||||
|  |  | ||||||
|  | 		"function foobar() {\n" | ||||||
|  | 		"	return new Promise(function (resolve, reject) {\n" | ||||||
|  | 		"		resolve(10);\n" | ||||||
|  | 		"	});\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"\n" | ||||||
|  | 		"async function huh() {\n" | ||||||
|  | 		"	let v = await foobar();\n" | ||||||
|  | 		"	print('v => ' + v);\n" | ||||||
|  | 		"	if (v != 10) {\n" | ||||||
|  | 		"		throw new Error('nope');\n" | ||||||
|  | 		"	}\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_require(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"if (require('required').foo() != 12345) {\n" | ||||||
|  | 		"	exit(1);\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"var gotError = false;\n" | ||||||
|  | 		"try {\n" | ||||||
|  | 		"	require('missing');\n" | ||||||
|  | 		"} catch (error) {\n" | ||||||
|  | 		"	print('nope');\n" | ||||||
|  | 		"	gotError = true;\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"if (!gotError) {\n" | ||||||
|  | 		"	exit(2);\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"exit(0);\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	file = fopen("out/required.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"function foo() {\n" | ||||||
|  | 		"	return 12345;\n" | ||||||
|  | 		"}\n" | ||||||
|  | 		"exports.foo = foo;\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | 	unlink("out/required.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_exit(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, "require('blah');"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	file = fopen("out/blah.js", "w"); | ||||||
|  | 	fprintf(file, "\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | 	unlink("out/blah.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_icu(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"print('Hi');\n" | ||||||
|  | 		"print(parseInt('3').toLocaleString());\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_uint8array(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"var task = new Task();\n" | ||||||
|  | 		"task.onExit = function() {\n" | ||||||
|  | 		"	print('child exited');\n" | ||||||
|  | 		"};\n" | ||||||
|  | 		"task.activate();\n" | ||||||
|  | 		"task.execute({name: 'child.js', source: utf8Decode(File.readFile('out/child.js'))}).then(async function() {\n" | ||||||
|  | 		"	print('child started');\n" | ||||||
|  | 		"	var input = new Uint8Array(10);\n" | ||||||
|  | 		"	for (var i = 0; i < 10; i++) {\n" | ||||||
|  | 		"		input[i] = i;\n" | ||||||
|  | 		"	}\n" | ||||||
|  | 		"	var test = (await task.getExports()).test;\n" | ||||||
|  | 		"	var output = new Uint8Array(await test(input));\n" | ||||||
|  | 		"	print('input', input, input.length, input.byteLength);\n" | ||||||
|  | 		"	print('output', output, output.length, output.byteLength);\n" | ||||||
|  | 		"	for (var i = 0; i < 10; i++) {\n" | ||||||
|  | 		"		print(output[i]);\n" | ||||||
|  | 		"		if (output[i] != i) {\n" | ||||||
|  | 		"			print('output[' + i + '] == ' + output[i]);\n" | ||||||
|  | 		"			exit(1);\n" | ||||||
|  | 		"		}\n" | ||||||
|  | 		"	}\n" | ||||||
|  | 		"	exit(0);\n" | ||||||
|  | 		"});\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	file = fopen("out/child.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"exports = {\n" | ||||||
|  | 		"	test: function(data) {\n" | ||||||
|  | 		"		return data;\n" | ||||||
|  | 		"	}\n" | ||||||
|  | 		"}\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | 	unlink("out/child.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void _test_socket(const char* exe_path) | ||||||
|  | { | ||||||
|  | 	FILE* file = fopen("out/test.js", "w"); | ||||||
|  | 	fprintf(file, | ||||||
|  | 		"'use strict';\n" | ||||||
|  | 		"\n" | ||||||
|  | 		"var s = new Socket();\n" | ||||||
|  | 		"print('connecting');\n" | ||||||
|  | 		"print('before connect', s.isConnected);\n" | ||||||
|  | 		"s.onError(function(e) {\n" | ||||||
|  | 		"	print(e);\n" | ||||||
|  | 		"});\n" | ||||||
|  | 		"print('noDelay', s.noDelay);\n" | ||||||
|  | 		"s.noDelay = true;\n" | ||||||
|  | 		"s.connect('www.unprompted.com', 80).then(function() {\n" | ||||||
|  | 		"	print('connected', s.isConnected);\n" | ||||||
|  | 		"	print(s.peerName);\n" | ||||||
|  | 		"	s.read(function(data) {\n" | ||||||
|  | 		"		print('read', data.length);\n" | ||||||
|  | 		"	});\n" | ||||||
|  | 		"	s.write('GET / HTTP/1.0\\r\\n\\r\\n');\n" | ||||||
|  | 		"}).then(function() {\n" | ||||||
|  | 		"	print('closed');\n" | ||||||
|  | 		"});\n" | ||||||
|  | 		"\n" | ||||||
|  | 		"var s2 = new Socket();\n" | ||||||
|  | 		"print('connecting');\n" | ||||||
|  | 		"print('before connect', s2.isConnected);\n" | ||||||
|  | 		"s2.onError(function(e) {\n" | ||||||
|  | 		"	print('error');\n" | ||||||
|  | 		"	print(e);\n" | ||||||
|  | 		"});\n" | ||||||
|  | 		"print('noDelay', s2.noDelay);\n" | ||||||
|  | 		"s2.noDelay = true;\n" | ||||||
|  | 		"s2.connect('www.unprompted.com', 443).then(function() {\n" | ||||||
|  | 		"	print('connected');\n" | ||||||
|  | 		"	s2.read(function(data) {\n" | ||||||
|  | 		"		print('read', data.length);\n" | ||||||
|  | 		"	});\n" | ||||||
|  | 		"	return s2.startTls();\n" | ||||||
|  | 		"}).then(function() {\n" | ||||||
|  | 		"	print('ready');\n" | ||||||
|  | 		"	print(s2.peerName);\n" | ||||||
|  | 		"	s2.write('GET / HTTP/1.0\\r\\nConnection: close\\r\\n\\r\\n').then(function() {\n" | ||||||
|  | 		"		s2.shutdown();\n" | ||||||
|  | 		"	});\n" | ||||||
|  | 		"}).catch(function(e) {\n" | ||||||
|  | 		"	printf('caught');\n" | ||||||
|  | 		"	print(e);\n" | ||||||
|  | 		"});\n"); | ||||||
|  | 	fclose(file); | ||||||
|  |  | ||||||
|  | 	char command[256]; | ||||||
|  | 	snprintf(command, sizeof(command), "%s run --ssb-port=0 -s out/test.js", exe_path); | ||||||
|  | 	printf("%s\n", command); | ||||||
|  | 	int result = system(command); | ||||||
|  | 	printf("returned %d\n", WEXITSTATUS(result)); | ||||||
|  | 	assert(WIFEXITED(result)); | ||||||
|  | 	assert(WEXITSTATUS(result) == 0); | ||||||
|  |  | ||||||
|  | 	unlink("out/test.js"); | ||||||
|  | } | ||||||
|  |  | ||||||
| void tf_tests(const char* exe_path) | void tf_tests(const char* exe_path) | ||||||
| { | { | ||||||
| 	tf_ssb_test(); | 	tf_ssb_test(); | ||||||
| @@ -141,5 +480,14 @@ void tf_tests(const char* exe_path) | |||||||
| 	_test_child(exe_path); | 	_test_child(exe_path); | ||||||
| 	_test_promise(exe_path); | 	_test_promise(exe_path); | ||||||
| 	_test_promise_remote_throw(exe_path); | 	_test_promise_remote_throw(exe_path); | ||||||
|  | 	_test_promise_remote_reject(exe_path); | ||||||
|  | 	_test_database(exe_path); | ||||||
|  | 	_test_this(exe_path); | ||||||
|  | 	_test_await(exe_path); | ||||||
|  | 	_test_require(exe_path); | ||||||
|  | 	_test_exit(exe_path); | ||||||
|  | 	_test_icu(exe_path); | ||||||
|  | 	_test_uint8array(exe_path); | ||||||
|  | 	_test_socket(exe_path); | ||||||
| 	printf("Tests completed.\n"); | 	printf("Tests completed.\n"); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,29 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| var task = new Task(); |  | ||||||
| task.activate(); |  | ||||||
| task.execute({name: "child.js", source: File.readFile("child.js")}).then(function() { |  | ||||||
| 	task.getExports().then(function(exports) { |  | ||||||
| 		return exports.add(1, 1); |  | ||||||
| 	}).then(function(sum) { |  | ||||||
| 		exit(1); |  | ||||||
| 	}).catch(function(error) { |  | ||||||
| 		print(error); |  | ||||||
| 		print("Caught: " + error.message); |  | ||||||
| 		exit(0); |  | ||||||
| 	}); |  | ||||||
| }); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| cat > child.js << EOF |  | ||||||
| exports = { |  | ||||||
| 	add: function(left, right) { |  | ||||||
| 		return new Promise(function(resolve, reject) { |  | ||||||
| 			reject(new Error("oops")); |  | ||||||
| 		}); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| mkdir testdb |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| var db = new Database("testdb"); |  | ||||||
| if (db.get("a")) { |  | ||||||
| 	exit(1); |  | ||||||
| } |  | ||||||
| db.set("a", 1); |  | ||||||
| if (db.get("a") != 1) { |  | ||||||
| 	exit(1); |  | ||||||
| } |  | ||||||
| db.set("b", 2); |  | ||||||
| db.set("c", 3); |  | ||||||
|  |  | ||||||
| var expected = ['a', 'b', 'c']; |  | ||||||
| var have = db.getAll(); |  | ||||||
| for (var i = 0; i < have.length; i++) { |  | ||||||
| 	var item = have[i]; |  | ||||||
| 	if (expected.indexOf(item) == -1) { |  | ||||||
| 		print("Did not find " + item + " in db."); |  | ||||||
| 		exit(2); |  | ||||||
| 	} else { |  | ||||||
| 		expected.splice(expected.indexOf(item), 1); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| if (expected.length) { |  | ||||||
| 	print("Expected but did not find: " + JSON.stringify(expected)); |  | ||||||
| 	exit(3); |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| var task = new Task(); |  | ||||||
| task.activate.bind(null).apply(); |  | ||||||
| exit(0); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| print("hi"); |  | ||||||
|  |  | ||||||
| function foobar() { |  | ||||||
| 	return new Promise(function (resolve, reject) { |  | ||||||
| 		resolve(10); |  | ||||||
| 	}); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| async function huh() { |  | ||||||
| 	let v = await foobar(); |  | ||||||
| 	print("v => " + v); |  | ||||||
| 	if (v != 10) { |  | ||||||
| 		throw new Error("nope"); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| huh(); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,28 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cat > required.js << EOF |  | ||||||
| function foo() { |  | ||||||
| 	return 12345; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| exports.foo = foo; |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| if (require("required").foo() != 12345) { |  | ||||||
| 	exit(1); |  | ||||||
| } |  | ||||||
| var gotError = false; |  | ||||||
| try { |  | ||||||
| 	require("missing"); |  | ||||||
| } catch (error) { |  | ||||||
| 	print("nope"); |  | ||||||
| 	gotError = true; |  | ||||||
| } |  | ||||||
| if (!gotError) { |  | ||||||
| 	exit(2); |  | ||||||
| } |  | ||||||
| exit(0); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,10 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cat > blah.js << EOF |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| require("blah"); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| cat > test.js << EOF |  | ||||||
| print("Hi"); |  | ||||||
| print(parseInt("3").toLocaleString()); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,38 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| var task = new Task(); |  | ||||||
| task.onExit = function() { |  | ||||||
| 	print("child exited"); |  | ||||||
| }; |  | ||||||
| task.activate(); |  | ||||||
| task.execute({name: "child.js", source: utf8Decode(File.readFile("child.js"))}).then(async function() { |  | ||||||
| 	print("child started"); |  | ||||||
| 	var input = new Uint8Array(10); |  | ||||||
| 	for (var i = 0; i < 10; i++) { |  | ||||||
| 		input[i] = i; |  | ||||||
| 	} |  | ||||||
| 	var test = (await task.getExports()).test; |  | ||||||
| 	var output = new Uint8Array(await test(input)); |  | ||||||
| 	print("input", input, input.length, input.byteLength); |  | ||||||
| 	print("output", output, output.length, output.byteLength); |  | ||||||
| 	for (var i = 0; i < 10; i++) { |  | ||||||
| 		print(output[i]); |  | ||||||
| 		if (output[i] != i) { |  | ||||||
| 			print("output[" + i + "] == " + output[i]); |  | ||||||
| 			exit(1); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	exit(0); |  | ||||||
| }); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| cat > child.js << EOF |  | ||||||
| exports = { |  | ||||||
| 	test: function(data) { |  | ||||||
| 		return data; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,52 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| cat > test.js << EOF |  | ||||||
| "use strict"; |  | ||||||
|  |  | ||||||
| var s = new Socket(); |  | ||||||
| print("connecting"); |  | ||||||
| print("before connect", s.isConnected); |  | ||||||
| s.onError(function(e) { |  | ||||||
| 	print(e); |  | ||||||
| }); |  | ||||||
| print("noDelay", s.noDelay); |  | ||||||
| s.noDelay = true; |  | ||||||
| s.connect("www.unprompted.com", 80).then(function() { |  | ||||||
| 	print("connected", s.isConnected); |  | ||||||
| 	print(s.peerName); |  | ||||||
| 	s.read(function(data) { |  | ||||||
| 		print("read", data.length); |  | ||||||
| 	}); |  | ||||||
| 	s.write("GET / HTTP/1.0\r\n\r\n"); |  | ||||||
| }).then(function() { |  | ||||||
| 	print("closed"); |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| var s2 = new Socket(); |  | ||||||
| print("connecting"); |  | ||||||
| print("before connect", s2.isConnected); |  | ||||||
| s2.onError(function(e) { |  | ||||||
| 	print("error"); |  | ||||||
| 	print(e); |  | ||||||
| }); |  | ||||||
| print("noDelay", s2.noDelay); |  | ||||||
| s2.noDelay = true; |  | ||||||
| s2.connect("www.unprompted.com", 443).then(function() { |  | ||||||
| 	print("connected"); |  | ||||||
| 	s2.read(function(data) { |  | ||||||
| 		print("read", data.length); |  | ||||||
| 	}); |  | ||||||
| 	return s2.startTls(); |  | ||||||
| }).then(function() { |  | ||||||
| 	print("ready"); |  | ||||||
| 	print(s2.peerName); |  | ||||||
| 	s2.write("GET / HTTP/1.0\r\nConnection: close\r\n\r\n").then(function() { |  | ||||||
| 		s2.shutdown(); |  | ||||||
| 	}); |  | ||||||
| }).catch(function(e) { |  | ||||||
| 	printf("caught"); |  | ||||||
| 	print(e); |  | ||||||
| }); |  | ||||||
| EOF |  | ||||||
|  |  | ||||||
| $TILDEFRIENDS test.js |  | ||||||
| @@ -1,73 +0,0 @@ | |||||||
| #!/usr/bin/python |  | ||||||
|  |  | ||||||
| import argparse |  | ||||||
| import glob |  | ||||||
| import os |  | ||||||
| import shutil |  | ||||||
| import subprocess |  | ||||||
| import sys |  | ||||||
|  |  | ||||||
| if sys.platform not in ('darwin', 'linux2'): |  | ||||||
| 	print 'Tests are only enabled on Linux.' |  | ||||||
| 	exit(0) |  | ||||||
|  |  | ||||||
| parser = argparse.ArgumentParser() |  | ||||||
| parser.add_argument('tests', nargs=argparse.REMAINDER) |  | ||||||
| arguments = parser.parse_args() |  | ||||||
|  |  | ||||||
| root = os.path.dirname(os.path.join(os.getcwd(), os.path.dirname(__file__))) |  | ||||||
| tmp = os.path.join(root, 'tmp') |  | ||||||
| logs = os.path.join(root, 'logs') |  | ||||||
| tests = os.path.join(root, 'tests') |  | ||||||
| executable = os.path.join(root, 'out', 'debug', 'tildefriends') |  | ||||||
|  |  | ||||||
| if not os.path.isdir(logs): |  | ||||||
| 	os.makedirs(logs) |  | ||||||
|  |  | ||||||
| selectedTests = set() |  | ||||||
| if not arguments.tests: |  | ||||||
| 	for test in glob.glob(os.path.join(tests, '*')): |  | ||||||
| 		selectedTests.add(test) |  | ||||||
| for pattern in arguments.tests: |  | ||||||
| 	for match in glob.glob(os.path.join(tests, '*' + pattern + '*')): |  | ||||||
| 		selectedTests.add(match) |  | ||||||
|  |  | ||||||
| env = os.environ.copy() |  | ||||||
| env['TILDEFRIENDS'] = executable + ' run -s' |  | ||||||
| env['LOGDIR'] = logs |  | ||||||
|  |  | ||||||
| def indent(text): |  | ||||||
| 	return '\n'.join('\t' + line for line in text.split('\n')) |  | ||||||
|  |  | ||||||
| passCount = 0 |  | ||||||
| failCount = 0 |  | ||||||
|  |  | ||||||
| for test in sorted(selectedTests): |  | ||||||
| 	if os.path.isdir(tmp): |  | ||||||
| 		shutil.rmtree(tmp) |  | ||||||
| 	if not os.path.isdir(tmp): |  | ||||||
| 		os.makedirs(tmp) |  | ||||||
|  |  | ||||||
| 	process = subprocess.Popen(['bash', test], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=tmp, env=env) |  | ||||||
| 	interrupted = False |  | ||||||
| 	stdout, stderr = process.communicate() |  | ||||||
| 	if interrupted or process.returncode == 0: |  | ||||||
| 		if stdout.strip() == "SKIP": |  | ||||||
| 			print 'SKIPPED', test |  | ||||||
| 		else: |  | ||||||
| 			print 'PASSED', test |  | ||||||
| 		passCount += 1 |  | ||||||
| 	else: |  | ||||||
| 		print 'FAILED', test |  | ||||||
| 		print 'RETURNED:', process.returncode |  | ||||||
| 		print 'STDOUT:' |  | ||||||
| 		print indent(stdout) |  | ||||||
| 		print 'STDERR:' |  | ||||||
| 		print indent(stderr) |  | ||||||
| 		failCount += 1 |  | ||||||
|  |  | ||||||
| 	if os.path.isdir(tmp): |  | ||||||
| 		shutil.rmtree(tmp) |  | ||||||
|  |  | ||||||
| print passCount, 'tests passed. ', failCount, 'tests failed.' |  | ||||||
| exit(failCount) |  | ||||||
		Reference in New Issue
	
	Block a user