diff --git a/tests/unit/announcements.test.ts b/tests/unit/announcements.test.ts
index eb3a9d8..f94cd2d 100644
--- a/tests/unit/announcements.test.ts
+++ b/tests/unit/announcements.test.ts
@@ -1,4 +1,4 @@
-import { afterEach, describe, expect, it } from 'vitest';
+import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import { Announcer, getPageAnnouncement } from '../../src/announcements.js';
describe('announcer', () => {
@@ -62,3 +62,69 @@ describe('announcer', () => {
});
});
});
+
+describe('getPageAnnouncement', () => {
+ const announcements = {
+ visit: 'Loaded {title}',
+ url: 'page at {url}'
+ };
+
+ const multiLangAnnouncements = {
+ en: {
+ visit: 'Loaded {title}',
+ url: 'page at {url}'
+ },
+ de: {
+ visit: '{title} geladen',
+ url: 'Seite unter {url}'
+ },
+ '*': {
+ visit: '{title}',
+ url: '{url}'
+ }
+ };
+
+ const defaults = { headingSelector: 'h1', announcements };
+
+ describe('headings', () => {
+ it('gets heading title', () => {
+ document.body.innerHTML = '
Title
';
+ const announcement = getPageAnnouncement(defaults);
+ expect(announcement).toBe('Loaded Title');
+ });
+
+ it('prefers heading label', () => {
+ document.body.innerHTML = 'Title
';
+ const announcement = getPageAnnouncement(defaults);
+ expect(announcement).toBe('Loaded Label');
+ });
+
+ it('uses heading selector', () => {
+ document.body.innerHTML = 'Section
Title
';
+ const announcement = getPageAnnouncement(defaults);
+ expect(announcement).toBe('Loaded Title');
+ });
+
+ it('makes heading selector configurable', () => {
+ document.body.innerHTML = 'Title
Section
';
+ const announcement = getPageAnnouncement({ ...defaults, headingSelector: 'h2' });
+ expect(announcement).toBe('Loaded Section');
+ });
+ });
+
+ describe('fallbacks', () => {
+ it('uses document title if no heading is found', () => {
+ document.title = 'Document';
+ document.body.innerHTML = '';
+ const announcement = getPageAnnouncement(defaults);
+ expect(announcement).toBe('Loaded Document');
+ });
+
+ it('uses url if no title is found', () => {
+ document.body.innerHTML = '';
+ document.title = '';
+ const announcement = getPageAnnouncement(defaults);
+ expect(announcement).toBe('Loaded page at /');
+ });
+ });
+});