Package net.sf.robocode.serialization

Source Code of net.sf.robocode.serialization.RbSerializerTest

/**
* Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*/
package net.sf.robocode.serialization;


import net.sf.robocode.peer.BulletCommand;
import net.sf.robocode.peer.DebugProperty;
import net.sf.robocode.peer.ExecCommands;
import net.sf.robocode.peer.TeamMessage;
import net.sf.robocode.robotpaint.Graphics2DSerialized;
import net.sf.robocode.security.HiddenAccess;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import robocode.util.Utils;

import javax.swing.*;

import java.awt.*;
import java.awt.geom.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;


/**
* @author Pavel Savara (original)
*/
public class RbSerializerTest {

  Exception exception = null;
 
  @BeforeClass
  public static void init() {
    // we need to switch off engine classloader for this test
    System.setProperty("NOSECURITY", "true");
    System.setProperty("WORKINGDIRECTORY", "target//test-classes");
    System.setProperty("TESTING", "true");
    HiddenAccess.initContainer();
  }

  @AfterClass
  public static void cleanup() {
    System.setProperty("NOSECURITY", "false");
  }

  @Test
  public void empty() throws IOException {
    HiddenAccess.initContainer();
    ExecCommands ec = new ExecCommands();

    ec.setBodyTurnRemaining(150.123);
    ec.setTryingToPaint(true);

    ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
    RbSerializer rbs = new RbSerializer();

    rbs.serialize(out, RbSerializer.ExecCommands_TYPE, ec);
    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    ExecCommands ec2 = (ExecCommands) rbs.deserialize(in);

    assertNear(ec2.getBodyTurnRemaining(), ec.getBodyTurnRemaining());
    Assert.assertEquals(ec2.isTryingToPaint(), true);
  }

