mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-11-04 12:54:23 +01:00 
			
		
		
		
	* feat: decouple package deps and introduce yarn workspaces * update root directory * fix * fix scripts * fix lint * update path in scripts * remove yarn.lock files from packages * ignore workspace * dummy * dummy * remove comment check * revert workflow changes * ignore ws when installing gh actions * remove log * update path * fix * fix typo
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { decodePngMetadata, decodeSvgMetadata } from "../excalidraw/data/image";
 | 
						|
import { ImportedDataState } from "../excalidraw/data/types";
 | 
						|
import * as utils from "../utils";
 | 
						|
import { API } from "../excalidraw/tests/helpers/api";
 | 
						|
 | 
						|
// NOTE this test file is using the actual API, unmocked. Hence splitting it
 | 
						|
// from the other test file, because I couldn't figure out how to test
 | 
						|
// mocked and unmocked API in the same file.
 | 
						|
 | 
						|
describe("embedding scene data", () => {
 | 
						|
  describe("exportToSvg", () => {
 | 
						|
    it("embedding scene data shouldn't modify them", async () => {
 | 
						|
      const rectangle = API.createElement({ type: "rectangle" });
 | 
						|
      const ellipse = API.createElement({ type: "ellipse" });
 | 
						|
 | 
						|
      const sourceElements = [rectangle, ellipse];
 | 
						|
 | 
						|
      const svgNode = await utils.exportToSvg({
 | 
						|
        elements: sourceElements,
 | 
						|
        appState: {
 | 
						|
          viewBackgroundColor: "#ffffff",
 | 
						|
          gridSize: null,
 | 
						|
          exportEmbedScene: true,
 | 
						|
        },
 | 
						|
        files: null,
 | 
						|
      });
 | 
						|
 | 
						|
      const svg = svgNode.outerHTML;
 | 
						|
 | 
						|
      const parsedString = await decodeSvgMetadata({ svg });
 | 
						|
      const importedData: ImportedDataState = JSON.parse(parsedString);
 | 
						|
 | 
						|
      expect(sourceElements.map((x) => x.id)).toEqual(
 | 
						|
        importedData.elements?.map((el) => el.id),
 | 
						|
      );
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  // skipped because we can't test png encoding right now
 | 
						|
  // (canvas.toBlob not supported in jsdom)
 | 
						|
  describe.skip("exportToBlob", () => {
 | 
						|
    it("embedding scene data shouldn't modify them", async () => {
 | 
						|
      const rectangle = API.createElement({ type: "rectangle" });
 | 
						|
      const ellipse = API.createElement({ type: "ellipse" });
 | 
						|
 | 
						|
      const sourceElements = [rectangle, ellipse];
 | 
						|
 | 
						|
      const blob = await utils.exportToBlob({
 | 
						|
        mimeType: "image/png",
 | 
						|
        elements: sourceElements,
 | 
						|
        appState: {
 | 
						|
          viewBackgroundColor: "#ffffff",
 | 
						|
          gridSize: null,
 | 
						|
          exportEmbedScene: true,
 | 
						|
        },
 | 
						|
        files: null,
 | 
						|
      });
 | 
						|
 | 
						|
      const parsedString = await decodePngMetadata(blob);
 | 
						|
      const importedData: ImportedDataState = JSON.parse(parsedString);
 | 
						|
 | 
						|
      expect(sourceElements.map((x) => x.id)).toEqual(
 | 
						|
        importedData.elements?.map((el) => el.id),
 | 
						|
      );
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |