Skip to content

Commit

Permalink
[VirtualInput] Fixed getVirtualEvents generating the wrong events
Browse files Browse the repository at this point in the history
- Added VirtualInputTest
  • Loading branch information
ScribbleTAS committed Jan 29, 2024
1 parent 75406a8 commit 05a0e49
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/main/java/com/minecrafttas/tasmod/TASmodClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public void onInitializeClient() {
} else {
config.reset(ConfigOptions.FileToOpen);
}
// virtual=new VirtualInput2(fileOnStart); TODO Move fileOnStart to PlaybackController
virtual=new VirtualInput2(); //TODO Move fileOnStart to PlaybackController

// Initialize InfoHud
hud = new InfoHud();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ public VirtualKeyboard2(Set<Integer> pressedKeys, List<Character> charList, List
* @param character The character that is associated with that key. Can change between keyboards or whenever shift is held in combination.
*/
public void update(int keycode, boolean keystate, char character) {
charList.clear();
setPressed(keycode, keystate);
addChar(character);

Expand Down Expand Up @@ -175,9 +176,11 @@ private char getOrMinChar(Character charr){
*/
public void getVirtualEvents(VirtualKeyboard2 nextKeyboard, Queue<VirtualKeyboardEvent> reference) {
if (isParent()) {
getSubticks().forEach(keyboard -> {
keyboard.getDifference(nextKeyboard, reference);
});
VirtualKeyboard2 currentSubtick = this;
for(VirtualKeyboard2 subtick : nextKeyboard.getSubticks()) {
currentSubtick.getDifference(subtick, reference);
currentSubtick = subtick;
}
}
}

Expand Down Expand Up @@ -205,7 +208,7 @@ public String toString() {
return String.format("%s;%s", super.toString(), charListToString(charList));
}
}

private String charListToString(List<Character> charList) {
String charString = "";
if (!charList.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ public void getDifference(VirtualMouse2 nextPeripheral, Queue<VirtualMouseEvent>

public void getVirtualEvents(VirtualMouse2 nextPeripheral, Queue<VirtualMouseEvent> reference) {
if(isParent()) {
getSubticks().forEach(mouse -> {
mouse.getDifference(nextPeripheral, reference);
nextPeripheral.getSubticks().forEach(mouse -> {
getDifference(mouse, reference);
});
}
}
Expand All @@ -115,7 +115,6 @@ public void getVirtualEvents(VirtualMouse2 nextPeripheral, Queue<VirtualMouseEve
protected void clear() {
super.clear();
clearMouseData();

}

private void clearMouseData() {
Expand Down
110 changes: 110 additions & 0 deletions src/test/java/tasmod/virtual/keyboard/VirtualInputTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package tasmod.virtual.keyboard;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import com.minecrafttas.tasmod.virtual.VirtualCameraAngle2;
import com.minecrafttas.tasmod.virtual.VirtualInput2;
import com.minecrafttas.tasmod.virtual.VirtualKey2;
import com.minecrafttas.tasmod.virtual.VirtualKeyboard2;
import com.minecrafttas.tasmod.virtual.VirtualMouse2;

class VirtualInputTest {

/**
* Test constructor initializing keyboard, mouse and camera_angle
*/
@Test
void testConstructor() {
VirtualInput2 virtual = new VirtualInput2();

assertNotNull(virtual.KEYBOARD);
assertNotNull(virtual.MOUSE);
assertNotNull(virtual.CAMERA_ANGLE);
}

/**
* Tests if a keyboard can be preloaded
*/
@Test
@Disabled
void testPreloadedKeyboard() {
//TODO
}

/**
* Simulate key presses
*/
@Test
void testKeyboardAddPresses() {
VirtualInput2 virtual = new VirtualInput2();

// Simulate pressing keys WAS on the keyboard
virtual.KEYBOARD.updateNextKeyboard(VirtualKey2.W.getKeycode(), true, 'w');
virtual.KEYBOARD.updateNextKeyboard(VirtualKey2.A.getKeycode(), true, 'a');
virtual.KEYBOARD.updateNextKeyboard(VirtualKey2.S.getKeycode(), true, 's');

// Load the next keyboard events
virtual.KEYBOARD.nextKeyboardTick();

//W

// Load new subtick
assertTrue(virtual.KEYBOARD.nextKeyboardSubtick());

// Read out values from the subtick
assertEquals(VirtualKey2.W.getKeycode(), virtual.KEYBOARD.getEventKeyboardKey());
assertEquals(true, virtual.KEYBOARD.getEventKeyboardState());
assertEquals('w', virtual.KEYBOARD.getEventKeyboardCharacter());

//A

// Load new subtick
assertTrue(virtual.KEYBOARD.nextKeyboardSubtick());

// Read out values from the subtick
assertEquals(VirtualKey2.A.getKeycode(), virtual.KEYBOARD.getEventKeyboardKey());
assertEquals(true, virtual.KEYBOARD.getEventKeyboardState());
assertEquals('a', virtual.KEYBOARD.getEventKeyboardCharacter());

//S

// Load new subtick
assertTrue(virtual.KEYBOARD.nextKeyboardSubtick());

// Read out values from the subtick
assertEquals(VirtualKey2.S.getKeycode(), virtual.KEYBOARD.getEventKeyboardKey());
assertEquals(true, virtual.KEYBOARD.getEventKeyboardState());
assertEquals('s', virtual.KEYBOARD.getEventKeyboardCharacter());

// Check if subtick list is empty
assertFalse(virtual.KEYBOARD.nextKeyboardSubtick());
}

@Test
void testKeyboardRemovePresses() {
VirtualKeyboard2 preloadedKeyboard = new VirtualKeyboard2();

preloadedKeyboard.update(VirtualKey2.W.getKeycode(), true, 'w');
VirtualInput2 virtual = new VirtualInput2(preloadedKeyboard, new VirtualMouse2(), new VirtualCameraAngle2());

virtual.KEYBOARD.updateNextKeyboard(VirtualKey2.W.getKeycode(), false, Character.MIN_VALUE);


// Load the next keyboard events
virtual.KEYBOARD.nextKeyboardTick();

// Load a new subtick
assertTrue(virtual.KEYBOARD.nextKeyboardSubtick());

// Read out values from the subtick
assertEquals(VirtualKey2.W.getKeycode(), virtual.KEYBOARD.getEventKeyboardKey());
assertEquals(false, virtual.KEYBOARD.getEventKeyboardState());
assertEquals(Character.MIN_VALUE, virtual.KEYBOARD.getEventKeyboardCharacter());

// Check if subtick list is empty
assertFalse(virtual.KEYBOARD.nextKeyboardSubtick());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import com.minecrafttas.tasmod.virtual.VirtualKey2;
Expand Down Expand Up @@ -240,7 +241,7 @@ void testUpdate(){

List<VirtualKeyboard2> expected = new ArrayList<>();
expected.add(new VirtualKeyboard2(new HashSet<Integer>(Arrays.asList(VirtualKey2.W.getKeycode())), Arrays.asList('w')));
expected.add(new VirtualKeyboard2(new HashSet<Integer>(Arrays.asList(VirtualKey2.W.getKeycode(), VirtualKey2.A.getKeycode())), Arrays.asList('w', 'A')));
expected.add(new VirtualKeyboard2(new HashSet<Integer>(Arrays.asList(VirtualKey2.W.getKeycode(), VirtualKey2.A.getKeycode())), Arrays.asList('A')));

assertIterableEquals(expected, test.getSubticks());
}
Expand All @@ -258,4 +259,10 @@ void testGetDifference(){

assertIterableEquals(expected, actual);
}

@Test
@Disabled
void testGetVirtualEvents() {
//TODO
}
}

0 comments on commit 05a0e49

Please sign in to comment.