  @Test
  public void withBullets() throws IOException {
    ExecCommands ec = new ExecCommands();

    ec.setBodyTurnRemaining(150.123);
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getBullets().add(new BulletCommand(1.0, false, 0.9454, 12));
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9554, -128));

    ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
    RbSerializer rbs = new RbSerializer();

    rbs.serialize(out, RbSerializer.ExecCommands_TYPE, ec);
    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    ExecCommands ec2 = (ExecCommands) rbs.deserialize(in);

    assertNear(ec2.getBodyTurnRemaining(), ec.getBodyTurnRemaining());
    assertNear(ec2.getBullets().get(0).getPower(), 1.0);
    Assert.assertEquals(ec2.getBullets().get(1).isFireAssistValid(), false);
    Assert.assertEquals(ec2.getBullets().get(2).isFireAssistValid(), true);
    Assert.assertEquals(ec2.getBullets().get(2).getBulletId(), -128);
  }

  @Test
  public void withMessages() throws IOException {
    ExecCommands ec = new ExecCommands();

    ec.setBodyTurnRemaining(150.123);
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    final byte[] data = new byte[20];

    data[10] = 10;
    ec.getTeamMessages().add(new TeamMessage("Foo", "Bar", data));
    ec.getTeamMessages().add(new TeamMessage("Foo", "Bar", null));

    ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
    RbSerializer rbs = new RbSerializer();

    rbs.serialize(out, RbSerializer.ExecCommands_TYPE, ec);
    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    ExecCommands ec2 = (ExecCommands) rbs.deserialize(in);

    Assert.assertEquals(ec2.getTeamMessages().get(0).message[0], 0);
    Assert.assertEquals(ec2.getTeamMessages().get(0).message[10], 10);
    Assert.assertEquals(ec2.getTeamMessages().get(0).sender, "Foo");
    Assert.assertEquals(ec2.getTeamMessages().get(0).recipient, "Bar");
    Assert.assertEquals(ec2.getTeamMessages().get(1).message, null);
  }

  @Test
  public void withProperties() throws IOException {
    ExecCommands ec = new ExecCommands();

    ec.setBodyTurnRemaining(150.123);
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getTeamMessages().add(new TeamMessage("Foo", "Bar", null));
    ec.getDebugProperties().add(
        new DebugProperty("UTF8 Native characters", "P��li� �lu?ou�k� k�� �p�l ��belsk� �dy"));

    ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
    RbSerializer rbs = new RbSerializer();

    rbs.serialize(out, RbSerializer.ExecCommands_TYPE, ec);
    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    ExecCommands ec2 = (ExecCommands) rbs.deserialize(in);

    Assert.assertEquals(ec2.getDebugProperties().get(0).getKey(), "UTF8 Native characters");
    Assert.assertEquals(ec2.getDebugProperties().get(0).getValue(), "P��li� �lu?ou�k� k�� �p�l ��belsk� �dy");
  }

  // @Test
  // 14 seconds for 1000 000,
  // 15x faster
  public void speed() throws IOException {
    ExecCommands ec = new ExecCommands();

    ec.setBodyTurnRemaining(150.123);
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getTeamMessages().add(new TeamMessage("Foo", "Bar", null));
    ec.getDebugProperties().add(new DebugProperty("ooooh", "aaaah"));

    ByteArrayOutputStream out = new ByteArrayOutputStream(1024);

    for (int i = 0; i < 1000000; i++) {
      out.reset();
      ec.setGunColor(i);
      RbSerializer rbs = new RbSerializer();

      rbs.serialize(out, RbSerializer.ExecCommands_TYPE, ec);
      ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
      ExecCommands ec2 = (ExecCommands) rbs.deserialize(in);

      Assert.assertEquals(ec2.getGunColor(), i);
    }
  }

  // @Test
  // 21 seconds for 100 000
  public void speed2() {
    ExecCommands ec = new ExecCommands();

    ec.setBodyTurnRemaining(150.123);
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getBullets().add(new BulletCommand(1.0, true, 0.9354, 11));
    ec.getTeamMessages().add(new TeamMessage("Foo", "Bar", null));
    ec.getDebugProperties().add(new DebugProperty("ooooh", "aaaah"));

    ByteArrayOutputStream out = new ByteArrayOutputStream(1024);

    for (int i = 0; i < 100000; i++) {
      out.reset();
      ec.setGunColor(i);
      ExecCommands ec2 = (ExecCommands) ObjectCloner.deepCopy(ec);

      Assert.assertEquals(ec2.getGunColor(), i);
    }
  }

  @SuppressWarnings("serial")
  @Test
  public void graphics() throws InterruptedException {
    final Graphics2DSerialized sg = new Graphics2DSerialized();

    sg.setPaintingEnabled(true);
    sg.setBackground(Color.GREEN);
    sg.setColor(Color.RED);
    Arc2D a = new Arc2D.Double(Arc2D.PIE);

    a.setAngleExtent(10);
    a.setAngleStart(-30);
    a.setFrame(0, 0, 80, 80);
    sg.draw(a);

    sg.setColor(Color.BLUE);
    sg.draw(new Line2D.Double(99, 98, 78, 3));

    sg.setColor(Color.YELLOW);
    sg.draw(new Rectangle2D.Double(20, 20, 30, 50));

    sg.setColor(Color.BLACK);
    sg.drawLine(99, 3, 78, 3);
    sg.drawRect(90, 20, 30, 50);

    sg.setColor(Color.CYAN);

    sg.setStroke(new BasicStroke(1, 2, BasicStroke.JOIN_ROUND, 4, null, 0));
    sg.fill(new Rectangle2D.Double(20, 70, 30, 50));
    sg.fill(new Ellipse2D.Double(70, 70, 30, 50));

    sg.setColor(Color.MAGENTA);
    sg.fill(new RoundRectangle2D.Double(110, 70, 30, 50, 13.5, 16.1));

    exception = null;
   
    Canvas d = new Canvas() {
      @Override
      public void paint(Graphics g) {
        synchronized (this) {
          try {
            sg.processTo((Graphics2D) g);
          } catch (Exception e) {
            exception = e;
          }
        }
      }
    };

    d.setSize(200, 200);

    JFrame f = new JFrame() {};

    f.add(d);
    f.pack();
    f.setVisible(true);
    f.setFocusable(true);
    Thread.sleep(100);
    f.setVisible(false);

    Assert.assertNull("Exception occured: " + exception, exception);
  }

  public static void assertNear(double v1, double v2) {
    org.junit.Assert.assertEquals(v1, v2, Utils.NEAR_DELTA);
  }
}
TOP

Related Classes of net.sf.robocode.serialization.RbSerializerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.