diff options
author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-01-15 07:57:16 -0500 |
---|---|---|
committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-01-15 07:57:16 -0500 |
commit | 3de39e2608e62a278b9c8cc37b53333f0877fa59 (patch) | |
tree | 0843d7cc199b54f80517c987a9f9d0d47cbb883d /test/test.ts | |
parent | e1ed82ff684877b56925016282a0e4d5bb4e1b4b (diff) |
Have most of document stuff working
Diffstat (limited to 'test/test.ts')
-rw-r--r-- | test/test.ts | 167 |
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 |