diff --git a/package-lock.json b/package-lock.json index 3b63a1e..3049081 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7887,6 +7887,12 @@ "tslib": "^2.0.3" } }, + "node-blob": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/node-blob/-/node-blob-0.0.2.tgz", + "integrity": "sha512-82wiGzMht96gPQDUYaZBdZEVvYD9aEhU6Bt9KLCr4rADZPRd7dQVY2Yj0ZG/1vp4DhVkL49nJT/M3CiMTAt3ag==", + "dev": true + }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -9274,7 +9280,7 @@ }, "scratch-vm": { "version": "git://github.com/TurboWarp/scratch-vm.git#dbae5fe7d680c80fd59e244c86f4e55b4a41829c", - "from": "git://github.com/TurboWarp/scratch-vm.git#dbae5fe7d680c80fd59e244c86f4e55b4a41829c", + "from": "git://github.com/TurboWarp/scratch-vm.git#develop", "requires": { "@vernier/godirect": "1.5.0", "arraybuffer-loader": "^1.0.6", diff --git a/package.json b/package.json index 03555f4..969e189 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "file-loader": "^6.2.0", "html-webpack-plugin": "^4.5.2", "jest": "^27.0.4", + "node-blob": "0.0.2", "node-fetch": "^2.6.1", "style-loader": "^2.0.0", "svelte-loader": "^3.1.2", diff --git a/test/packager/download-project.test.js b/test/packager/download-project.test.js new file mode 100644 index 0000000..8b98b8e --- /dev/null +++ b/test/packager/download-project.test.js @@ -0,0 +1,32 @@ +import fs from 'fs'; +import path from 'path'; +import Blob from 'node-blob'; +import downloadProject from '../../src/packager/lib/download-project' + +global.Blob = Blob; + +const emptyProgressCallback = () => {}; + +const readTestProject = (name) => { + const buffer = fs.readFileSync(path.resolve(__dirname, 'projects', name)); + return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); +}; + +test('sb3', async () => { + const project = await downloadProject(await readTestProject('no-music.sb3'), emptyProgressCallback); + expect(project.type).toBe('sb3'); + expect(project.analysis.stageVariables['`jEk@4|i[#Fk?(8x)AV.-my variable']).toEqual({ + name: 'my variable', + isCloud: false + }); + expect(project.analysis.stageVariables['BHEUfE_ev.6Eib^2/3nu']).toEqual({ + name: '☁ Cloud variable', + isCloud: true + }); + expect(project.analysis.usesMusic).toBe(false); +}); + +test('sb3 with music', async () => { + const project = await downloadProject(await readTestProject('music.sb3'), emptyProgressCallback); + expect(project.analysis.usesMusic).toBe(true); +}); diff --git a/test/packager/projects/music.sb3 b/test/packager/projects/music.sb3 new file mode 100644 index 0000000..91e7ac3 Binary files /dev/null and b/test/packager/projects/music.sb3 differ diff --git a/test/packager/projects/no-music.sb3 b/test/packager/projects/no-music.sb3 new file mode 100644 index 0000000..2f3589d Binary files /dev/null and b/test/packager/projects/no-music.sb3 differ