Emberveil source

tests/CoOwnerCrownCheck.java

import java.io.*;
import java.util.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class CoOwnerCrownCheck {
 static int checks;
 static void check(boolean b,String m){checks++;if(!b)throw new AssertionError(m);}
 public static void main(String[] args)throws Exception {
  String root="runtime/ammunition-stage/cache/";
  try(RandomAccessFile dat=new RandomAccessFile(root+"main_file_cache.dat","r");RandomAccessFile idx=new RandomAccessFile(root+"main_file_cache.idx0","r")){
   StreamLoader media=new StreamLoader(new Decompressor(dat,idx,1).decompress(4));Background green=ChatCrowns.coOwner(media),red=ChatCrowns.owner(media);
   check(ChatCrowns.icon(3,"Darren")==3,"authenticated co-owner name chooses green");
   check(ChatCrowns.icon(3,"@cr3@darren")==3,"public and private rank prefix supported");
   check(ChatCrowns.icon(3,"bonds")==2,"owner stays red");check(ChatCrowns.icon(2,"darren")==1,"name alone does not grant crown");
   check(ChatCrowns.icon(0,"darren")!=3,"ordinary sender cannot spoof co-owner");
   check(Arrays.equals(green.aByteArray1450,red.aByteArray1450),"crown mask preserved");
   int[] pixels=new int[32*28];DrawingArea.initDrawingArea(28,32,pixels);ChatCrowns.drawOwner(green,8,10,0);int[] a=pixels.clone();
   int brightGreen=0;for(int rgb:a)if((rgb>>8&255)>2*(rgb>>16&255))brightGreen++;
   check(brightGreen>20,"crown and flame halo visibly green");
   Arrays.fill(pixels,0);ChatCrowns.drawOwner(green,8,10,120);check(!Arrays.equals(a,pixels),"green flames animate");
   BufferedImage proof=new BufferedImage(256,112,BufferedImage.TYPE_INT_RGB);
   for(int y=0;y<112;y++)for(int x=0;x<128;x++)proof.setRGB(x,y,a[x/4+(y/4)*32]);
   Arrays.fill(pixels,0);ChatCrowns.drawOwner(red,8,10,0);
   for(int y=0;y<112;y++)for(int x=0;x<128;x++)proof.setRGB(x+128,y,pixels[x/4+(y/4)*32]);
   ImageIO.write(proof,"png",new File("runtime/owner-coowner-crowns.png"));
   OwnerCrownCheck.media=media;OwnerCrownCheck.fonts=new StreamLoader(new Decompressor(dat,idx,1).decompress(1));
   Censor.loadConfig(new StreamLoader(new Decompressor(dat,idx,1).decompress(7)));
   Game g=OwnerCrownCheck.game();g.modIcons[3]=green;OwnerCrownCheck.incoming(g,3,"Darren");g.drawChatArea();
   check(greenPixels(g.aRSImageProducer_1166.anIntArray315,479,4,58)>12,"real public packet renders green co-owner crown");
   g.chatTypes[0]=7;g.chatNames[0]="@cr3@Darren";g.chatMessages[0]="Use ::staffzone to meet at Mage Bank.";g.drawChatArea();
   int privateX=4+g.aTextDrawingArea_1271.getTextWidth("From ");
   check(greenPixels(g.aRSImageProducer_1166.anIntArray315,479,privateX,58)>12,"private chat renders green crown");
   g.splitpublicChat=1;g.aRSImageProducer_1165.initDrawingArea();g.drawSplitpublicChat();
   check(greenPixels(g.aRSImageProducer_1165.anIntArray315,512,privateX,317)>12,"split private chat renders green crown");
   g.splitpublicChat=0;g.chatTypes[0]=1;g.chatNames[0]="@cr3@Darren";g.chatMessages[0]="Co-owner: use ::staffzone to meet at Mage Bank.";
   g.chatTypes[1]=1;g.chatNames[1]="@cr3@Bonds";g.chatMessages[1]="Welcome to Emberveil.";g.drawChatArea();
   BufferedImage chat=new BufferedImage(479,96,BufferedImage.TYPE_INT_RGB);chat.setRGB(0,0,479,96,g.aRSImageProducer_1166.anIntArray315,0,479);ImageIO.write(chat,"png",new File("runtime/darren-coowner-chat-preview.png"));
   System.out.println("PASS "+checks+" co-owner rank and flame rendering checks");
  }
 }
 static int greenPixels(int[] a,int width,int x,int y){int n=0;for(int yy=y;yy<y+14;yy++)for(int xx=x;xx<x+14;xx++){int rgb=a[yy*width+xx];if((rgb>>8&255)>70&&(rgb>>8&255)>2*(rgb>>16&255))n++;}return n;}
}