Skip to content

Commit 8bb8a03

Browse files
committed
add roundtrip tests
1 parent 0aa0d1e commit 8bb8a03

5 files changed

Lines changed: 63 additions & 1 deletion

File tree

src/processors/gridsetProcessor.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1780,14 +1780,22 @@ class GridsetProcessor extends BaseProcessor {
17801780
'?xml': { '@_version': '1.0', '@_encoding': 'UTF-8' },
17811781
GridSetSettings: {
17821782
'@_xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
1783+
Name: tree.metadata?.name || '',
1784+
Description: tree.metadata?.description || '',
1785+
Author: tree.metadata?.author || '',
1786+
PrimaryLanguage: tree.metadata?.locale || 'en-US',
17831787
StartGrid: startGrid,
17841788
// Add other common Grid3 settings
1789+
Thumbnail: (tree.metadata as any)?.thumbnail || '',
1790+
ThumbnailBackground: (tree.metadata as any)?.thumbnailBackground || '',
1791+
DocumentationUrl: tree.metadata?.homepageUrl || tree.metadata?.url || '',
1792+
DocumentationSlug: (tree.metadata as any)?.documentationSlug || '',
17851793
ScanEnabled: 'false',
17861794
ScanTimeoutMs: '2000',
17871795
HoverEnabled: 'false',
17881796
HoverTimeoutMs: '1000',
17891797
MouseclickEnabled: 'true',
1790-
Language: 'en-US',
1798+
Language: tree.metadata?.locale || 'en-US',
17911799
},
17921800
};
17931801

src/processors/snapProcessor.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,18 @@ class SnapProcessor extends BaseProcessor {
820820
Data BLOB,
821821
RefCount INTEGER DEFAULT 1
822822
);
823+
824+
CREATE TABLE IF NOT EXISTS PageSetProperties (
825+
Id INTEGER PRIMARY KEY,
826+
Name TEXT,
827+
Description TEXT,
828+
Author TEXT,
829+
Locale TEXT,
830+
DefaultHomePageUniqueId TEXT,
831+
DefaultKeyboardPageUniqueId TEXT,
832+
DashboardUniqueId TEXT,
833+
ToolBarUniqueId TEXT
834+
);
823835
`);
824836

825837
// Insert pages
@@ -978,6 +990,27 @@ class SnapProcessor extends BaseProcessor {
978990
insertPlacement.run(placementIdCounter++, elementRefId, gridPosition);
979991
});
980992
});
993+
994+
// Insert PageSetProperties metadata
995+
const insertProps = db.prepare(`
996+
INSERT INTO PageSetProperties (
997+
Id, Name, Description, Author, Locale,
998+
DefaultHomePageUniqueId, DefaultKeyboardPageUniqueId,
999+
DashboardUniqueId, ToolBarUniqueId
1000+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
1001+
`);
1002+
1003+
insertProps.run(
1004+
1,
1005+
tree.metadata?.name || null,
1006+
tree.metadata?.description || null,
1007+
tree.metadata?.author || null,
1008+
tree.metadata?.locale || null,
1009+
tree.metadata?.defaultHomePageId || tree.rootId || null,
1010+
tree.metadata?.defaultKeyboardPageId || null,
1011+
tree.metadata?.dashboardId || null,
1012+
tree.metadata?.hasGlobalToolbar ? tree.metadata.toolbarId || null : null
1013+
);
9811014
} finally {
9821015
db.close();
9831016
}

test/gridsetProcessor.roundtrip.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ describe('GridsetProcessor round-trip', () => {
3232
expect(Object.keys(tree2.pages).length).toBeGreaterThan(0);
3333
expect(Object.keys(tree1.pages).length).toBe(Object.keys(tree2.pages).length);
3434

35+
// Compare metadata
36+
expect(tree2.metadata.name).toBe(tree1.metadata.name);
37+
expect(tree2.metadata.description?.trim()).toBe(tree1.metadata.description?.trim());
38+
if (tree1.metadata.locale) {
39+
expect(tree2.metadata.locale).toBe(tree1.metadata.locale);
40+
}
41+
3542
// Compare page names and button counts
3643
for (const pageId in tree1.pages) {
3744
expect(tree2.pages).toHaveProperty(pageId);

test/obfProcessor.roundtrip.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ describe('OBFProcessor round-trip', () => {
3333
// Compare basic structure
3434
expect(Object.keys(tree1.pages).length).toBe(Object.keys(tree2.pages).length);
3535

36+
// Compare metadata
37+
expect(tree2.metadata.name).toBe(tree1.metadata.name);
38+
expect(tree2.metadata.description).toBe(tree1.metadata.description);
39+
expect(tree2.metadata.locale).toBe(tree1.metadata.locale);
40+
if (tree1.metadata.url) expect(tree2.metadata.url).toBe(tree1.metadata.url);
41+
3642
// Compare page content
3743
for (const pageId in tree1.pages) {
3844
expect(tree2.pages).toHaveProperty(pageId);
@@ -66,6 +72,10 @@ describe('OBFProcessor round-trip', () => {
6672
// Compare structure
6773
expect(Object.keys(tree2.pages).length).toBeGreaterThan(0);
6874
expect(Object.keys(tree1.pages).length).toBe(Object.keys(tree2.pages).length);
75+
76+
// Compare metadata from root board
77+
expect(tree2.metadata.name).toBe(tree1.metadata.name);
78+
expect(tree2.metadata.locale).toBe(tree1.metadata.locale);
6979
});
7080

7181
it('can save and load a simple constructed tree', () => {

test/snapProcessor.roundtrip.test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ describe("SnapProcessor round-trip", () => {
2424
const btnLabels2 = tree2.pages[pid].buttons.map((b) => b.label).sort();
2525
expect(btnLabels1).toEqual(btnLabels2);
2626
}
27+
28+
// Compare metadata
29+
expect(tree2.metadata.name).toBe(tree1.metadata.name);
30+
expect(tree2.metadata.locale).toBe(tree1.metadata.locale);
2731
});
2832

2933
it.skip("round-trips .sps file without losing pages (saveFromTree not implemented)", () => {

0 commit comments

Comments
 (0)