00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.gui.log;
00023
00024 import java.awt.Font;
00025 import java.awt.FontFormatException;
00026 import java.awt.Graphics2D;
00027 import java.awt.GraphicsConfiguration;
00028 import java.awt.GraphicsDevice;
00029 import java.awt.GraphicsEnvironment;
00030 import java.awt.Transparency;
00031 import java.awt.image.BufferedImage;
00032 import java.io.FileInputStream;
00033 import java.io.IOException;
00034 import java.util.Iterator;
00035 import org.jetbrains.annotations.NotNull;
00036 import org.junit.Assert;
00037 import org.junit.Test;
00038
00043 public class ParserTest {
00044
00048 @Test
00049 public void testEmpty() {
00050 if (GraphicsEnvironment.isHeadless()) {
00051 return;
00052 }
00053
00054 final Rec rec = new Rec();
00055 rec.parser.parse("", null, rec.buffer);
00056 rec.checkResult(""+"buffer:\n"+"line:\n");
00057 }
00058
00062 @Test
00063 public void testAttributesIgnore() {
00064 if (GraphicsEnvironment.isHeadless()) {
00065 return;
00066 }
00067
00068 final Rec rec = new Rec();
00069 rec.parser.parse("a[a]b[]c[[]d[]]e", null, rec.buffer);
00070 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:abc[]d]e\n");
00071 }
00072
00076 @Test
00077 public void testAttributes1() {
00078 if (GraphicsEnvironment.isHeadless()) {
00079 return;
00080 }
00081
00082 final Rec rec = new Rec();
00083 rec.parser.parse("a b c", null, rec.buffer);
00084 rec.parser.parse("[b]a b c", null, rec.buffer);
00085 rec.parser.parse("[i]a b c", null, rec.buffer);
00086 rec.parser.parse("[ul]a b c", null, rec.buffer);
00087 rec.parser.parse("[fixed]a b c", null, rec.buffer);
00088 rec.parser.parse("[arcane]a b c", null, rec.buffer);
00089 rec.parser.parse("[hand]a b c", null, rec.buffer);
00090 rec.parser.parse("[strange]a b c", null, rec.buffer);
00091 rec.parser.parse("[print]a b c", null, rec.buffer);
00092 rec.parser.parse("[color=red]a b c", null, rec.buffer);
00093 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:a \n"+"segment:b \n"+"segment:c\n"+"line:\n"+"segment:(bold)a \n"+"segment:(bold)b \n"+"segment:(bold)c\n"+"line:\n"+"segment:(italic)a \n"+"segment:(italic)b \n"+"segment:(italic)c\n"+"line:\n"+"segment:(underline)a \n"+"segment:(underline)b \n"+"segment:(underline)c\n"+"line:\n"+"segment:(fixed)a \n"+"segment:(fixed)b \n"+"segment:(fixed)c\n"+"line:\n"+"segment:(arcane)a \n"+"segment:(arcane)b \n"+"segment:(arcane)c\n"+"line:\n"+"segment:(hand)a \n"+"segment:(hand)b \n"+"segment:(hand)c\n"+"line:\n"+"segment:(strange)a \n"+"segment:(strange)b \n"+"segment:(strange)c\n"+"line:\n"+"segment:a \n"+"segment:b \n"+"segment:c\n"+"line:\n"+"segment:(red)a \n"+"segment:(red)b \n"+"segment:(red)c\n");
00094 }
00095
00099 @Test
00100 public void testAttributes2() {
00101 if (GraphicsEnvironment.isHeadless()) {
00102 return;
00103 }
00104
00105 final Rec rec = new Rec();
00106 rec.parser.parse("a[b]b[i]c[ul]d[/b]e[/i]f[/ul]g", null, rec.buffer);
00107 rec.parser.parse("Hello [b] all [b]crossfire[/b] members [/b]", null, rec.buffer);
00108 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:a\n"+"segment:(bold)b\n"+"segment:(bold)(italic)c\n"+"segment:(bold)(italic)(underline)d\n"+"segment:(italic)(underline)e\n"+"segment:(underline)f\n"+"segment:g\n"+"line:\n"+"segment:Hello \n"+"segment:(bold) \n"+"segment:(bold)all \n"+"segment:(bold)crossfire\n"+"segment: \n"+"segment:members \n");
00109 }
00110
00114 @Test
00115 public void testAttributesFont1() {
00116 if (GraphicsEnvironment.isHeadless()) {
00117 return;
00118 }
00119
00120 final Rec rec = new Rec();
00121 rec.parser.parse("[b]a[fixed]b[arcane]c[hand]d[strange]e[print]f", null, rec.buffer);
00122 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:(bold)a\n"+"segment:(bold)(fixed)b\n"+"segment:(bold)(arcane)c\n"+"segment:(bold)(hand)d\n"+"segment:(bold)(strange)e\n"+"segment:(bold)f\n");
00123 }
00124
00129 @Test
00130 public void testAttributesFont2() {
00131 if (GraphicsEnvironment.isHeadless()) {
00132 return;
00133 }
00134
00135 final Rec rec = new Rec();
00136 rec.parser.parse("a[fixed]b[/fixed]c", null, rec.buffer);
00137 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:a\n"+"segment:(fixed)bc\n");
00138 }
00139
00143 @Test
00144 public void testAttributesColor() {
00145 if (GraphicsEnvironment.isHeadless()) {
00146 return;
00147 }
00148
00149 final Rec rec = new Rec();
00150 rec.parser.parse("[b]a[color=red]b[color=blue]c[color=green]d[/color]e", null, rec.buffer);
00151 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:(bold)a\n"+"segment:(bold)(red)b\n"+"segment:(bold)(blue)c\n"+"segment:(bold)(green)d\n"+"segment:(bold)e\n");
00152 }
00153
00157 @Test
00158 public void testAttributesReset() {
00159 if (GraphicsEnvironment.isHeadless()) {
00160 return;
00161 }
00162
00163 final Rec rec = new Rec();
00164 rec.parser.parse("[b][i][ul][hand][color=red]first", null, rec.buffer);
00165 rec.parser.parse("second", null, rec.buffer);
00166 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:(bold)(italic)(underline)(hand)(red)first\n"+"line:\n"+"segment:second\n");
00167 }
00168
00172 @Test
00173 public void testMultiLine() {
00174 if (GraphicsEnvironment.isHeadless()) {
00175 return;
00176 }
00177
00178 final Rec rec = new Rec();
00179 rec.parser.parse("first\n[b]second\nth[/b]ird[i]\n"+"fourth", null, rec.buffer);
00180 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:first\n"+"line:\n"+"segment:(bold)second\n"+"line:\n"+"segment:(bold)th\n"+"segment:ird\n"+"line:\n"+"segment:(italic)fourth\n");
00181 }
00182
00186 @Test
00187 public void testDropUnClosedTag() {
00188 if (GraphicsEnvironment.isHeadless()) {
00189 return;
00190 }
00191
00192 final Rec rec = new Rec();
00193 rec.parser.parse("abc[fixed", null, rec.buffer);
00194 rec.checkResult(""+"buffer:\n"+"line:\n"+"segment:abc\n");
00195 }
00196
00200 private static class Rec {
00201
00205 @NotNull
00206 private final Parser parser;
00207
00211 @NotNull
00212 private final Buffer buffer;
00213
00217 private Rec() {
00218 final GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
00219 final GraphicsDevice graphicsDevice = graphicsEnvironment.getDefaultScreenDevice();
00220 final GraphicsConfiguration graphicsConfiguration = graphicsDevice.getDefaultConfiguration();
00221 final BufferedImage image = graphicsConfiguration.createCompatibleImage(1, 1, Transparency.TRANSLUCENT);
00222 final Graphics2D g = image.createGraphics();
00223 parser = new Parser();
00224 final Font font;
00225 try {
00226 final FileInputStream fis = new FileInputStream("skins/ragnorok/fonts/regular.ttf");
00227 try {
00228 try {
00229 font = Font.createFont(Font.TRUETYPE_FONT, fis);
00230 } catch (final FontFormatException ex) {
00231 Assert.fail(ex.getMessage());
00232 throw new AssertionError(ex);
00233 }
00234 } finally {
00235 fis.close();
00236 }
00237 } catch (final IOException ex) {
00238 Assert.fail(ex.getMessage());
00239 throw new AssertionError(ex);
00240 }
00241 buffer = new Buffer(new Fonts(font, font, font, font), g.getFontRenderContext(), 100);
00242 g.dispose();
00243 }
00244
00249 private void checkResult(@NotNull final String expected) {
00250 Assert.assertEquals(expected, dumpBuffer());
00251 }
00252
00257 @NotNull
00258 private String dumpBuffer() {
00259 final StringBuilder sb = new StringBuilder();
00260 dumpBuffer(sb, buffer);
00261 return sb.toString();
00262 }
00263
00269 private static void dumpBuffer(@NotNull final StringBuilder sb, @NotNull final Buffer buffer) {
00270 sb.append("buffer:\n");
00271 synchronized (buffer.getSyncObject()) {
00272 final Iterator<Line> it = buffer.iterator();
00273 while (it.hasNext()) {
00274 final Iterable<Segment> line = it.next();
00275 dumpLine(sb, line);
00276 }
00277 }
00278 }
00279
00285 private static void dumpLine(@NotNull final StringBuilder sb, @NotNull final Iterable<Segment> line) {
00286 sb.append("line:\n");
00287 for (final Segment segment : line) {
00288 sb.append(segment);
00289 }
00290 }
00291
00292 }
00293
00294 }