UNPKG

jsmf-core

Version:

Javascript Modelling Framework

156 lines (132 loc) 5.18 kB
'use strict' const should = require('should') , jsmf = require('../src/index') describe ('jsmf equals on Enum', () => { it ('returns true on the exact same Enum', done => { const e = new jsmf.Enum('Foo', ['test', 'is', 'ok']) jsmf.jsmfIsEqual(e,e).should.be.true() done() }) it ('returns true on Enum with the same name and values', done => { const e = new jsmf.Enum('Foo', ['test', 'is', 'ok']) const e2 = new jsmf.Enum('Foo', ['test', 'is', 'ok']) e2.__jsmf__.uuid = jsmf.jsmfId(e) jsmf.jsmfIsEqual(e,e2).should.be.true() done() }) it ('returns false on Enum with different uuid', done => { const e = new jsmf.Enum('Foo', ['test', 'is', 'ok']) const e2 = new jsmf.Enum('Foo', ['test', 'is', 'ok']) jsmf.jsmfIsEqual(e,e2).should.be.false() done() }) it ('returns false on Enum with the same name and different values', done => { const e = new jsmf.Enum('Foo', ['test', 'is', 'not', 'ok']) const e2 = new jsmf.Enum('Foo', ['test', 'is', 'ok']) e2.__jsmf__.uuid = jsmf.jsmfId(e) jsmf.jsmfIsEqual(e,e2).should.be.false() done() }) it ('returns false on Enum with different name and same values', done => { const e = new jsmf.Enum('Foo', ['test', 'is', 'ok']) const e2 = new jsmf.Enum('Bar', ['test', 'is', 'ok']) e2.__jsmf__.uuid = jsmf.jsmfId(e) jsmf.jsmfIsEqual(e,e2).should.be.false() done() }) }) describe ('jsmf equals on Class', () => { it ('returns true on the exact same Class', done => { const r = new jsmf.Class('Target') const e = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: r}) jsmf.jsmfIsEqual(e,e).should.be.true() done() }) it ('returns true on Classes with the same elements', done => { const r = new jsmf.Class('Target') const r2 = new jsmf.Class('Target') const e = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: r}) const e2 = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: r2}) e2.__jsmf__.uuid = jsmf.jsmfId(e) r2.__jsmf__.uuid = jsmf.jsmfId(r) jsmf.jsmfIsEqual(e,e2).should.be.true() done() }) it ('returns false on Classes with different names', done => { const e = new jsmf.Class('Bar', [], {foo: jsmf.Positive}) const e2 = new jsmf.Class('Foo', [], {foo: jsmf.Positive}) e2.__jsmf__.uuid = jsmf.jsmfId(e) jsmf.jsmfIsEqual(e,e2).should.be.false() done() }) it ('returns false on Classes with different attributes', done => { const e = new jsmf.Class('Foo', [], {foo: jsmf.Positive}) const e2 = new jsmf.Class('Foo', [], {bar: jsmf.Positive}) e2.__jsmf__.uuid = jsmf.jsmfId(e) jsmf.jsmfIsEqual(e,e2).should.be.false() done() }) it ('returns false on Classes with different attributes types', done => { const e = new jsmf.Class('Foo', [], {foo: jsmf.Positive}) const e2 = new jsmf.Class('Foo', [], {bar: jsmf.String}) e2.__jsmf__.uuid = jsmf.jsmfId(e) jsmf.jsmfIsEqual(e,e2).should.be.false() done() }) it ('returns false on Classes with different references', done => { const r = new jsmf.Class('Target') const e = new jsmf.Class('Foo', [], {}, {ref: r}) const e2 = new jsmf.Class('Foo', [], {}, {ref2: r}) e2.__jsmf__.uuid = jsmf.jsmfId(e) jsmf.jsmfIsEqual(e,e2).should.be.false() done() }) it ('returns true on cyclic structure', done => { const r = new jsmf.Class('Target') const r2 = new jsmf.Class('Target') const e = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: r}) r.addReference('back', e) const e2 = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: r2}) r2.addReference('back', e2) e2.__jsmf__.uuid = jsmf.jsmfId(e) r2.__jsmf__.uuid = jsmf.jsmfId(r) jsmf.jsmfIsEqual(e,e2).should.be.true() done() }) }) describe ('jsmf equals on Class instances', () => { it ('returns true on similar instances', done => { const R = new jsmf.Class('Target') const C0 = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: R}) const C1 = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: R}) C1.__jsmf__.uuid = jsmf.jsmfId(C0) const r = new R() const c0 = new C0({foo: 42, ref: r}) const c1 = new C1({foo: 42, ref: r}) c1.__jsmf__.uuid = jsmf.jsmfId(c0) jsmf.jsmfIsEqual(c0,c1).should.be.true() done() }) }) describe ('jsmf equals on Model', () => { it ('ensures that a model is equal to itself', done => { const m = new jsmf.Model('Foo') jsmf.jsmfIsEqual(m,m).should.be.true() done() }) it ('ensures that a model is equal to identic model', done => { const R = new jsmf.Class('Target') const C0 = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: R}) const C1 = new jsmf.Class('Foo', [], {foo: jsmf.Positive}, {ref: R}) C1.__jsmf__.uuid = jsmf.jsmfId(C0) const r = new R() const c0 = new C0({foo: 42, ref: r}) const c1 = new C1({foo: 42, ref: r}) const m0 = new jsmf.Model('Foo', [], c0, true) const m1 = new jsmf.Model('Foo', [], c1, true) c1.__jsmf__.uuid = jsmf.jsmfId(c0) m1.__jsmf__.uuid = jsmf.jsmfId(m0) jsmf.jsmfIsEqual(m0,m1).should.be.true() done() }) })