/* * Copyright (c) 2013-2015 Philip Aston. * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki */ package org.adoptopenjdk.jitwatch.test; import static java.util.Arrays.asList; import static org.junit.Assert.*; import java.util.Collections; import org.adoptopenjdk.jitwatch.model.assembly.AssemblyInstruction; import org.adoptopenjdk.jitwatch.model.assembly.AssemblyLabels; import org.junit.Test; /** * Unit tests for {@link AssemblyLabels}. * * @author Philip Aston * @since 5.2 */ public class TestAssemblyLabels { private AssemblyLabels labels = new AssemblyLabels(); private final StringBuilder sb = new StringBuilder(); @Test public void testFormatEmpty() { final AssemblyInstruction localJump = new AssemblyInstruction(null, 65535, null, "jne", asList("0x000000000000ffff"), null, labels); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); sb.setLength(0); labels.formatOperands(localJump, sb); assertEquals(" 0x000000000000ffff", sb.toString()); labels.buildLabels(); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); sb.setLength(0); labels.formatOperands(localJump, sb); assertEquals(" 0x000000000000ffff", sb.toString()); } @Test public void testFormatJumpLocal() { final AssemblyInstruction localJump = new AssemblyInstruction(null, 65535, null, "jne", asList("0x000000000000ffff"), null, labels); labels.newInstruction(localJump); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); sb.setLength(0); labels.formatOperands(localJump, sb); assertEquals(" 0x000000000000ffff", sb.toString()); labels.buildLabels(); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals(" L0000", sb.toString()); sb.setLength(0); labels.formatOperands(localJump, sb); assertEquals(" L0000", sb.toString()); } @Test public void testFormatAddressJumpLocal2() { labels.newInstruction(new AssemblyInstruction("", 99, Collections.<String>emptyList(), "blah", Collections.<String>emptyList(), "", labels)); labels.newInstruction( new AssemblyInstruction("anno", 65534, asList("mod"), "jne", asList("0x0000000000000100"), "", labels)); labels.newInstruction( new AssemblyInstruction("anno", 65535, asList("mod"), "jne", asList("0x0000000000001000"), "", labels)); sb.setLength(0); labels.formatAddress(256, sb); assertEquals("0x0000000000000100", sb.toString()); sb.setLength(0); labels.formatAddress(4096, sb); assertEquals("0x0000000000001000", sb.toString()); labels.buildLabels(); sb.setLength(0); labels.formatAddress(256, sb); assertEquals(" L0000", sb.toString()); sb.setLength(0); labels.formatAddress(4096, sb); assertEquals(" L0001", sb.toString()); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); } @Test public void testFormatAddressJumpForeign() { labels.newInstruction( new AssemblyInstruction("anno", 65535, asList("mod"), "jne", asList("0x0000000000000000"), "", labels)); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); labels.buildLabels(); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); } @Test public void testFormatAddressNotJump() { labels.newInstruction( new AssemblyInstruction("anno", 65535, asList("mod"), "foo", asList("0x0000000000000000"), "", labels)); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); labels.buildLabels(); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); } @Test public void testFormatAddressNotJump2() { labels.newInstruction( new AssemblyInstruction("anno", 65535, asList("mod"), "jjj", asList("1", "2"), "", labels)); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); labels.buildLabels(); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); } @Test public void testFormatNoOperands() { final AssemblyInstruction noOps = new AssemblyInstruction(null, 65535, null, "jne", Collections.<String>emptyList(), null, labels); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); sb.setLength(0); labels.formatOperands(noOps, sb); assertTrue(sb.toString().isEmpty()); labels.newInstruction(noOps); labels.buildLabels(); sb.setLength(0); labels.formatAddress(65535, sb); assertEquals("0x000000000000ffff", sb.toString()); sb.setLength(0); labels.formatOperands(noOps, sb); assertTrue(sb.toString().isEmpty()); } }