Added KorAP plugin stylesheet support
Change-Id: Iaec401c59da0a2abc179f51b318c11e9fc41ce07
diff --git a/README.md b/README.md
index 9b691a4..7086fd0 100644
--- a/README.md
+++ b/README.md
@@ -48,6 +48,9 @@
# Optional: Custom server endpoint for Kalamar plugin integration
server: "https://custom.example.com/"
+# Optional: Custom Kalamar stylesheet URL for the configuration page
+stylesheet: "https://korap.ids-mannheim.de/css/kalamar-plugin-latest.css"
+
# Optional: Port to listen on (default: 5725)
port: 8080
@@ -84,9 +87,10 @@
Command line arguments take precedence over configuration file values:
-The `sdk`, `server`, `port`, and `loglevel` fields in the main configuration file are optional and override the following default values:
+The `sdk`, `stylesheet`, `server`, `port`, and `loglevel` fields in the main configuration file are optional and override the following default values:
- **`sdk`**: Custom SDK JavaScript file URL (default: `https://korap.ids-mannheim.de/js/korap-plugin-latest.js`)
+- **`stylesheet`**: Kalamar stylesheet URL for the config page (default: `https://korap.ids-mannheim.de/css/kalamar-plugin-latest.css`)
- **`server`**: Custom server endpoint URL (default: `https://korap.ids-mannheim.de/`)
- **`port`**: Server port (default: `5725`)
- **`loglevel`**: Log level (default: `warn`)
diff --git a/cmd/koralmapper/main.go b/cmd/koralmapper/main.go
index 1286af0..e456537 100644
--- a/cmd/koralmapper/main.go
+++ b/cmd/koralmapper/main.go
@@ -48,7 +48,9 @@
Description string
Server string
SDK string
+ Stylesheet string
ServiceURL string
+ CookieName string
}
type SingleMappingPageData struct {
@@ -338,7 +340,9 @@
Description: config.Description,
Server: yamlConfig.Server,
SDK: yamlConfig.SDK,
+ Stylesheet: yamlConfig.Stylesheet,
ServiceURL: yamlConfig.ServiceURL,
+ CookieName: yamlConfig.CookieName,
}
}
diff --git a/cmd/koralmapper/main_test.go b/cmd/koralmapper/main_test.go
index 30def87..0d1d2cf 100644
--- a/cmd/koralmapper/main_test.go
+++ b/cmd/koralmapper/main_test.go
@@ -1269,6 +1269,7 @@
// Check that other defaults were also applied
assert.Equal(t, "https://korap.ids-mannheim.de/", config.Server)
assert.Equal(t, "https://korap.ids-mannheim.de/js/korap-plugin-latest.js", config.SDK)
+ assert.Equal(t, "https://korap.ids-mannheim.de/css/kalamar-plugin-latest.css", config.Stylesheet)
assert.Equal(t, 5725, config.Port)
assert.Equal(t, "warn", config.LogLevel)
}
@@ -1285,6 +1286,7 @@
// Verify other values from the example config are preserved
assert.Equal(t, "https://korap.ids-mannheim.de/js/korap-plugin-latest.js", config.SDK)
+ assert.Equal(t, "https://korap.ids-mannheim.de/css/kalamar-plugin-latest.css", config.Stylesheet)
assert.Equal(t, "https://korap.ids-mannheim.de/", config.Server)
// Verify the mapper was loaded correctly
@@ -1898,6 +1900,7 @@
mockConfig := &tmconfig.MappingConfig{
SDK: "https://example.com/sdk.js",
+ Stylesheet: "https://example.com/kalamar.css",
Server: "https://example.com/",
ServiceURL: "https://example.com/plugin/koralmapper",
Lists: lists,
@@ -1924,6 +1927,7 @@
// SDK and server
assert.Contains(t, htmlContent, `src="https://example.com/sdk.js"`)
+ assert.Contains(t, htmlContent, `href="https://example.com/kalamar.css"`)
assert.Contains(t, htmlContent, `data-server="https://example.com/"`)
// ServiceURL as data attribute
@@ -1983,15 +1987,21 @@
assert.Contains(t, htmlContent, `data-default-foundry-b="upos"`)
assert.Contains(t, htmlContent, `data-default-layer-b="pos"`)
- // Input fields with correct CSS classes
- assert.Contains(t, htmlContent, `class="foundryA"`)
- assert.Contains(t, htmlContent, `class="layerA"`)
- assert.Contains(t, htmlContent, `class="foundryB"`)
- assert.Contains(t, htmlContent, `class="layerB"`)
+ // Input fields with request/response-specific CSS classes
+ assert.Contains(t, htmlContent, `class="request-foundryA"`)
+ assert.Contains(t, htmlContent, `class="request-layerA"`)
+ assert.Contains(t, htmlContent, `class="request-foundryB"`)
+ assert.Contains(t, htmlContent, `class="request-layerB"`)
+ assert.Contains(t, htmlContent, `class="response-foundryA"`)
+ assert.Contains(t, htmlContent, `class="response-layerA"`)
+ assert.Contains(t, htmlContent, `class="response-foundryB"`)
+ assert.Contains(t, htmlContent, `class="response-layerB"`)
- // Direction arrow
- assert.Contains(t, htmlContent, `class="dir-arrow"`)
+ // Direction arrows are independent for request/response
+ assert.Contains(t, htmlContent, `class="request-dir-arrow"`)
+ assert.Contains(t, htmlContent, `class="response-dir-arrow"`)
assert.Contains(t, htmlContent, `data-dir="atob"`)
+ assert.Contains(t, htmlContent, `data-dir="btoa"`)
// Request and response checkboxes
assert.Contains(t, htmlContent, `class="request-cb"`)
@@ -2034,8 +2044,8 @@
assert.Contains(t, htmlContent, `class="response-cb"`)
// No foundry/layer inputs (only corpus mappings, no annotation section)
- assert.NotContains(t, htmlContent, `class="foundryA"`)
- assert.NotContains(t, htmlContent, `class="dir-arrow"`)
+ assert.NotContains(t, htmlContent, `class="request-foundryA"`)
+ assert.NotContains(t, htmlContent, `class="request-dir-arrow"`)
}
func TestConfigPageBackwardCompatibility(t *testing.T) {
@@ -2108,6 +2118,7 @@
mockConfig := &tmconfig.MappingConfig{
SDK: "https://example.com/sdk.js",
+ Stylesheet: "https://example.com/kalamar.css",
Server: "https://example.com/",
ServiceURL: "https://example.com/service",
Lists: lists,
@@ -2116,6 +2127,7 @@
data := buildConfigPageData(mockConfig)
assert.Equal(t, "https://example.com/sdk.js", data.SDK)
+ assert.Equal(t, "https://example.com/kalamar.css", data.Stylesheet)
assert.Equal(t, "https://example.com/", data.Server)
assert.Equal(t, "https://example.com/service", data.ServiceURL)
diff --git a/cmd/koralmapper/static/config.html b/cmd/koralmapper/static/config.html
index a946501..6e71be1 100644
--- a/cmd/koralmapper/static/config.html
+++ b/cmd/koralmapper/static/config.html
@@ -3,14 +3,17 @@
<head>
<meta charset="UTF-8">
<title>{{.Title}}</title>
+ <link rel="stylesheet" href="{{.Stylesheet}}">
<link rel="stylesheet" href="/static/style.css">
<script src="{{.SDK}}"
data-server="{{.Server}}"></script>
</head>
<body>
- <div class="container" data-service-url="{{.ServiceURL}}">
+ <div class="container" data-service-url="{{.ServiceURL}}" data-cookie-name="{{.CookieName}}">
<h1>{{.Title}}</h1>
- <p>{{.Description}}</p>
+ <section>
+ <p>{{.Description}}</p>
+ </section>
{{if .AnnotationMappings}}
<section class="mapping-section">
@@ -22,16 +25,20 @@
<h3>{{.ID}}</h3>
{{if .Description}}<p class="desc">{{.Description}}</p>{{end}}
<div class="mapping-row">
- <label><input type="checkbox" class="request-cb" name="request"> Request:</label>
- <input type="text" class="foundryA" value="{{.FoundryA}}" size="8">/<input type="text" class="layerA" value="{{.LayerA}}" size="4">
- <button type="button" class="dir-arrow" data-dir="atob">→</button>
- <input type="text" class="foundryB" value="{{.FoundryB}}" size="8">/<input type="text" class="layerB" value="{{.LayerB}}" size="4">
+ <label><input type="checkbox" class="request-cb" name="request"> Request</label>
+ <div class="mapping-fields request-fields">
+ <input type="text" class="request-foundryA" value="{{.FoundryA}}" placeholder="{{.FoundryA}}" size="8">/<input type="text" class="request-layerA" value="{{.LayerA}}" placeholder="{{.LayerA}}" size="4">
+ <button type="button" class="request-dir-arrow" data-dir="atob">→</button>
+ <input type="text" class="request-foundryB" value="{{.FoundryB}}" placeholder="{{.FoundryB}}" size="8">/<input type="text" class="request-layerB" value="{{.LayerB}}" placeholder="{{.LayerB}}" size="4">
+ </div>
</div>
<div class="mapping-row">
- <label><input type="checkbox" class="response-cb" name="response"> Response:</label>
- <input type="text" class="foundryA" value="{{.FoundryA}}" size="8">/<input type="text" class="layerA" value="{{.LayerA}}" size="4">
- <button type="button" class="dir-arrow" data-dir="atob">→</button>
- <input type="text" class="foundryB" value="{{.FoundryB}}" size="8">/<input type="text" class="layerB" value="{{.LayerB}}" size="4">
+ <label><input type="checkbox" class="response-cb" name="response"> Response</label>
+ <div class="mapping-fields response-fields">
+ <input type="text" class="response-foundryA" value="{{.FoundryA}}" placeholder="{{.FoundryA}}" size="8">/<input type="text" class="response-layerA" value="{{.LayerA}}" placeholder="{{.LayerA}}" size="4">
+ <button type="button" class="response-dir-arrow" data-dir="btoa">←</button>
+ <input type="text" class="response-foundryB" value="{{.FoundryB}}" placeholder="{{.FoundryB}}" size="8">/<input type="text" class="response-layerB" value="{{.LayerB}}" placeholder="{{.LayerB}}" size="4">
+ </div>
</div>
</div>
{{end}}
@@ -56,10 +63,17 @@
</section>
{{end}}
- <h2>Plugin Information</h2>
- <p><strong>Version:</strong> <tt>{{.Version}}</tt></p>
- <p><strong>Build Date:</strong> <tt>{{.Date}}</tt></p>
- <p><strong>Build Hash:</strong> <tt>{{.Hash}}</tt></p>
+ <section class="mapping-section">
+ <h2>Pipe Configuration</h2>
+ <label class="cfg-line-label" for="request-cfg-preview">Request cfg</label>
+ <input type="text" id="request-cfg-preview" class="cfg-preview request-cfg-preview" readonly value="">
+ <label class="cfg-line-label" for="response-cfg-preview">Response cfg</label>
+ <input type="text" id="response-cfg-preview" class="cfg-preview response-cfg-preview" readonly value="">
+ </section>
+
+ <footer class="version">
+ <p><tt>v{{.Version}} - {{.Date}} {{.Hash}}</tt></p>
+ </footer>
</div>
<script src="/static/config.js"></script>
</body>
diff --git a/cmd/koralmapper/static/config.js b/cmd/koralmapper/static/config.js
index 3918c74..b3cd42b 100644
--- a/cmd/koralmapper/static/config.js
+++ b/cmd/koralmapper/static/config.js
@@ -1 +1,296 @@
"use strict";
+
+(function () {
+ var container = document.querySelector(".container");
+ if (!container) return;
+
+ var serviceURL = container.dataset.serviceUrl;
+ var cookieName = container.dataset.cookieName || "km-config";
+ var mappingDivs = container.querySelectorAll(".mapping");
+ var requestCfgPreview = container.querySelector(".request-cfg-preview");
+ var responseCfgPreview = container.querySelector(".response-cfg-preview");
+
+ // Cookie helpers
+
+ function readCookie() {
+ var prefix = cookieName + "=";
+ var parts = document.cookie.split("; ");
+ for (var i = 0; i < parts.length; i++) {
+ if (parts[i].indexOf(prefix) === 0) {
+ try {
+ return JSON.parse(decodeURIComponent(parts[i].substring(prefix.length)));
+ } catch (e) {
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
+ function writeCookie(state) {
+ var value = encodeURIComponent(JSON.stringify(state));
+ document.cookie = cookieName + "=" + value + "; path=/; SameSite=Lax; max-age=31536000";
+ }
+
+ // Form state
+
+ function reverseDir(dir) {
+ return dir === "atob" ? "btoa" : "atob";
+ }
+
+ function rowFieldClasses(mode) {
+ return {
+ foundryA: "." + mode + "-foundryA",
+ layerA: "." + mode + "-layerA",
+ foundryB: "." + mode + "-foundryB",
+ layerB: "." + mode + "-layerB",
+ dirArrow: "." + mode + "-dir-arrow"
+ };
+ }
+
+ function inputValue(parent, selector) {
+ var el = parent.querySelector(selector);
+ return el ? el.value : "";
+ }
+
+ function getModeState(div, mode) {
+ var classes = rowFieldClasses(mode);
+ var arrow = div.querySelector(classes.dirArrow);
+ return {
+ enabled: div.querySelector("." + mode + "-cb").checked,
+ dir: arrow ? arrow.dataset.dir : "atob",
+ foundryA: inputValue(div, classes.foundryA),
+ layerA: inputValue(div, classes.layerA),
+ foundryB: inputValue(div, classes.foundryB),
+ layerB: inputValue(div, classes.layerB)
+ };
+ }
+
+ function getFormState() {
+ var state = { mappings: [] };
+
+ for (var i = 0; i < mappingDivs.length; i++) {
+ var div = mappingDivs[i];
+ var entry = {
+ id: div.dataset.id
+ };
+
+ if (div.dataset.type !== "corpus") {
+ entry.request = getModeState(div, "request");
+ entry.response = getModeState(div, "response");
+ } else {
+ entry.request = { enabled: div.querySelector(".request-cb").checked };
+ entry.response = { enabled: div.querySelector(".response-cb").checked };
+ }
+
+ state.mappings.push(entry);
+ }
+
+ return state;
+ }
+
+ // Restore form from cookie
+
+ function setInputValue(parent, selector, value) {
+ if (value === undefined) return;
+ var el = parent.querySelector(selector);
+ if (el) el.value = value;
+ }
+
+ function setArrowDirection(div, selector, dir) {
+ var arrow = div.querySelector(selector);
+ if (!arrow || !dir) return;
+ arrow.dataset.dir = dir;
+ arrow.textContent = dir === "atob" ? "\u2192" : "\u2190";
+ }
+
+ function restoreModeState(div, mode, modeState) {
+ if (!modeState) return;
+ var classes = rowFieldClasses(mode);
+ var checkbox = div.querySelector("." + mode + "-cb");
+ if (checkbox) checkbox.checked = !!modeState.enabled;
+ setArrowDirection(div, classes.dirArrow, modeState.dir);
+ setInputValue(div, classes.foundryA, modeState.foundryA);
+ setInputValue(div, classes.layerA, modeState.layerA);
+ setInputValue(div, classes.foundryB, modeState.foundryB);
+ setInputValue(div, classes.layerB, modeState.layerB);
+ }
+
+ function restoreFormState(saved) {
+ if (!saved || !saved.mappings) return;
+
+ var byId = {};
+ for (var i = 0; i < saved.mappings.length; i++) {
+ byId[saved.mappings[i].id] = saved.mappings[i];
+ }
+
+ for (var i = 0; i < mappingDivs.length; i++) {
+ var div = mappingDivs[i];
+ var entry = byId[div.dataset.id];
+ if (!entry) continue;
+
+ if (div.dataset.type !== "corpus") {
+ // Backward compatibility with old cookie schema.
+ if (entry.request && typeof entry.request === "object") {
+ restoreModeState(div, "request", entry.request);
+ restoreModeState(div, "response", entry.response);
+ } else {
+ var requestLegacy = {
+ enabled: !!entry.request,
+ dir: entry.dir || "atob",
+ foundryA: entry.foundryA,
+ layerA: entry.layerA,
+ foundryB: entry.foundryB,
+ layerB: entry.layerB
+ };
+ var responseLegacy = {
+ enabled: !!entry.response,
+ dir: reverseDir(entry.dir || "atob"),
+ foundryA: entry.foundryA,
+ layerA: entry.layerA,
+ foundryB: entry.foundryB,
+ layerB: entry.layerB
+ };
+ restoreModeState(div, "request", requestLegacy);
+ restoreModeState(div, "response", responseLegacy);
+ }
+ } else {
+ var requestCb = div.querySelector(".request-cb");
+ var responseCb = div.querySelector(".response-cb");
+ if (requestCb) {
+ requestCb.checked = !!(entry.request && entry.request.enabled);
+ }
+ if (responseCb) {
+ responseCb.checked = !!(entry.response && entry.response.enabled);
+ }
+ }
+ }
+ }
+
+ // cfg parameter building
+
+ // Returns "" when the input matches its default (compact URL).
+ function cfgFieldValue(div, inputSelector, defaultDataAttr) {
+ var el = div.querySelector(inputSelector);
+ if (!el) return "";
+ var val = el.value;
+ var def = div.dataset[defaultDataAttr] || "";
+ return val === def ? "" : val;
+ }
+
+ function buildCfgParam(mode) {
+ var parts = [];
+ var classes = rowFieldClasses(mode);
+
+ for (var i = 0; i < mappingDivs.length; i++) {
+ var div = mappingDivs[i];
+ var cbClass = mode === "request" ? ".request-cb" : ".response-cb";
+ var cb = div.querySelector(cbClass);
+ if (!cb || !cb.checked) continue;
+
+ var id = div.dataset.id;
+ var dir = "atob";
+
+ if (div.dataset.type !== "corpus") {
+ var arrow = div.querySelector(classes.dirArrow);
+ dir = arrow ? arrow.dataset.dir : "atob";
+ }
+
+ if (div.dataset.type !== "corpus") {
+ var fA = cfgFieldValue(div, classes.foundryA, "defaultFoundryA");
+ var lA = cfgFieldValue(div, classes.layerA, "defaultLayerA");
+ var fB = cfgFieldValue(div, classes.foundryB, "defaultFoundryB");
+ var lB = cfgFieldValue(div, classes.layerB, "defaultLayerB");
+
+ if (fA || lA || fB || lB) {
+ parts.push(id + ":" + dir + ":" + fA + ":" + lA + ":" + fB + ":" + lB);
+ } else {
+ parts.push(id + ":" + dir);
+ }
+ } else {
+ parts.push(id + ":" + dir);
+ }
+ }
+
+ return parts.join(";");
+ }
+
+ // Kalamar pipe registration
+
+ var lastQueryPipe = null;
+ var lastResponsePipe = null;
+
+ function registerPipes() {
+ var queryCfg = buildCfgParam("request");
+ var responseCfg = buildCfgParam("response");
+
+ if (requestCfgPreview) {
+ requestCfgPreview.value = queryCfg;
+ }
+ if (responseCfgPreview) {
+ responseCfgPreview.value = responseCfg;
+ }
+
+ var newQueryPipe = queryCfg ? serviceURL + "/query?cfg=" + encodeURIComponent(queryCfg) : "";
+ var newResponsePipe = responseCfg ? serviceURL + "/response?cfg=" + encodeURIComponent(responseCfg) : "";
+
+ if (newQueryPipe === lastQueryPipe && newResponsePipe === lastResponsePipe) return;
+
+ if (typeof KorAPlugin !== "undefined") {
+ if (lastQueryPipe) {
+ KorAPlugin.sendMsg({ action: "pipe", job: "del", service: lastQueryPipe });
+ }
+ if (lastResponsePipe) {
+ KorAPlugin.sendMsg({ action: "pipe", job: "del-after", service: lastResponsePipe });
+ }
+
+ if (newQueryPipe) {
+ KorAPlugin.sendMsg({ action: "pipe", job: "add", service: newQueryPipe });
+ }
+ if (newResponsePipe) {
+ KorAPlugin.sendMsg({ action: "pipe", job: "add-after", service: newResponsePipe });
+ }
+ }
+
+ lastQueryPipe = newQueryPipe;
+ lastResponsePipe = newResponsePipe;
+ }
+
+ // Change handler
+
+ function onChange() {
+ writeCookie(getFormState());
+ registerPipes();
+ }
+
+ // Initialisation
+
+ var saved = readCookie();
+ if (saved) {
+ restoreFormState(saved);
+ }
+
+ var checkboxes = container.querySelectorAll('input[type="checkbox"]');
+ for (var i = 0; i < checkboxes.length; i++) {
+ checkboxes[i].addEventListener("change", onChange);
+ }
+
+ var textInputs = container.querySelectorAll('input[type="text"]');
+ for (var i = 0; i < textInputs.length; i++) {
+ textInputs[i].addEventListener("input", onChange);
+ }
+
+ var arrows = container.querySelectorAll(".request-dir-arrow, .response-dir-arrow");
+ for (var i = 0; i < arrows.length; i++) {
+ (function (arrow) {
+ arrow.addEventListener("click", function () {
+ var next = reverseDir(arrow.dataset.dir);
+ arrow.dataset.dir = next;
+ arrow.textContent = next === "atob" ? "\u2192" : "\u2190";
+ onChange();
+ });
+ })(arrows[i]);
+ }
+
+ registerPipes();
+})();
diff --git a/cmd/koralmapper/static/style.css b/cmd/koralmapper/static/style.css
index 693ce9b..1ed368e 100644
--- a/cmd/koralmapper/static/style.css
+++ b/cmd/koralmapper/static/style.css
@@ -1 +1,11 @@
-body { font-family: sans-serif; }
+.mapping-section { padding-top: 0.75rem; margin-top: 1rem; }
+.mapping { margin-bottom: 1rem; }
+.mapping-row { display: flex; align-items: center; gap: 0.75rem; margin: 0.35rem 0; }
+.mapping-fields { display: inline-flex; align-items: center; gap: 0.35rem; }
+.mapping-fields input[type="text"] { font-family: monospace; }
+.request-fields, .response-fields { flex-wrap: wrap; }
+.request-dir-arrow, .response-dir-arrow { cursor: pointer; border: 1px solid #bbb; background: #f8f8f8; border-radius: 0.25rem; min-width: 2rem; }
+.cfg-line-label { display: block; margin: 0.35rem 0 0.1rem; }
+.cfg-preview { width: 100%; box-sizing: border-box; font-family: monospace; }
+.desc { color: #555; margin-top: 0; }
+footer { background-color: #aaa; font-size:50%; text-align: right; padding: 0.25rem; }
\ No newline at end of file
diff --git a/config/config.go b/config/config.go
index cdc1e0f..73e5697 100644
--- a/config/config.go
+++ b/config/config.go
@@ -13,7 +13,9 @@
const (
defaultServer = "https://korap.ids-mannheim.de/"
defaultSDK = "https://korap.ids-mannheim.de/js/korap-plugin-latest.js"
+ defaultStylesheet = "https://korap.ids-mannheim.de/css/kalamar-plugin-latest.css"
defaultServiceURL = "https://korap.ids-mannheim.de/plugin/koralmapper"
+ defaultCookieName = "km-config"
defaultPort = 5725
defaultLogLevel = "warn"
)
@@ -58,8 +60,10 @@
// MappingConfig represents the root configuration containing multiple mapping lists
type MappingConfig struct {
SDK string `yaml:"sdk,omitempty"`
+ Stylesheet string `yaml:"stylesheet,omitempty"`
Server string `yaml:"server,omitempty"`
ServiceURL string `yaml:"serviceURL,omitempty"`
+ CookieName string `yaml:"cookieName,omitempty"`
Port int `yaml:"port,omitempty"`
LogLevel string `yaml:"loglevel,omitempty"`
Lists []MappingList `yaml:"lists,omitempty"`
@@ -156,6 +160,7 @@
// Create final configuration
result := &MappingConfig{
SDK: globalConfig.SDK,
+ Stylesheet: globalConfig.Stylesheet,
Server: globalConfig.Server,
ServiceURL: globalConfig.ServiceURL,
Port: globalConfig.Port,
@@ -173,8 +178,10 @@
func ApplyDefaults(config *MappingConfig) {
defaults := map[*string]string{
&config.SDK: defaultSDK,
+ &config.Stylesheet: defaultStylesheet,
&config.Server: defaultServer,
&config.ServiceURL: defaultServiceURL,
+ &config.CookieName: defaultCookieName,
&config.LogLevel: defaultLogLevel,
}
diff --git a/config/config_test.go b/config/config_test.go
index 845ebdd..3a7ad32 100644
--- a/config/config_test.go
+++ b/config/config_test.go
@@ -733,6 +733,7 @@
// Check that SDK and Server are set (either from config or defaults)
assert.NotEmpty(t, config.SDK)
+ assert.NotEmpty(t, config.Stylesheet)
assert.NotEmpty(t, config.Server)
})
}
@@ -759,6 +760,7 @@
// Check that defaults are applied
assert.Equal(t, defaultSDK, config.SDK)
+ assert.Equal(t, defaultStylesheet, config.Stylesheet)
assert.Equal(t, defaultServer, config.Server)
require.Len(t, config.Lists, 1)
assert.Equal(t, "test-mapper", config.Lists[0].ID)
@@ -865,6 +867,7 @@
// Check that defaults are applied for other fields
assert.Equal(t, defaultSDK, config.SDK)
+ assert.Equal(t, defaultStylesheet, config.Stylesheet)
assert.Equal(t, defaultServer, config.Server)
assert.Equal(t, defaultServiceURL, config.ServiceURL)
}