/* Copyright 2021 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { $uid } from "../../src/core/xfa/xfa_object.js";
import { DataHandler } from "../../src/core/xfa/data.js";
import { searchNode } from "../../src/core/xfa/som.js";
import { XFAParser } from "../../src/core/xfa/parser.js";
describe("Data serializer", function () {
it("should serialize data with an annotationStorage", function () {
const xml = `
bar
1
Giant Slingshot
1
250.00
250.00
<àé>àé>
2
Road Runner Bait, large bag
5
12.00
60.00
310.00
24.80
334.80
foo
`;
const root = new XFAParser().parse(xml);
const data = root.datasets.data;
const dataHandler = new DataHandler(root, data);
const storage = new Map();
for (const [path, value] of [
["Receipt.Detail[0].Units", "12&3"],
["Receipt.Detail[0].Unit_Price", "456>"],
["Receipt.Detail[0].Total_Price", "789"],
["Receipt.Detail[0].àé", "1011"],
["Receipt.Detail[1].PartNo", "foo-bar😀"],
["Receipt.Detail[1].Description", "hello world"],
]) {
storage.set(searchNode(root, data, path)[0][$uid], { value });
}
const serialized = dataHandler.serialize(storage);
const expected = `barfoo1Giant Slingshot12&3456>789<\xC3\xA0\xC3\xA9>1011\xC3\xA0\xC3\xA9>2hello world512.0060.00310.0024.80334.80`;
expect(serialized).toEqual(expected);
});
});