diff --git a/src/mapml/layers/MapMLLayer.js b/src/mapml/layers/MapMLLayer.js
index 336e116f0..a46d1e4a1 100644
--- a/src/mapml/layers/MapMLLayer.js
+++ b/src/mapml/layers/MapMLLayer.js
@@ -345,6 +345,8 @@ export var MapMLLayer = L.LayerGroup.extend({
layer._titleIsReadOnly = true;
} else if (layer._layerEl && layer._layerEl.hasAttribute('label')) {
layer._title = layer._layerEl.getAttribute('label').trim();
+ } else {
+ layer._title = M.options.locale.dfLayer;
}
}
function parseLicenseAndLegend() {
diff --git a/test/e2e/layers/layerLabel.html b/test/e2e/layers/layerLabel.html
new file mode 100644
index 000000000..f4eb9e130
--- /dev/null
+++ b/test/e2e/layers/layerLabel.html
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+ Layer Control Tests
+
+
+
+
+
+
+
+
+
+
+
+
+ Layer with no label
+
+
+ -75.866089 45.463020
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/e2e/layers/layerLabel.test.js b/test/e2e/layers/layerLabel.test.js
new file mode 100644
index 000000000..307525703
--- /dev/null
+++ b/test/e2e/layers/layerLabel.test.js
@@ -0,0 +1,32 @@
+import { test, expect, chromium } from '@playwright/test';
+
+test.describe('Layer Label Tests', () => {
+ let page;
+ let context;
+ test.beforeAll(async function () {
+ context = await chromium.launchPersistentContext('');
+ page =
+ context.pages().find((page) => page.url() === 'about:blank') ||
+ (await context.newPage());
+ await page.goto('layerLabel.html');
+ });
+
+ test.afterAll(async function () {
+ await context.close();
+ });
+
+ test('Name of unnamed layer is Layer', async () => {
+ await page.waitForTimeout(500);
+ const label = await page
+ .locator('body > mapml-viewer > layer-')
+ .evaluate((elem) => elem.label);
+ expect(label).toEqual('Layer');
+ });
+
+ test('Unnamed layer shows up as Layer in layer control', async () => {
+ const text = await page
+ .locator('body > mapml-viewer >> css=div > label.mapml-layer-item-toggle')
+ .evaluate((text) => text.textContent);
+ expect(text).toEqual('Layer');
+ });
+});