aboutsummaryrefslogtreecommitdiff
path: root/test/test.ts
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-01-15 07:57:16 -0500
committerTyler Schicke <tyler_schicke@brown.edu>2019-01-15 07:57:16 -0500
commit3de39e2608e62a278b9c8cc37b53333f0877fa59 (patch)
tree0843d7cc199b54f80517c987a9f9d0d47cbb883d /test/test.ts
parente1ed82ff684877b56925016282a0e4d5bb4e1b4b (diff)
Have most of document stuff working
Diffstat (limited to 'test/test.ts')
-rw-r--r--test/test.ts167
1 files changed, 167 insertions, 0 deletions
diff --git a/test/test.ts b/test/test.ts
new file mode 100644
index 000000000..ad6c96781
--- /dev/null
+++ b/test/test.ts
@@ -0,0 +1,167 @@
+import { NumberController } from "../src/controllers/NumberController";
+import { expect } from 'chai';
+import 'mocha'
+import { KeyController } from "../src/controllers/KeyController";
+import { DocumentController } from "../src/controllers/DocumentController";
+import { autorun, reaction } from "mobx";
+import { DocumentReferenceController } from "../src/controllers/DocumentReferenceController";
+import { TextController } from "../src/controllers/TextController";
+import { FieldController } from "../src/controllers/FieldController";
+
+describe('Number Controller', () => {
+ it('Should be constructable', () => {
+ const numController = new NumberController(15);
+ expect(numController.Data).to.equal(15);
+ });
+
+ it('Should update', () => {
+ const numController = new NumberController(15);
+ let ran = false;
+ reaction(() => numController.Data, (data) => {ran = true;})
+ expect(ran).to.equal(false);
+ numController.Data = 5;
+ expect(ran).to.equal(true);
+ });
+});
+
+describe("Document", () =>{
+ it('should hold fields', () => {
+ let key = new KeyController("Test");
+ let key2 = new KeyController("Test2");
+ let field = new NumberController(15);
+ let doc = new DocumentController();
+ doc.SetField(key, field);
+ let getField = doc.GetFieldT(key, NumberController);
+ let getField2 = doc.GetFieldT(key2, NumberController);
+ expect(getField).to.equal(field);
+ expect(getField2).to.equal(undefined);
+ });
+
+ it('should update', () => {
+ let doc = new DocumentController();
+ let key = new KeyController("Test");
+ let ran = false;
+ reaction(() => doc.GetField(key), (field) => {ran = true});
+ expect(ran).to.equal(false);
+
+ doc.SetField(key, new NumberController(5));
+
+ expect(ran).to.equal(true);
+ });
+});
+
+describe("Reference", () => {
+ it('should dereference', () => {
+ let doc = new DocumentController();
+ let doc2 = new DocumentController();
+ const key = new KeyController("test");
+ const key2 = new KeyController("test2");
+
+ const numCont = new NumberController(55);
+ doc.SetField(key, numCont);
+ let ref = new DocumentReferenceController(doc, key);
+ let ref2 = new DocumentReferenceController(doc, key2);
+ doc2.SetField(key2, ref);
+
+ let ref3 = new DocumentReferenceController(doc2, key2);
+ let ref4 = new DocumentReferenceController(doc2, key);
+
+ expect(ref.Dereference()).to.equal(numCont);
+ expect(ref.DereferenceToRoot()).to.equal(numCont);
+ expect(ref2.Dereference()).to.equal(undefined);
+ expect(ref2.DereferenceToRoot()).to.equal(undefined);
+ expect(ref3.Dereference()).to.equal(ref);
+ expect(ref3.DereferenceToRoot()).to.equal(numCont);
+ expect(ref4.Dereference()).to.equal(undefined);
+ expect(ref4.DereferenceToRoot()).to.equal(undefined);
+ });
+
+ it('should work with prototypes', () => {
+ let doc = new DocumentController;
+ let doc2 = doc.MakeDelegate();
+ let key = new KeyController("test");
+ expect(doc.GetField(key)).to.equal(undefined);
+ expect(doc2.GetField(key)).to.equal(undefined);
+ let num = new NumberController(55);
+ let num2 = new NumberController(56);
+
+ doc.SetField(key, num);
+ expect(doc.GetField(key)).to.equal(num);
+ expect(doc2.GetField(key)).to.equal(num);
+
+ doc2.SetField(key, num2);
+ expect(doc.GetField(key)).to.equal(num);
+ expect(doc2.GetField(key)).to.equal(num2);
+ });
+
+ it('should update through layers', () => {
+ let doc = new DocumentController();
+ let doc2 = new DocumentController();
+ let doc3 = new DocumentController();
+ const key = new KeyController("test");
+ const key2 = new KeyController("test2");
+ const key3 = new KeyController("test3");
+
+ const numCont = new NumberController(55);
+ doc.SetField(key, numCont);
+ const ref = new DocumentReferenceController(doc, key);
+ doc2.SetField(key2, ref);
+ const ref3 = new DocumentReferenceController(doc2, key2);
+ doc3.SetField(key3, ref3);
+
+ let ran = false;
+ reaction(() => {
+ let field = (<FieldController>(<FieldController>doc3.GetField(key3)).DereferenceToRoot()).GetValue();
+ return field;
+ }, (field) => {
+ ran = true;
+ });
+ expect(ran).to.equal(false);
+
+ numCont.Data = 44;
+ expect(ran).to.equal(true);
+ ran = false;
+
+ doc.SetField(key, new NumberController(33));
+ expect(ran).to.equal(true);
+ ran = false;
+
+ doc.SetField(key2, new NumberController(4));
+ expect(ran).to.equal(false);
+
+ doc2.SetField(key2, new TextController("hello"));
+ expect(ran).to.equal(true);
+ ran = false;
+
+ doc3.SetField(key3, new TextController("world"));
+ expect(ran).to.equal(true);
+ ran = false;
+ });
+
+ it('should update with prototypes', () => {
+ let doc = new DocumentController();
+ let doc2 = doc.MakeDelegate();
+ const key = new KeyController("test");
+
+ const numCont = new NumberController(55);
+
+ let ran = false;
+ reaction(() => {
+ let field = doc2.GetFieldT(key, NumberController);
+ if(field) {
+ return field.Data;
+ }
+ return undefined;
+ }, (field) => {
+ ran = true;
+ });
+ expect(ran).to.equal(false);
+
+ doc.SetField(key, numCont);
+ expect(ran).to.equal(true);
+
+ ran = false;
+ numCont.Data = 1;
+ expect(ran).to.equal(true);
+ });
+}); \ No newline at end of file