File size: 4,673 Bytes
7aec436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import fs from 'fs';
import path from 'path';
import {downloadProject} from '../../src/packager/download-project'

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(readTestProject('no-music.sb3'), () => {});
  expect(project.type).toBe('sb3');
  expect(project.analysis.stageVariables).toEqual([
    {
      name: 'my variable',
      isCloud: false
    },
    {
      name: '☁ Cloud variable',
      isCloud: true
    }
  ]);
  expect(project.analysis.usesMusic).toBe(false);
  expect(project.analysis.extensions).toStrictEqual([]);
});

test('sb3 with implied cloud variables', async () => {
  const project = await downloadProject(readTestProject('implied-cloud-variables.sb3'), () => {});
  expect(project.type).toBe('sb3');
  expect(project.analysis.stageVariables).toEqual([
    {
      name: '☁ Implied',
      isCloud: true
    }
  ]);
});

test('sb3 with comments', async () => {
  const project = await downloadProject(readTestProject('comments.sb3'), () => {});
  expect(project.type).toBe('sb3');
  expect(project.analysis.stageComments).toEqual([
    'This comment contains configuration for gamepad support in third-party tools or websites such as https://turbowarp.org/\nDo not edit by hand\n{\"axes\":[{\"type\":\"virtual_cursor\",\"high\":\"+x\",\"low\":\"-x\",\"sensitivity\":0.6,\"deadZone\":0.2},{\"type\":\"virtual_cursor\",\"high\":\"-y\",\"low\":\"+y\",\"sensitivity\":0.6,\"deadZone\":0.2},{\"type\":\"virtual_cursor\",\"high\":\"+x\",\"low\":\"-x\",\"sensitivity\":0.6,\"deadZone\":0.2},{\"type\":\"virtual_cursor\",\"high\":\"-y\",\"low\":\"+y\",\"sensitivity\":0.6,\"deadZone\":0.2}],\"buttons\":[{\"type\":\"key\",\"high\":null},{\"type\":\"key\",\"high\":null},{\"type\":\"key\",\"high\":null},{\"type\":\"key\",\"high\":null},{\"type\":\"mousedown\"},{\"type\":\"mousedown\"},{\"type\":\"mousedown\"},{\"type\":\"mousedown\"},{\"type\":\"key\",\"high\":null},{\"type\":\"key\",\"high\":null},{\"type\":\"key\",\"high\":null},{\"type\":\"key\",\"high\":null},{\"type\":\"key\",\"high\":\"ArrowUp\"},{\"type\":\"key\",\"high\":\"ArrowDown\"},{\"type\":\"key\",\"high\":\"ArrowLeft\"},{\"type\":\"key\",\"high\":\"ArrowRight\"},{\"type\":\"key\",\"high\":null}]} // _gamepad_',
    'Configuration for https://turbowarp.org/\nYou can move, resize, and minimize this comment, but don\'t edit it by hand. This comment can be deleted to remove the stored settings.\n{\"framerate\":30,\"runtimeOptions\":{\"maxClones\":300,\"miscLimits\":true,\"fencing\":true},\"interpolation\":false,\"turbo\":false,\"hq\":false} // _twconfig_'
  ]);
});

test('sb3 with music', async () => {
  const project = await downloadProject(readTestProject('music.sb3'), () => {});
  expect(project.analysis.usesMusic).toBe(true);
});

test('sb2', async () => {
  const project = await downloadProject(readTestProject('no-music.sb2'), () => {});
  expect(project.arrayBuffer.byteLength).toBe(6259);
  expect(project.type).toBe('blob');
  expect(project.analysis.usesMusic).toBe(false);
  expect(project.analysis.stageVariables).toEqual([
    {
      name: '☁ Variable',
      isCloud: true
    },
    {
      name: 'Variable 2',
      isCloud: false
    }
  ]);
  expect(project.analysis.extensions).toStrictEqual([]);
});

test('sb2 with music', async () => {
  const project = await downloadProject(readTestProject('music.sb2'), () => {});
  expect(project.arrayBuffer.byteLength).toBe(6293);
  expect(project.type).toBe('blob');
  expect(project.analysis.usesMusic).toBe(true);
});

test('sb', async () => {
  const project = await downloadProject(readTestProject('project.sb'), () => {});
  expect(project.arrayBuffer.byteLength).toBe(554);
  expect(project.type).toBe('blob');
  expect(project.analysis.extensions).toStrictEqual([]);
});

test('subdirectory', async () => {
  const project = await downloadProject(readTestProject('subdirectory.sb3'), () => {});
  expect(project.type).toBe('sb3');
});

test('invalid project', async () => {
  try {
    await downloadProject(readTestProject('invalid.txt'), () => {});
  } catch (e) {
    return;
  }
  throw new Error('Expected error, got success');
});

test('custom extensions', async () => {
  const project = await downloadProject(readTestProject('fetch.sb3'), () => {});
  expect(project.analysis.extensions).toStrictEqual([
    'https://extensions.turbowarp.org/fetch.js'
  ]);
});