Emberveil source

tests/DisplayAndSoundCheck.java

import java.awt.*;
import java.awt.event.*;
/** Checks scaled bank/game clicks, zoom bounds, fullscreen return and invalid sound input. */
public final class DisplayAndSoundCheck {
 static int value(Game game,String name)throws Exception{java.lang.reflect.Field f=RSApplet.class.getDeclaredField(name);f.setAccessible(true);return f.getInt(game);}
 static int checks;static void check(boolean ok,String label){if(!ok)throw new AssertionError(label);checks++;}
 public static void main(String[] args)throws Exception {
  Game game=new Game();game.myWidth=765;game.myHeight=503;
  int[][] sizes={{765,503},{1530,1006},{1920,1080},{1024,768},{400,300}};
  for(int[] size:sizes) {
   game.setSize(size[0],size[1]);double scale=game.displayScale();
   for(int[] logical:new int[][]{{256,167},{600,260},{100,100},{700,450}}) {
    int x=(int)Math.ceil((size[0]-765*scale)/2+logical[0]*scale),y=(int)Math.ceil((size[1]-503*scale)/2+logical[1]*scale);
    check(Math.abs(game.logicalX(x)-logical[0])<=1&&Math.abs(game.logicalY(y)-logical[1])<=1,"scaled click "+size[0]);
    game.mousePressed(new MouseEvent(game,MouseEvent.MOUSE_PRESSED,0,0,x,y,1,false,MouseEvent.BUTTON1));
    check(Math.abs(value(game,"clickX")-logical[0])<=1&&Math.abs(value(game,"clickY")-logical[1])<=1,"bank/inventory mouse event");
   }
  }
  game.setSize(1920,1080);int priorClick=value(game,"clickX");game.mousePressed(new MouseEvent(game,MouseEvent.MOUSE_PRESSED,0,0,0,0,1,false,MouseEvent.BUTTON1));check(value(game,"clickX")==priorClick,"black margin cannot click game");
  Game.zoom=3;game.changeCameraZoom(-100);check(Game.zoom==-1,"near zoom bound");game.changeCameraZoom(100);check(Game.zoom==WorldController.drawDistance/3,"far zoom bound");Game.zoom=3;
  check(!game.queueSound(65535,1,0,100)&&game.currentSound==0,"invalid sound 65535 ignored");
  check(!game.queueSound(-1,1,0,100)&&game.currentSound==0,"negative sound ignored");
  check(game.queueSound(398,1,0,100)&&game.currentSound==1,"valid sound accepted");
  while(game.currentSound<50)game.queueSound(398,1,0,100);check(!game.queueSound(398,1,0,100),"full sound queue safe");
  EventQueue.invokeAndWait(()->{
   RSFrame frame=new RSFrame(game);frame.setVisible(false);Rectangle before=frame.getBounds();
   frame.toggleFullscreen();check(frame.isFullscreen()&&frame.isUndecorated(),"fullscreen enabled");
   frame.toggleFullscreen();check(!frame.isFullscreen()&&!frame.isUndecorated()&&before.equals(frame.getBounds()),"window geometry restored");frame.dispose();
  });
  System.out.println("PASS "+checks+" display/input/zoom/sound checks");System.exit(0);
 }
}