/* 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);
  });
});