update the tests to use a new common driver, and add a new rewriter crud test
diff --git a/client/test/commands/createAndDelete.js b/client/test/commands/createAndDelete.js
index f842ec3..99fe27a 100644
--- a/client/test/commands/createAndDelete.js
+++ b/client/test/commands/createAndDelete.js
@@ -1,33 +1,6 @@
-var uuid = require('uuid');
+import it from '../helpers/driver'
-import {test as it} from 'ava'
-const spawn = require('child_process').spawn
-
-it('should create and delete an action and quit without error', t => {
- return new Promise((resolve,reject) => {
- var child = spawn('node', ['wskdb.js'], { cwd: '../..' })
- var name = uuid.v4();
- child.stdin.write('create ' + name + ' nodejs function main(params) { return { message: "Hello " + params.name } }\n')
- child.stdin.write('delete ' + name + '\n');
- child.stdin.write('q\n');
-
- child.stderr.on('data', (data) => {
- console.error('stderr: ' + data)
- })
-
- var goody = false;
- child.stdout.on('data', (data) => {
- // console.log('stdout: ' + data);
- if (data.indexOf('Error') >= 0) {
- goody = false
-
- } else if (data.indexOf('ok') >= 0) {
- goody = true
- }
- });
- child.on('exit', (code) => {
- if (code == 0 && goody) resolve()
- else reject('code=${code} goody=${goody}')
- });
- }).then(result => t.is(result))
-});
+it('should create and delete an action, and then quit without error', (name) => [
+ `create ${name} nodejs function main(params) { return { message: "Hello " + params.name } }`,
+ `delete ${name}`
+])
diff --git a/client/test/helpers/driver.js b/client/test/helpers/driver.js
new file mode 100644
index 0000000..19035a0
--- /dev/null
+++ b/client/test/helpers/driver.js
@@ -0,0 +1,57 @@
+'use strict'
+
+var test = require('ava').test;
+const uuid = require('uuid');
+const spawn = require('child_process').spawn;
+
+function Driver() {
+}
+Driver.prototype.it = function it(shouldDoThisSuccessfully, stepFn, rootPath) {
+ test(shouldDoThisSuccessfully, t => {
+ return new Promise((resolve,reject) => {
+ const child = spawn('node', ['wskdb.js'], { cwd: rootPath || '../..' });
+
+ var name = uuid.v4();
+ var steps = stepFn(name);
+
+ var stepNumber = 0;
+ var goody = false;
+
+ function doStep() {
+ child.stdin.write(steps[stepNumber++] + '\n');
+ }
+ doStep(); // do the first step
+
+ child.stderr.on('data', (data) => {
+ console.error('stderr: ' + data);
+ });
+
+ child.stdout.on('data', (data) => {
+ //console.log('stdout: ' + data)
+ if (data.indexOf('Error') >= 0) {
+ goody = false;
+ reject('Step ' + (stepNumber - 1) + ' failed');
+
+ } else if (data.indexOf('ok') >= 0) {
+ goody = true;
+
+ if (stepNumber === steps.length) {
+ child.stdin.write('quit\n');
+ child.stdin.end();
+ } else {
+ doStep();
+ }
+ }
+ });
+ child.on('exit', (code) => {
+ if (code === 0 && goody) {
+ resolve();
+ } else {
+ reject('code=${code} goody=${goody}');
+ }
+ });
+ }).then(result => t.is(result));
+ });
+} /* the end of it! */
+
+module.exports = new Driver().it;
diff --git a/client/test/rewriter/createAttachDetachDelete.js b/client/test/rewriter/createAttachDetachDelete.js
new file mode 100644
index 0000000..8e0218c
--- /dev/null
+++ b/client/test/rewriter/createAttachDetachDelete.js
@@ -0,0 +1,8 @@
+import it from '../helpers/driver'
+
+it('should create an attach, then attach, detach, delete, and finally quit without error', (name) => [
+ `create ${name} nodejs function main(params) { return { message: "Hello " + params.name } }`,
+ `attach ${name}`,
+ `detach ${name}`,
+ `delete ${name}`
+]);