import SettingData, { FormKeymaps, JSONTextSettings, FormSettings, } from "../../src/shared/SettingData"; import Settings from "../../src/shared/settings/Settings"; import { expect } from "chai"; import Keymaps from "../../src/shared/settings/Keymaps"; import ColorScheme from "../../src/shared/ColorScheme"; describe("shared/SettingData", () => { describe("FormKeymaps", () => { describe("#valueOF to #toKeymaps", () => { it("parses form keymaps and convert to operations", () => { const data = { 'scroll.vertically?{"count":1}': "j", "scroll.home": "0", }; const keymaps = FormKeymaps.fromJSON(data).toKeymaps().toJSON(); expect(keymaps).to.deep.equal({ j: { type: "scroll.vertically", count: 1 }, "0": { type: "scroll.home" }, }); }); }); describe("#fromKeymaps to #toJSON", () => { it("create from a Keymaps and create a JSON object", () => { const keymaps: Keymaps = Keymaps.fromJSON({ j: { type: "scroll.vertically", count: 1 }, "0": { type: "scroll.home" }, }); const form = FormKeymaps.fromKeymaps(keymaps).toJSON(); expect(form).to.deep.equal({ 'scroll.vertically?{"count":1}': "j", "scroll.home": "0", }); }); }); }); describe("JSONSettings", () => { describe("#valueOf to #toSettings", () => { it("parse object and create a Settings", () => { const o = `{ "keymaps": {}, "search": { "default": "google", "engines": { "google": "https://google.com/search?q={}" } }, "properties": { "hintchars": "abcdefghijklmnopqrstuvwxyz", "smoothscroll": false, "complete": "sbh", "colorscheme": "system" }, "blacklist": [] }`; const settings = JSONTextSettings.fromText(o).toSettings(); expect(settings.toJSON()).to.deep.equal(JSON.parse(o)); }); }); describe("#fromSettings to #toJSON", () => { it("create from a Settings and create a JSON string", () => { const o = Settings.fromJSON({ keymaps: {}, search: { default: "google", engines: { google: "https://google.com/search?q={}", }, }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", }, blacklist: [], }); const json = JSONTextSettings.fromSettings(o).toJSONText(); expect(JSON.parse(json)).to.deep.equal(o.toJSON()); }); }); }); describe("FormSettings", () => { describe("#valueOf to #toSettings", () => { it("parse object and create a Settings", () => { const data = { keymaps: { 'scroll.vertically?{"count":1}': "j", "scroll.home": "0", }, search: { default: "google", engines: [["google", "https://google.com/search?q={}"]], }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", colorscheme: ColorScheme.System, }, blacklist: [], }; const settings = FormSettings.fromJSON(data).toSettings(); expect(settings.toJSON()).to.deep.equal({ keymaps: { j: { type: "scroll.vertically", count: 1 }, "0": { type: "scroll.home" }, }, search: { default: "google", engines: { google: "https://google.com/search?q={}", }, }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", colorscheme: "system", }, blacklist: [], }); }); }); describe("#fromSettings to #toJSON", () => { it("create from a Settings and create a JSON string", () => { const data: Settings = Settings.fromJSON({ keymaps: { j: { type: "scroll.vertically", count: 1 }, "0": { type: "scroll.home" }, }, search: { default: "google", engines: { google: "https://google.com/search?q={}", }, }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", colorscheme: ColorScheme.System, }, blacklist: [], }); const json = FormSettings.fromSettings(data).toJSON(); expect(json).to.deep.equal({ keymaps: { 'scroll.vertically?{"count":1}': "j", "scroll.home": "0", }, search: { default: "google", engines: [["google", "https://google.com/search?q={}"]], }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", colorscheme: "system", }, blacklist: [], }); }); }); }); describe("SettingData", () => { describe("#valueOf to #toJSON", () => { it("parse object from json source", () => { const data = { source: "json", json: `{ "keymaps": {}, "search": { "default": "google", "engines": { "google": "https://google.com/search?q={}" } }, "properties": { "hintchars": "abcdefghijklmnopqrstuvwxyz", "smoothscroll": false, "complete": "sbh", "colorscheme": "system" }, "blacklist": [] }`, }; const j = SettingData.fromJSON(data).toJSON(); expect(j.source).to.equal("json"); expect(j.json).to.be.a("string"); }); it("parse object from form source", () => { const data = { source: "form", form: { keymaps: {}, search: { default: "yahoo", engines: [["yahoo", "https://yahoo.com/search?q={}"]], }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", colorscheme: ColorScheme.System, }, blacklist: [], }, }; const j = SettingData.fromJSON(data).toJSON(); expect(j.source).to.equal("form"); expect(j.form).to.deep.equal({ keymaps: {}, search: { default: "yahoo", engines: [["yahoo", "https://yahoo.com/search?q={}"]], }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", colorscheme: "system", }, blacklist: [], }); }); }); describe("#toSettings", () => { it("parse object from json source", () => { const data = { source: "json", json: `{ "keymaps": {}, "search": { "default": "google", "engines": { "google": "https://google.com/search?q={}" } }, "properties": { "hintchars": "abcdefghijklmnopqrstuvwxyz", "smoothscroll": false, "complete": "sbh" }, "blacklist": [] }`, }; const settings = SettingData.fromJSON(data).toSettings(); expect(settings.search.defaultEngine).to.equal("google"); }); it("parse object from form source", () => { const data = { source: "form", form: { keymaps: {}, search: { default: "yahoo", engines: [["yahoo", "https://yahoo.com/search?q={}"]], }, properties: { hintchars: "abcdefghijklmnopqrstuvwxyz", smoothscroll: false, complete: "sbh", }, blacklist: [], }, }; const settings = SettingData.fromJSON(data).toSettings(); expect(settings.search.defaultEngine).to.equal("yahoo"); }); }); }); });