forked from cory/tildefriends
I think this fixes tests, and makes them runnable from continuous integration.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3161 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
ebe54b6117
commit
7a16a1d65c
@ -257,7 +257,8 @@ void Task::kill() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Task::execute(const char* fileName) {
|
bool Task::execute(const char* fileName) {
|
||||||
|
bool executed = false;
|
||||||
v8::Isolate::Scope isolateScope(_isolate);
|
v8::Isolate::Scope isolateScope(_isolate);
|
||||||
v8::HandleScope handleScope(_isolate);
|
v8::HandleScope handleScope(_isolate);
|
||||||
v8::Context::Scope contextScope(v8::Local<v8::Context>::New(_isolate, _context));
|
v8::Context::Scope contextScope(v8::Local<v8::Context>::New(_isolate, _context));
|
||||||
@ -274,6 +275,7 @@ void Task::execute(const char* fileName) {
|
|||||||
if (!script.IsEmpty()) {
|
if (!script.IsEmpty()) {
|
||||||
script->Run();
|
script->Run();
|
||||||
std::cout << "Script " << fileName << " completed\n";
|
std::cout << "Script " << fileName << " completed\n";
|
||||||
|
executed = true;
|
||||||
} else {
|
} else {
|
||||||
std::cerr << "Failed to compile: " << fileName << ".\n";
|
std::cerr << "Failed to compile: " << fileName << ".\n";
|
||||||
}
|
}
|
||||||
@ -283,6 +285,7 @@ void Task::execute(const char* fileName) {
|
|||||||
message += fileName;
|
message += fileName;
|
||||||
_isolate->ThrowException(v8::Exception::Error(v8::String::NewFromUtf8(_isolate, message.c_str())));
|
_isolate->ThrowException(v8::Exception::Error(v8::String::NewFromUtf8(_isolate, message.c_str())));
|
||||||
}
|
}
|
||||||
|
return executed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Task::invokeExport(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
void Task::invokeExport(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
||||||
|
@ -74,7 +74,7 @@ public:
|
|||||||
|
|
||||||
void configureFromStdin();
|
void configureFromStdin();
|
||||||
void setTrusted(bool trusted) { _trusted = trusted; }
|
void setTrusted(bool trusted) { _trusted = trusted; }
|
||||||
void execute(const char* fileName);
|
bool execute(const char* fileName);
|
||||||
void activate();
|
void activate();
|
||||||
void run();
|
void run();
|
||||||
|
|
||||||
|
@ -55,3 +55,8 @@ TaskTryCatch::~TaskTryCatch() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TaskTryCatch::hasCaught()
|
||||||
|
{
|
||||||
|
return _tryCatch.HasCaught();
|
||||||
|
}
|
||||||
|
@ -9,6 +9,7 @@ class TaskTryCatch {
|
|||||||
public:
|
public:
|
||||||
TaskTryCatch(Task* task);
|
TaskTryCatch(Task* task);
|
||||||
~TaskTryCatch();
|
~TaskTryCatch();
|
||||||
|
bool hasCaught();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
v8::TryCatch _tryCatch;
|
v8::TryCatch _tryCatch;
|
||||||
|
16
src/main.cpp
16
src/main.cpp
@ -18,6 +18,7 @@ v8::Platform* gPlatform = 0;
|
|||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
|
int result = 0;
|
||||||
uv_setup_args(argc, argv);
|
uv_setup_args(argc, argv);
|
||||||
TaskStub::initialize();
|
TaskStub::initialize();
|
||||||
v8::V8::InitializeICU();
|
v8::V8::InitializeICU();
|
||||||
@ -64,12 +65,23 @@ int main(int argc, char* argv[]) {
|
|||||||
v8::HandleScope handleScope(task.getIsolate());
|
v8::HandleScope handleScope(task.getIsolate());
|
||||||
v8::Context::Scope contextScope(task.getContext());
|
v8::Context::Scope contextScope(task.getContext());
|
||||||
TaskTryCatch tryCatch(&task);
|
TaskTryCatch tryCatch(&task);
|
||||||
task.execute(coreTask);
|
if (!task.execute(coreTask))
|
||||||
|
{
|
||||||
|
result = -1;
|
||||||
}
|
}
|
||||||
|
if (tryCatch.hasCaught())
|
||||||
|
{
|
||||||
|
result = -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == 0)
|
||||||
|
{
|
||||||
task.run();
|
task.run();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
v8::V8::Dispose();
|
v8::V8::Dispose();
|
||||||
|
|
||||||
return 0;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -4,4 +4,4 @@ cat > test.js << EOF
|
|||||||
print("hi");
|
print("hi");
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$SANDBOXOS test.js
|
$TILDEFRIENDS test.js
|
||||||
|
@ -4,4 +4,4 @@ cat > test.js << EOF
|
|||||||
print("hi");
|
print("hi");
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
valgrind --log-file=$LOGDIR/valgrind.log $SANDBOXOS test.js
|
valgrind --log-file=$LOGDIR/valgrind.log $TILDEFRIENDS test.js
|
||||||
|
@ -16,4 +16,4 @@ print("I am the child process.");
|
|||||||
exit(0);
|
exit(0);
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$SANDBOXOS test.js
|
$TILDEFRIENDS test.js
|
||||||
|
@ -24,4 +24,4 @@ exports = {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$SANDBOXOS test.js
|
$TILDEFRIENDS test.js
|
||||||
|
@ -23,4 +23,4 @@ exports = {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$SANDBOXOS test.js
|
$TILDEFRIENDS test.js
|
||||||
|
@ -1,80 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
mkdir -p packages
|
|
||||||
for i in filesystem packager; do
|
|
||||||
ln -s $ROOT/packages/$i packages/$i
|
|
||||||
done
|
|
||||||
cp -R $ROOT/packages/system packages/system
|
|
||||||
|
|
||||||
mkdir -p packages/test
|
|
||||||
|
|
||||||
cat > packages/test/test.js << EOF
|
|
||||||
print("Hello!");
|
|
||||||
|
|
||||||
File.writeFile("packages/hello/hello.js", "this will fail to run!$^!U#%^#$%#%");
|
|
||||||
|
|
||||||
var p = imports.system.restartTask("hello");
|
|
||||||
print("here is our promise: " + p.toString());
|
|
||||||
print(p);
|
|
||||||
|
|
||||||
p.then(function(r) {
|
|
||||||
print("restart succeeded when it should not have: " + r);
|
|
||||||
imports.system.finishTest(1);
|
|
||||||
}).catch(function(e) {
|
|
||||||
print("restart failed: " + e);
|
|
||||||
print(e.toString());
|
|
||||||
for (var i in e) {
|
|
||||||
print(i);
|
|
||||||
print(e[i]);
|
|
||||||
}
|
|
||||||
imports.system.finishTest(0);
|
|
||||||
});
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > packages/test/package.json << EOF
|
|
||||||
{
|
|
||||||
"name": "test",
|
|
||||||
"start": "test.js",
|
|
||||||
"trusted": true,
|
|
||||||
"imports": ["packager", "system"]
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat >> packages/system/system.js << EOF
|
|
||||||
exports.finishTest = function(result) {
|
|
||||||
exit(result);
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
mkdir -p packages/hello
|
|
||||||
|
|
||||||
cat > packages/hello/hello.js << EOF
|
|
||||||
print("Hi.");
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > packages/hello/package.json << EOF
|
|
||||||
{
|
|
||||||
"name": "hello",
|
|
||||||
"start": "hello.js"
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
|
|
||||||
mkdir -p packages/auth
|
|
||||||
|
|
||||||
cat > packages/auth/auth.js << EOF
|
|
||||||
exports = {
|
|
||||||
query: function() { return null; },
|
|
||||||
getCredentials: function() { return {user: 'test', token: 'token'}; },
|
|
||||||
verifyCredentials: function() { return {permissions: []}; },
|
|
||||||
};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > packages/auth/package.json << EOF
|
|
||||||
{
|
|
||||||
"name": "auth",
|
|
||||||
"start": "auth.js"
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
$SANDBOXOS packages/system/system.js
|
|
@ -26,4 +26,4 @@ exports = {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$SANDBOXOS test.js
|
$TILDEFRIENDS test.js
|
||||||
|
@ -31,4 +31,4 @@ if (expected.length) {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$SANDBOXOS test.js
|
$TILDEFRIENDS test.js
|
||||||
|
@ -6,4 +6,4 @@ task.activate.bind(null).apply();
|
|||||||
exit(0);
|
exit(0);
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$SANDBOXOS test.js
|
$TILDEFRIENDS test.js
|
||||||
|
@ -1,36 +1,68 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/python
|
||||||
|
|
||||||
export ROOT=$(cd $(dirname ${BASH_SOURCE[0]})/..; pwd)
|
import argparse
|
||||||
TMP=$ROOT/tmp
|
import glob
|
||||||
LOGS=$ROOT/logs
|
import os
|
||||||
TESTS=$ROOT/tests
|
import shutil
|
||||||
export SANDBOXOS=$ROOT/sandboxos
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
mkdir $TMP 2> /dev/null
|
if sys.platform != 'linux2':
|
||||||
mkdir $LOGS 2> /dev/null
|
print 'Tests are only enabled on Linux.'
|
||||||
|
exit(0)
|
||||||
|
|
||||||
REQUESTED_TESTS=$*
|
parser = argparse.ArgumentParser()
|
||||||
if [[ -z $REQUESTED_TESTS ]]; then
|
parser.add_argument('tests', nargs=argparse.REMAINDER)
|
||||||
REQUESTED_TESTS=$(ls $TESTS/* | xargs basename -a)
|
arguments = parser.parse_args()
|
||||||
fi
|
|
||||||
|
|
||||||
for NAME in $REQUESTED_TESTS; do
|
root = os.path.dirname(os.path.join(os.getcwd(), os.path.dirname(__file__)))
|
||||||
TEST=$TESTS/$NAME
|
tmp = os.path.join(root, 'tmp')
|
||||||
echo -n "$(basename $TEST) "
|
logs = os.path.join(root, 'logs')
|
||||||
rm -rf $TMP/*
|
tests = os.path.join(root, 'tests')
|
||||||
pushd $TMP > /dev/null
|
executable = os.path.join(root, 'tildefriends')
|
||||||
export LOGDIR=$LOGS/$NAME
|
|
||||||
mkdir $LOGDIR 2> /dev/null
|
|
||||||
unbuffer $TEST > $LOGDIR/stdout.log 2> $LOGDIR/stderr.log
|
|
||||||
RESULT=$?
|
|
||||||
popd > /dev/null
|
|
||||||
if [[ $RESULT != 0 ]]; then
|
|
||||||
echo "FAILED (with exit code $RESULT)"
|
|
||||||
exit $RESULT
|
|
||||||
else
|
|
||||||
echo "SUCCESS"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo
|
if not os.path.isdir(logs):
|
||||||
echo "All tests completed successfully."
|
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
|
||||||
|
env['LOGDIR'] = logs
|
||||||
|
|
||||||
|
def indent(text):
|
||||||
|
return '\n'.join('\t' + line for line in text.split('\n'))
|
||||||
|
|
||||||
|
passCount = 0
|
||||||
|
failCount = 0
|
||||||
|
|
||||||
|
for test in 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)
|
||||||
|
stdout, stderr = process.communicate()
|
||||||
|
if process.returncode == 0:
|
||||||
|
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.'
|
||||||
|
Loading…
Reference in New Issue
Block a user