Browse Source

Implement InputTest class as a helper to create test cases for I/O

Lucas de Souza 5 years ago
parent
commit
7098d2b3eb
4 changed files with 42 additions and 16 deletions
  1. 5 3
      js/io/domInput.js
  2. 1 13
      js/io/input.js
  3. 17 0
      js/util/inputTest.js
  4. 19 0
      tests/test32.spec.js

+ 5 - 3
js/io/domInput.js

@@ -28,7 +28,8 @@ export class DOMInput extends Input{
     this.listeners.push(listener);
   }
 
-  requestInput () {
+  requestInput (callback) {
+    this.listeners.push(callback);
     this.el.focus();
   }
 
@@ -39,9 +40,10 @@ export class DOMInput extends Input{
   }
 
   notifyInput (text) {
-    this.listeners.forEach(l => {
-      l.notify(text);
+    this.listeners.forEach(resolve => {
+      resolve(l);
     })
+    this.listeners.splice(0, this.listeners.length);
   }
 
 }

+ 1 - 13
js/io/input.js

@@ -1,18 +1,6 @@
 export class Input {
 
-  registerListener (listener) {
-    throw new Error("Must be implemented");
-  }
-
-  notifyInput (text) {
-    throw new Error("Must be implemented");
-  }
-
-  requestInput () {
-    throw new Error("Must be implemented");
-  }
-
-  removeListener (listener) {
+  requestInput (callback) {
     throw new Error("Must be implemented");
   }
 }

+ 17 - 0
js/util/inputTest.js

@@ -0,0 +1,17 @@
+import { Input } from './../io/input';
+
+export class InputTest extends Input {
+
+  constructor (inputList) {
+    super();
+    this.inputList = inputList;
+  }
+
+  requestInput (callback) {
+    if(this.inputList.length <= 0) {
+      throw new Error('The amount of requests exceeded the amount of available inputs');
+    } else {
+      callback(this.inputList.splice(0,1)[0]);
+    }
+  }
+}

+ 19 - 0
tests/test32.spec.js

@@ -0,0 +1,19 @@
+import { InputTest } from './../js/util/inputTest';
+
+describe('Input test util class', () => {
+  const inTest = new InputTest(['0','2']);
+  it('should return the values given', (done) => {
+    const v1 = new Promise((resolve, _) => {
+      inTest.requestInput(resolve);
+    });
+
+    const v2 = new Promise((resolve, _) => {
+      inTest.requestInput(resolve);
+    });
+
+    Promise.all([v1,v2]).then(list => {
+      expect(list).toEqual(['0','2']);
+      done();
+    }).catch(err => done(err));
+  });
+});