From b290eaefb1b05628ddd13dc496ebafb4e595adab Mon Sep 17 00:00:00 2001 From: Anton Dyudin Date: Fri, 9 Mar 2018 11:32:17 -0800 Subject: [PATCH] rewrite test.ls in terms of runner.ls:Urbit no error handling implemented yet --- .travis/package.json | 2 ++ .travis/runner.ls | 21 +++++++++-- .travis/test.ls | 86 ++++++++++++++++---------------------------- 3 files changed, 52 insertions(+), 57 deletions(-) diff --git a/.travis/package.json b/.travis/package.json index 3251e46d5..681ec5a49 100644 --- a/.travis/package.json +++ b/.travis/package.json @@ -9,6 +9,8 @@ "author": "~fyr", "license": "MIT", "dependencies": { + "colors": "^1.1.2", + "escape-string-regexp": "^1.0.5", "livescript": "^1.5.0", "once": "^1.4.0", "promise-streams": "^2.1.1", diff --git a/.travis/runner.ls b/.travis/runner.ls index 36bc5ff68..5e1ee7c47 100644 --- a/.travis/runner.ls +++ b/.travis/runner.ls @@ -1,4 +1,4 @@ -require! <[ stream-snitch ]> +require! <[ stream-snitch colors escape-string-regexp ]> pty = require \pty.js export class Urbit @@ -6,10 +6,15 @@ export class Urbit @stdout = process.stdout # overridable @pty = pty.spawn \urbit args @pty.on \data ~> @stdout.write it # TODO pipe? + console.log "FIXME Running Ubuntu 14.04, which causes a libtinfo version info warning. Should update to 16.04.\n" # @last-output = Date.now() @pty.on \data ~> @last-output = Date.now() + # + process.on \exit ~> @pty.write '\04' # send EOF to gracefully checkpoint # + note: -> console.log "node:".blue, it + warn: -> console.log "node:".red, it wait-silent: ~> # this feels hacky new Promise (resolve)~> a = set-interval ~> @@ -19,8 +24,14 @@ export class Urbit , 200 expect: (re)~> new Promise (resolve)~> + #@listeners.push @pty.pipe (new stream-snitch re).once "match" resolve - expect-error: -> @expect /\r\x1b\[K(\/~|ford: )/ + expect-error: -> @expect /\r\x1b\[K(\/~|ford: )/ #ALT if-error + expect-immediate: (re)-> + Promise.race [ + @expect re + @wait-silent!then -> throw Error "Expected #re during event" + ] # line: -> @pty.write it @@ -28,7 +39,13 @@ export class Urbit @stdout.write "\n" @pty.write "\r" # + expect-echo: (s)-> #ALT send-and-expect + <~ @line s .then + @expect-immediate new RegExp escape-string-regexp s + # exit: (code)-> @pty.on \exit -> process.exit code #REVIEW just return promise? + # @pty.write "\03" # ^C running event @pty.write "\05\25" # ^E^U to clear prompt @pty.write "\04" # ^D to checkpoint + # set-timeout # hard exit diff --git a/.travis/test.ls b/.travis/test.ls index 2740bc460..8ca5fa925 100644 --- a/.travis/test.ls +++ b/.travis/test.ls @@ -1,56 +1,32 @@ -require! <[ stream-snitch once ]> -pty = require \pty.js +{Urbit} = require './runner.ls' -urbit = - # TODO abort on failure - pty.spawn 'urbit' <[-B urbit.pill -A .. -cFI zod zod]> - .on \data -> process.stdout.write it - -console.log "FIXME Running Ubuntu 14.04, which causes a libtinfo version info warning. Should update to 16.04.\n" - - -urbit.on \exit (code)-> - console.log "\nnode: urbit exited with code #code\n" - process.exit code - -process.on \exit -> urbit.write '\04' # send EOF to gracefully checkpoint - -exit-code = 0 - - -on-next = (re,cb)-> - urbit.pipe (new stream-snitch re).on \match once cb - -on-next /\r\x1b\[K(\/~|ford: )/ -> - console.log "\n\n---\nnode: detected error, exiting in ~s30\n---\n\n" - exit-code := 1 - set-timeout (-> process.exit 1), 30000 - -<- on-next /dojo> / - -urbit.write "%got-dojo\r" -<- on-next /%got-dojo/ - - -urbit.write "|start %test\r:test [%cores /]\r" -<- on-next /%cores-tested/ - -if exit-code - process.exit exit-code - -urbit.write "+test, =defer |, =seed `@uvI`(shaz %reproducible)\r" -on-next /(FAILED|CRASHED)/ -> - console.log "\n\n---\nnode: detected error\n---\n\n" - exit-code := 2 - -urbit.write "%tested\r" -<- on-next /%tested/ - - -if exit-code - process.exit exit-code - -console.log "\n\n---\nnode: STUB insert further tests here\n---\n\n" - -urbit.write '\04' -set-timeout (-> process.exit exit-code), 1000 +urbit = new Urbit <[-B urbit.pill -A .. -cFI zod zod]> +Promise.resolve urbit +.then (urb)-> + urb.note "Booting urbit" + # TODO exit on ford stack trace + <- urb.expect /dojo> / .then + <- urb.expect-echo "%dojo-booted" .then + urb +.then (urb)-> + urb.note "Testing compilation" + # TODO tally ford stack traces + # urb.warn etc + <- urb.line "|start %test" .then + <- urb.line ":test [%cores /]" .then + <- urb.expect-echo "%compilation-tested" .then + #if tally => throw # a fit + urb +.then (urb)-> + urb.note "Running /===/tests" + # TODO tally FAILED and CRASHED + <- urb.line "+test, =defer |, =seed `@uvI`(shaz %reproducible)" .then + <- urb.expect-echo "%ran-tests" .then + #if tally => throw # a fit + urb +.then -> + urbit.exit 0 +.catch (err)-> + <- urbit.wait-silent!then # assumptions? + urbit.warn err + urbit.exit 1