Initial commit of 001code-html Scratch frontend project.
Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
148
scratch-vm/test/unit/io_mouse_tw.js
Normal file
148
scratch-vm/test/unit/io_mouse_tw.js
Normal file
@@ -0,0 +1,148 @@
|
||||
const test = require('tap').test;
|
||||
const Mouse = require('../../src/io/mouse');
|
||||
const Runtime = require('../../src/engine/runtime');
|
||||
|
||||
test('position clamping', t => {
|
||||
const rt = new Runtime();
|
||||
const m = new Mouse(rt);
|
||||
|
||||
const BIG = 9999;
|
||||
m.postData({
|
||||
x: BIG,
|
||||
y: BIG,
|
||||
canvasWidth: 480,
|
||||
canvasHeight: 360
|
||||
});
|
||||
t.strictEquals(m.getClientX(), BIG);
|
||||
t.strictEquals(m.getClientY(), BIG);
|
||||
t.strictEquals(m.getScratchX(), 240);
|
||||
t.strictEquals(m.getScratchY(), -180);
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('mouseButtonDown', t => {
|
||||
const rt = new Runtime();
|
||||
const m = new Mouse(rt);
|
||||
|
||||
t.strictEquals(m.getButtonIsDown(0), false);
|
||||
t.strictEquals(m.getButtonIsDown(1), false);
|
||||
t.strictEquals(m.getButtonIsDown(2), false);
|
||||
m.postData({
|
||||
isDown: true,
|
||||
button: 0
|
||||
});
|
||||
t.strictEquals(m.getButtonIsDown(0), true);
|
||||
t.strictEquals(m.getButtonIsDown(1), false);
|
||||
t.strictEquals(m.getButtonIsDown(2), false);
|
||||
m.postData({
|
||||
isDown: true,
|
||||
button: 2
|
||||
});
|
||||
t.strictEquals(m.getButtonIsDown(0), true);
|
||||
t.strictEquals(m.getButtonIsDown(1), false);
|
||||
t.strictEquals(m.getButtonIsDown(2), true);
|
||||
m.postData({
|
||||
isDown: false,
|
||||
button: 2
|
||||
});
|
||||
t.strictEquals(m.getButtonIsDown(0), true);
|
||||
t.strictEquals(m.getButtonIsDown(1), false);
|
||||
t.strictEquals(m.getButtonIsDown(2), false);
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('mouseDown with buttons', t => {
|
||||
const rt = new Runtime();
|
||||
const m = new Mouse(rt);
|
||||
|
||||
t.strictEquals(m.getIsDown(), false);
|
||||
m.postData({
|
||||
isDown: true,
|
||||
button: 0
|
||||
});
|
||||
t.strictEquals(m.getIsDown(), true);
|
||||
m.postData({
|
||||
isDown: true,
|
||||
button: 2
|
||||
});
|
||||
t.strictEquals(m.getIsDown(), true);
|
||||
m.postData({
|
||||
isDown: false,
|
||||
button: 2
|
||||
});
|
||||
t.strictEquals(m.getIsDown(), false);
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('missing button is treated as left', t => {
|
||||
const rt = new Runtime();
|
||||
const m = new Mouse(rt);
|
||||
|
||||
t.strictEquals(m.getButtonIsDown(0), false);
|
||||
m.postData({
|
||||
isDown: true
|
||||
});
|
||||
t.strictEquals(m.getButtonIsDown(0), true);
|
||||
m.postData({
|
||||
isDown: false
|
||||
});
|
||||
t.strictEquals(m.getButtonIsDown(0), false);
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('usesRightClickDown', t => {
|
||||
const rt = new Runtime();
|
||||
const m = new Mouse(rt);
|
||||
|
||||
t.strictEquals(m.usesRightClickDown, false);
|
||||
t.strictEquals(m.getButtonIsDown(2), false);
|
||||
t.strictEquals(m.usesRightClickDown, true);
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('no rounding when misc limits disabled', t => {
|
||||
const rt = new Runtime();
|
||||
const m = new Mouse(rt);
|
||||
|
||||
m.postData({
|
||||
x: 241,
|
||||
y: 541,
|
||||
canvasWidth: 960,
|
||||
canvasHeight: 720
|
||||
});
|
||||
t.equal(m.getScratchX(), -119);
|
||||
t.equal(m.getScratchY(), -90);
|
||||
|
||||
rt.setRuntimeOptions({
|
||||
miscLimits: false
|
||||
});
|
||||
t.equal(m.getScratchX(), -119.5);
|
||||
t.equal(m.getScratchY(), -90.5);
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('accepts 0 as x and y position', t => {
|
||||
const rt = new Runtime();
|
||||
const m = new Mouse(rt);
|
||||
|
||||
m.postData({
|
||||
x: 1,
|
||||
y: 2,
|
||||
canvasWidth: 480,
|
||||
canvasHeight: 360
|
||||
});
|
||||
t.equal(m.getClientX(), 1);
|
||||
t.equal(m.getClientY(), 2);
|
||||
|
||||
m.postData({
|
||||
x: 0,
|
||||
y: 0,
|
||||
canvasWidth: 480,
|
||||
canvasHeight: 360
|
||||
});
|
||||
t.equal(m.getClientX(), 0);
|
||||
t.equal(m.getClientY(), 0);
|
||||
|
||||
t.end();
|
||||
});
|
||||
Reference in New Issue
Block a user