From 8b9ce99762286116f21cd916f58d76821b24e156 Mon Sep 17 00:00:00 2001
From: Karishma Chadha <kchadha@scratch.mit.edu>
Date: Mon, 16 May 2022 17:33:21 -0400
Subject: [PATCH] Add tests that serializing a costume does not save any data
 for assets that were missing when the project was first loaded

---
 test/integration/sb3_missing_svg.js     | 10 ++++++++++
 test/integration/sprite3_missing_svg.js |  8 ++++++++
 2 files changed, 18 insertions(+)

diff --git a/test/integration/sb3_missing_svg.js b/test/integration/sb3_missing_svg.js
index 9e1445f5a..150f97469 100644
--- a/test/integration/sb3_missing_svg.js
+++ b/test/integration/sb3_missing_svg.js
@@ -12,6 +12,7 @@ const makeTestStorage = require('../fixtures/make-test-storage');
 const FakeRenderer = require('../fixtures/fake-renderer');
 const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer;
 const VirtualMachine = require('../../src/index');
+const {serializeCostumes} = require('../../src/serialization/serialize-assets');
 
 const projectUri = path.resolve(__dirname, '../fixtures/missing_svg.sb3');
 const project = readFileToBuffer(projectUri);
@@ -82,6 +83,15 @@ test('load and then save sb3 project with missing costume file', t => {
     // Test that we didn't save any data about the costume being broken
     t.notOk(missingCostume.broken);
 
+    t.end();
+});
+
+test('serializeCostume does not save data for missing costume', t => {
+    const costumeDescs = serializeCostumes(vm.runtime);
+    t.equal(costumeDescs.length, 1); // Should only have one costume, the backdrop
+
+    t.not(costumeDescs[0].fileName, `${missingCostumeAssetId}.svg`);
+
     t.end();
     process.nextTick(process.exit);
 });
diff --git a/test/integration/sprite3_missing_svg.js b/test/integration/sprite3_missing_svg.js
index 70e3ab046..1df90dacc 100644
--- a/test/integration/sprite3_missing_svg.js
+++ b/test/integration/sprite3_missing_svg.js
@@ -12,6 +12,7 @@ const makeTestStorage = require('../fixtures/make-test-storage');
 const FakeRenderer = require('../fixtures/fake-renderer');
 const readFileToBuffer = require('../fixtures/readProjectFile').readFileToBuffer;
 const VirtualMachine = require('../../src/index');
+const {serializeCostumes} = require('../../src/serialization/serialize-assets');
 
 // The particular project that we're loading doesn't matter for this test
 const projectUri = path.resolve(__dirname, '../fixtures/default.sb3');
@@ -80,6 +81,13 @@ test('load and then save sprite3 with missing vector costume file', t => {
     // Test that we didn't save any data about the costume being broken
     t.notOk(missingCostume.broken);
 
+    t.end();
+});
+
+test('serializeCostume does not save data for missing costume', t => {
+    const costumeDescs = serializeCostumes(vm.runtime, vm.runtime.targets[2].id);
+    t.equal(costumeDescs.length, 0);
+    
     t.end();
     process.nextTick(process.exit);
 });