diff options
author | Joonas Lahtinen <joonas.lahtinen@linux.intel.com> | 2018-08-22 17:36:41 +0300 |
---|---|---|
committer | Joonas Lahtinen <joonas.lahtinen@linux.intel.com> | 2018-08-22 17:48:25 +0300 |
commit | 5ec509b546e64e18e4e227cf7973766b223552b4 (patch) | |
tree | a410f68eed9c0fc6f0a5805a932d290ffc6d3fa9 /shell | |
parent | 221855c6fe22abc5c70587482bae3e8c4809eb39 (diff) |
igt/shell: Add console.{log,error} and modernize/prettier.io samples.v8-shell
Diffstat (limited to 'shell')
-rw-r--r-- | shell/.editorconfig | 9 | ||||
-rw-r--r-- | shell/.prettierrc.js | 4 | ||||
-rw-r--r-- | shell/lib/console.js | 19 | ||||
-rw-r--r-- | shell/lib/index.js | 2 | ||||
-rw-r--r-- | shell/lib/util.js | 35 | ||||
-rw-r--r-- | shell/samples/igt.toy.print.js (renamed from shell/samples/print.js) | 0 | ||||
-rw-r--r-- | shell/samples/lib.console.js | 7 | ||||
-rw-r--r-- | shell/samples/os.fork.js | 88 | ||||
-rw-r--r-- | shell/samples/os.sleep.js | 13 |
9 files changed, 147 insertions, 30 deletions
diff --git a/shell/.editorconfig b/shell/.editorconfig new file mode 100644 index 00000000..6a0ac007 --- /dev/null +++ b/shell/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*.cc, *.js] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/shell/.prettierrc.js b/shell/.prettierrc.js new file mode 100644 index 00000000..de2f53cd --- /dev/null +++ b/shell/.prettierrc.js @@ -0,0 +1,4 @@ +module.exports = { + singleQuote: true, + trailingComma: 'all', +}; diff --git a/shell/lib/console.js b/shell/lib/console.js new file mode 100644 index 00000000..2845dcfe --- /dev/null +++ b/shell/lib/console.js @@ -0,0 +1,19 @@ +import { format } from './util'; + +class Console { + constructor(stdout, stderr) { + Object.assign(this, { stdout, stderr }); + } + + log(...args) { + this.stdout(format(...args)); + } + + error(...args) { + this.stdout(format(...args)); + } +} + +const console = new Console(igt.toy.print, igt.toy.print); + +export default console; diff --git a/shell/lib/index.js b/shell/lib/index.js new file mode 100644 index 00000000..f36c691d --- /dev/null +++ b/shell/lib/index.js @@ -0,0 +1,2 @@ +export { default as console } from './console'; +export { * as util } from './util'; diff --git a/shell/lib/util.js b/shell/lib/util.js new file mode 100644 index 00000000..6f87dfd7 --- /dev/null +++ b/shell/lib/util.js @@ -0,0 +1,35 @@ +export const inspect = arg => { + if (arg === null || typeof arg !== 'object') return arg; + + try { + return JSON.stringify(arg, undefined, 2); + } catch (error) { + return '[Circular]'; + } +}; + +const placeholderRegExp = /%[sdo%]/g; +const placeholderHandlers = { + '%s': arg => String(arg), + '%d': arg => Number(arg), + '%o': arg => inspect(arg), +}; + +export const format = (fmt, ...args) => { + if (typeof fmt !== 'string') return args.map(inspect).join(' '); + + const str = String(fmt).replace(placeholderRegExp, placeholder => { + if (placeholder === '%%') return '%'; + if (!args.length) return placeholder; + const [arg] = args.splice(0, 1); + const handler = placeholderHandlers[placeholder]; + return handler ? handler(arg) : placeholder; + }); + + return [str, ...args.map(inspect)].join(' '); +}; + +export const range = (start, end) => { + const size = end - start; + return new Array(size).map((v, i) => start + i); +}; diff --git a/shell/samples/print.js b/shell/samples/igt.toy.print.js index dee56dda..dee56dda 100644 --- a/shell/samples/print.js +++ b/shell/samples/igt.toy.print.js diff --git a/shell/samples/lib.console.js b/shell/samples/lib.console.js new file mode 100644 index 00000000..ec4a713b --- /dev/null +++ b/shell/samples/lib.console.js @@ -0,0 +1,7 @@ +import console from '../lib/console'; + +const number = 1; +const string = 'foo'; +const object = { a: 1, b: 2 }; + +console.log('number = %d\nstring = %s\nobject = %o', number, string, object); diff --git a/shell/samples/os.fork.js b/shell/samples/os.fork.js index debdebcc..5833fdc4 100644 --- a/shell/samples/os.fork.js +++ b/shell/samples/os.fork.js @@ -1,30 +1,66 @@ -igt.os.fork('hello', print).wait(); - -igt.os.fork([ {delay: 1, msg:'goodbye' }, {delay:0, msg:'world'} ], - function(x) { igt.os.sleep(x.delay); print(x.msg) }).wait(); - -var job = igt.os.fork('', function(x) { igt.os.exit(1); igt.os.sleep(999); }); -print('Exitcode = ' + job.wait()); - -job = igt.os.fork(); -if (job) { - print("Parent shall wait for its child!"); - job.wait(); -} else { - print("The child wants to play!"); - for (var x = 0; x < 10; x++) { - print("Play " + x); - igt.os.sleep(0.1); +import console from '../lib/console'; +import { range } from '../lib/util'; + +const { fork, sleep, exit } = igt.os; + +{ + fork('hello', console.log).wait(); +} + +{ + const children = [ + { + delay: 1, + msg: 'goodbye', + }, + { + delay: 0, + msg: 'world', + }, + ]; + + const childrenMain = ({ delay, msg }) => { + sleep(delay); + console.log(msg); + }; + + fork(children, childrenMain).wait(); + + { + const job = fork('', () => { + exit(1); + sleep(999); + }); + console.log('Exitcode = %d', job.wait()); } - print("Tired now!"); - igt.os.exit(0); } -print("Only parents allowed after children sleep, exitcode:", job.result); -job = igt.os.fork(); -if (job) { - print("No Mr Bond, I expect you to", job.wait()); -} else { - badwolf(); +{ + const job = fork(); + if (job) { + console.log('Parent shall wait for its child!'); + job.wait(); + } else { + console.log('The child wants to play!'); + for (const i of range(0, 10)) { + console.log('Play ' + i); + sleep(0.1); + } + console.log('Tired now!'); + exit(0); + } + console.log( + 'Only parents allowed after children sleep, exitcode: %d', + job.result, + ); +} + +{ + const job = fork(); + if (job) { + console.log('No Mr Bond, I expect you to', job.wait()); + } else { + badwolf(); + } + console.log('Onwards, all by myself.'); } -print("Onwards, all by myself."); diff --git a/shell/samples/os.sleep.js b/shell/samples/os.sleep.js index 19f6aac9..fd2a4c54 100644 --- a/shell/samples/os.sleep.js +++ b/shell/samples/os.sleep.js @@ -1,9 +1,14 @@ +import console from '../lib/console'; + +// FIXME: Make 'now' into function. +const { sleep } = igt.os; + let elapsed = -igt.os.now; let expected = 0; -for (var i = 2; i > 0.1; i /= 2) { - print("Sleeping for " + i + "s"); - igt.os.sleep(i); +for (let i = 2; i > 0.1; i /= 2) { + console.log('Sleeping for %d seconds', i); + sleep(i); expected += i; } elapsed += igt.os.now; -print("Elapsed " + elapsed + "ms, expected " + expected*1000 + "ms"); +console.log('Elapsed %d ms, expected %s ms', elapsed, expected * 1000); |