UNPKG

gdo

Version:

Group- and Dependency-based Ordering

80 lines (76 loc) 3.6 kB
/* ** GDO -- Group- and Dependency-based Ordering ** Copyright (c) 2015-2023 Dr. Ralf S. Engelschall <rse@engelschall.com> ** ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ const GDO = require("../lib/gdo.js") describe("GDO Library", function () { it("base API availability", function () { const gdo = new GDO() expect(gdo).to.respondTo("reset") expect(gdo).to.respondTo("groups") expect(gdo).to.respondTo("element") expect(gdo).to.respondTo("order") }) it("basic ordering with dependencies only", function () { const gdo = new GDO() gdo.element({ name: "1" }) gdo.element({ name: "2", after: "1" }) gdo.element({ name: "3", after: "2" }) expect(gdo.order()).to.be.deep.equal([ "1", "2", "3" ]) }) it("basic ordering with groups only", function () { const gdo = new GDO() gdo.groups([ "A", "B", "C" ]) gdo.element({ name: "1", group: "A" }) gdo.element({ name: "2", group: "B" }) gdo.element({ name: "3", group: "C" }) expect(gdo.order()).to.be.deep.equal([ "1", "2", "3" ]) }) it("basic ordering with tags only", function () { const gdo = new GDO() gdo.element({ name: "1", tag: "A" }) gdo.element({ name: "2a", tag: "B", after: "A", before: [ "C", "2b" ] }) gdo.element({ name: "2b", tag: "B", after: [ "A", "2a" ], before: "C" }) gdo.element({ name: "3", tag: "C" }) expect(gdo.order()).to.be.deep.equal([ "1", "2a", "2b", "3" ]) }) it("basic ordering with groups and dependencies", function () { const gdo = new GDO() gdo.groups([ "A", "B", "C" ]) gdo.element({ name: "1", group: "A" }) gdo.element({ name: "2a", group: "B" }) gdo.element({ name: "2b", group: "B", after: "2a" }) gdo.element({ name: "2c", group: "B", after: "2b" }) gdo.element({ name: "3", group: "C" }) expect(gdo.order()).to.be.deep.equal([ "1", "2a", "2b", "2c", "3" ]) }) it("basic ordering with groups, tags and dependencies", function () { const gdo = new GDO() gdo.groups([ "A", "B", "C" ]) gdo.element({ name: "1", group: "A" }) gdo.element({ name: "2a", group: "B", tag: "TWO-A" }) gdo.element({ name: "2b", group: "B", after: "TWO-A", before: "2c" }) gdo.element({ name: "2c", group: "B" }) gdo.element({ name: "3", group: "C" }) expect(gdo.order()).to.be.deep.equal([ "1", "2a", "2b", "2c", "3" ]) }) })