1 /* 2 * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.css; 27 28 import static org.junit.Assert.assertEquals; 29 import static org.junit.Assert.assertFalse; 30 import static org.junit.Assert.assertTrue; 31 32 import com.sun.javafx.css.ParsedValueImpl; 33 import javafx.css.StyleConverter.StringStore; 34 import javafx.css.converter.SizeConverter; 35 36 import javafx.scene.text.Font; 37 38 import org.junit.Test; 39 40 import java.io.ByteArrayInputStream; 41 import java.io.ByteArrayOutputStream; 42 import java.io.DataInputStream; 43 import java.io.DataOutputStream; 44 import java.io.IOException; 45 46 public class ParsedValueTest { 47 48 public ParsedValueTest() { 49 } 50 51 /** 52 * Test of getValue method, of class ParsedValue. 53 */ 54 @Test 55 public void testGetValue() { 56 //System.out.println("getValue"); 57 ParsedValue<Size,Size> instance = 58 new ParsedValueImpl<Size,Size>(new Size(100.0, SizeUnits.PERCENT), null); 59 Size expResult = new Size(100.0, SizeUnits.PERCENT);; 60 Size result = instance.getValue(); 61 assertEquals(expResult, result); 62 } 63 64 /** 65 * Test of convert method, of class ParsedValue. 66 */ 67 @Test 68 public void testConvert() { 69 ///System.out.println("convert"); 70 Font font = Font.getDefault(); 71 Size size = new Size(1.0, SizeUnits.EM); 72 ParsedValue<ParsedValue<?,Size>,Number> value = 73 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 74 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 75 SizeConverter.getInstance()); 76 77 double expResult = font.getSize(); 78 double result = value.convert(font).doubleValue(); 79 assertEquals(expResult, result, 0.01); 80 } 81 82 @Test 83 public void testEquals() { 84 85 Font font = Font.getDefault(); 86 Size size = new Size(1.0, SizeUnits.EM); 87 ParsedValue<ParsedValue<?,Size>,Number> value1 = 88 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 89 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 90 SizeConverter.getInstance()); 91 92 ParsedValue<ParsedValue<?,Size>,Number> value2 = 93 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 94 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 95 null); 96 97 // ParsedValue.equals doesn't care about the converter 98 assertTrue(value1.equals(value2)); 99 100 value1 = 101 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 102 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 103 SizeConverter.getInstance()); 104 105 value2 = 106 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 107 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null), 108 SizeConverter.getInstance()); 109 110 assertFalse(value1.equals(value2)); 111 112 value2 = 113 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 114 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.PX), null), 115 SizeConverter.getInstance()); 116 117 assertFalse(value1.equals(value2)); 118 119 value2 = 120 new ParsedValueImpl<ParsedValue<?,Size>,Number>(null, null); 121 122 assertFalse(value1.equals(value2)); 123 124 ParsedValue<ParsedValue[],Number[]> value3 = 125 new ParsedValueImpl<ParsedValue[],Number[]>( 126 new ParsedValueImpl[] { 127 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 128 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 129 }, SizeConverter.SequenceConverter.getInstance() 130 ); 131 132 assertFalse(value1.equals(value3)); 133 assertFalse(value3.equals(value1)); 134 135 ParsedValue<ParsedValue[],Number[]> value4 = 136 new ParsedValueImpl<ParsedValue[],Number[]>( 137 new ParsedValueImpl[] { 138 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 139 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 140 }, SizeConverter.SequenceConverter.getInstance() 141 ); 142 143 assertTrue(value3.equals(value4)); 144 145 value4 = 146 new ParsedValueImpl<ParsedValue[],Number[]>( 147 new ParsedValueImpl[] { 148 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null), 149 null 150 }, SizeConverter.SequenceConverter.getInstance() 151 ); 152 153 assertFalse(value3.equals(value4)); 154 155 value4 = 156 new ParsedValueImpl<ParsedValue[],Number[]>( 157 new ParsedValueImpl[] { 158 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 159 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null), 160 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null) 161 }, SizeConverter.SequenceConverter.getInstance() 162 ); 163 164 assertFalse(value3.equals(value4)); 165 166 value4 = 167 new ParsedValueImpl<ParsedValue[],Number[]>( 168 new ParsedValueImpl[] { 169 null 170 }, SizeConverter.SequenceConverter.getInstance() 171 ); 172 173 assertFalse(value3.equals(value4)); 174 175 value4 = 176 new ParsedValueImpl<ParsedValue[],Number[]>( 177 null, 178 SizeConverter.SequenceConverter.getInstance() 179 ); 180 181 assertFalse(value3.equals(value4)); 182 183 ParsedValue<ParsedValue[][],Number[][]> value5 = 184 new ParsedValueImpl<ParsedValue[][],Number[][]>( 185 new ParsedValueImpl[][] { 186 new ParsedValueImpl[] { 187 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 188 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 189 }, 190 new ParsedValueImpl[] { 191 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 192 new ParsedValueImpl<Size,Size>(new Size(4.0, SizeUnits.EM), null) 193 } 194 }, null 195 ); 196 197 assertFalse(value1.equals(value5)); 198 assertFalse(value3.equals(value5)); 199 assertFalse(value5.equals(value1)); 200 assertFalse(value5.equals(value3)); 201 202 ParsedValue<ParsedValue[][],Number[][]> value6 = 203 new ParsedValueImpl<ParsedValue[][],Number[][]>( 204 new ParsedValueImpl[][] { 205 new ParsedValueImpl[] { 206 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 207 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 208 }, 209 new ParsedValueImpl[] { 210 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 211 new ParsedValueImpl<Size,Size>(new Size(4.0, SizeUnits.EM), null) 212 } 213 }, null 214 ); 215 216 assertTrue(value5.equals(value6)); 217 218 value6 = 219 new ParsedValueImpl<ParsedValue[][],Number[][]>( 220 new ParsedValueImpl[][] { 221 new ParsedValueImpl[] { 222 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 223 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 224 }, 225 new ParsedValueImpl[] { 226 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 227 new ParsedValueImpl<Size,Size>(new Size(5.0, SizeUnits.EM), null), 228 new ParsedValueImpl<Size,Size>(new Size(4.0, SizeUnits.EM), null) 229 } 230 }, null 231 ); 232 233 assertFalse(value5.equals(value6)); 234 235 value6 = 236 new ParsedValueImpl<ParsedValue[][],Number[][]>( 237 new ParsedValueImpl[][] { 238 new ParsedValueImpl[] { 239 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 240 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 241 }, 242 new ParsedValueImpl[] { 243 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 244 null 245 } 246 }, null 247 ); 248 249 assertFalse(value5.equals(value6)); 250 251 value6 = 252 new ParsedValueImpl<ParsedValue[][],Number[][]>( 253 new ParsedValueImpl[][] { 254 new ParsedValueImpl[] { 255 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 256 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 257 }, 258 null 259 }, null 260 ); 261 262 assertFalse(value5.equals(value6)); 263 264 265 } 266 267 @Test 268 public void test_RT_24614() { 269 270 ParsedValue<String,String> value1 = 271 new ParsedValueImpl<>("FOO", null); 272 273 ParsedValue<String,String> value2 = 274 new ParsedValueImpl<>("FOO", null); 275 276 assertTrue(value1.equals(value2)); 277 278 value1 = 279 new ParsedValueImpl<>("FOO", null); 280 281 value2 = 282 new ParsedValueImpl<>("foo", null); 283 284 assertTrue(value1.equals(value2)); 285 286 ParsedValueImpl<ParsedValue<?,Size>,Number> value3 = 287 new ParsedValueImpl<>( 288 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.PX), null), 289 SizeConverter.getInstance()); 290 291 value1 = 292 new ParsedValueImpl<>("FOO", null); 293 294 assertFalse(value1.equals(value3)); 295 assertFalse(value3.equals(value1)); 296 297 ParsedValue<ParsedValue[],String[]> value4 = 298 new ParsedValueImpl<>( 299 new ParsedValueImpl[] { 300 new ParsedValueImpl<String,String>("FOO", null), 301 new ParsedValueImpl<String,String>("BAR", null) 302 }, null 303 ); 304 305 ParsedValue<ParsedValue[],String[]> value5 = 306 new ParsedValueImpl<>( 307 new ParsedValueImpl[] { 308 new ParsedValueImpl<String,String>("foo", null), 309 new ParsedValueImpl<String,String>("bar", null) 310 }, null 311 ); 312 assertTrue(value4.equals(value5)); 313 assertTrue(value5.equals(value4)); 314 315 value4 = 316 new ParsedValueImpl<>( 317 new ParsedValueImpl[] { 318 new ParsedValueImpl<String,String>("FOO", null), 319 new ParsedValueImpl<String,String>("BAR", null) 320 }, null 321 ); 322 323 value5 = 324 new ParsedValueImpl<>( 325 new ParsedValueImpl[] { 326 new ParsedValueImpl<String,String>("foo", null), 327 new ParsedValueImpl<String,String>("foo", null) 328 }, null 329 ); 330 assertFalse(value4.equals(value5)); 331 assertFalse(value5.equals(value4)); 332 333 ParsedValue<ParsedValue[][],String[][]> value6 = 334 new ParsedValueImpl<>( 335 new ParsedValueImpl[][] { 336 new ParsedValueImpl[] { 337 new ParsedValueImpl<String,String>("foo", null), 338 new ParsedValueImpl<String,String>("bar", null) 339 }, 340 new ParsedValueImpl[] { 341 new ParsedValueImpl<String,String>("FOO", null), 342 new ParsedValueImpl<String,String>("BAR", null) 343 } 344 }, null 345 ); 346 347 ParsedValue<ParsedValue[][],String[][]> value7 = 348 new ParsedValueImpl<>( 349 new ParsedValueImpl[][] { 350 new ParsedValueImpl[] { 351 new ParsedValueImpl<String,String>("FOO", null), 352 new ParsedValueImpl<String,String>("BAR", null) 353 }, 354 new ParsedValueImpl[] { 355 new ParsedValueImpl<String,String>("foo", null), 356 new ParsedValueImpl<String,String>("bar", null) 357 } 358 }, null 359 ); 360 361 assertTrue(value6.equals(value7)); 362 assertTrue(value7.equals(value6)); 363 364 value6 = 365 new ParsedValueImpl<>( 366 new ParsedValueImpl[][] { 367 new ParsedValueImpl[] { 368 new ParsedValueImpl<String,String>("foo", null), 369 new ParsedValueImpl<String,String>("bar", null) 370 }, 371 new ParsedValueImpl[] { 372 new ParsedValueImpl<String,String>("FOO", null), 373 new ParsedValueImpl<String,String>("BAR", null) 374 } 375 }, null 376 ); 377 378 value7 = 379 new ParsedValueImpl<>( 380 new ParsedValueImpl[][] { 381 new ParsedValueImpl[] { 382 new ParsedValueImpl<String,String>("FOO", null), 383 new ParsedValueImpl<String,String>("BAR", null) 384 }, 385 new ParsedValueImpl[] { 386 new ParsedValueImpl<String,String>("foo", null), 387 new ParsedValueImpl<String,String>("foo", null) 388 } 389 }, null 390 ); 391 392 assertFalse(value6.equals(value7)); 393 assertFalse(value7.equals(value6)); 394 } 395 396 private void writeBinary(ParsedValueImpl parsedValue) { 397 398 try { 399 StringStore stringStore = new StringStore(); 400 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 401 DataOutputStream dos = new DataOutputStream(baos); 402 parsedValue.writeBinary(dos, stringStore); 403 dos.close(); 404 } catch (IOException ioe) { 405 org.junit.Assert.fail(parsedValue.toString()); 406 } 407 408 } 409 410 /** 411 * Test of writeBinary method, of class ParsedValueImpl. 412 */ 413 @Test 414 public void testWriteReadBinary() throws Exception { 415 Font font = Font.getDefault(); 416 Size size = new Size(1.0, SizeUnits.EM); 417 418 ParsedValueImpl parsedValue = 419 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 420 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 421 SizeConverter.getInstance()); 422 423 writeBinary(parsedValue); 424 425 parsedValue = 426 new ParsedValueImpl<ParsedValue[],Number[]>( 427 new ParsedValueImpl[] { 428 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 429 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 430 }, SizeConverter.SequenceConverter.getInstance() 431 ); 432 433 writeBinary(parsedValue); 434 435 parsedValue = 436 new ParsedValueImpl<ParsedValue[][],Number[][]>( 437 new ParsedValueImpl[][] { 438 new ParsedValueImpl[] { 439 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 440 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 441 }, 442 new ParsedValueImpl[] { 443 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 444 new ParsedValueImpl<Size,Size>(new Size(4.0, SizeUnits.EM), null) 445 } 446 }, null 447 ); 448 449 writeBinary(parsedValue); 450 451 parsedValue = 452 new ParsedValueImpl<ParsedValue[][],Number[][]>( 453 new ParsedValueImpl[][] { 454 new ParsedValueImpl[] { 455 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 456 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 457 }, 458 new ParsedValueImpl[] { 459 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 460 null 461 } 462 }, null 463 ); 464 465 writeBinary(parsedValue); 466 467 parsedValue = 468 new ParsedValueImpl<ParsedValue[][],Number[][]>( 469 new ParsedValueImpl[][] { 470 new ParsedValueImpl[] { 471 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 472 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 473 }, 474 null 475 }, null 476 ); 477 478 writeBinary(parsedValue); 479 480 } 481 482 private void writeAndReadBinary(ParsedValueImpl<?,?> parsedValue) { 483 484 try { 485 StringStore stringStore = new StringStore(); 486 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 487 DataOutputStream dos = new DataOutputStream(baos); 488 parsedValue.writeBinary(dos, stringStore); 489 dos.close(); 490 String[] strings = stringStore.strings.toArray(new String[]{}); 491 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 492 DataInputStream dis = new DataInputStream(bais); 493 ParsedValue<?,?> pv = ParsedValueImpl.readBinary(Stylesheet.BINARY_CSS_VERSION, dis, strings); 494 org.junit.Assert.assertEquals(parsedValue, pv); 495 } catch (IOException ioe) { 496 System.err.println(ioe); 497 org.junit.Assert.fail(parsedValue.toString()); 498 } 499 500 } 501 /** 502 * Test of readBinary method, of class ParsedValueImpl. 503 */ 504 @Test 505 public void testReadBinary() throws Exception { 506 Font font = Font.getDefault(); 507 Size size = new Size(1.0, SizeUnits.EM); 508 509 ParsedValueImpl parsedValue = 510 new ParsedValueImpl<ParsedValue<?,Size>,Number>( 511 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 512 SizeConverter.getInstance()); 513 514 writeAndReadBinary(parsedValue); 515 516 parsedValue = 517 new ParsedValueImpl<ParsedValue[],Number[]>( 518 new ParsedValueImpl[] { 519 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 520 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 521 }, SizeConverter.SequenceConverter.getInstance() 522 ); 523 524 writeAndReadBinary(parsedValue); 525 526 parsedValue = 527 new ParsedValueImpl<ParsedValue[][],Number[][]>( 528 new ParsedValueImpl[][] { 529 new ParsedValueImpl[] { 530 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 531 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 532 }, 533 new ParsedValueImpl[] { 534 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 535 new ParsedValueImpl<Size,Size>(new Size(4.0, SizeUnits.EM), null) 536 } 537 }, null 538 ); 539 540 writeAndReadBinary(parsedValue); 541 542 parsedValue = 543 new ParsedValueImpl<ParsedValue[][],Number[][]>( 544 new ParsedValueImpl[][] { 545 new ParsedValueImpl[] { 546 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 547 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 548 }, 549 new ParsedValueImpl[] { 550 new ParsedValueImpl<Size,Size>(new Size(3.0, SizeUnits.EM), null), 551 null 552 } 553 }, null 554 ); 555 556 writeAndReadBinary(parsedValue); 557 558 parsedValue = 559 new ParsedValueImpl<ParsedValue[][],Number[][]>( 560 new ParsedValueImpl[][] { 561 new ParsedValueImpl[] { 562 new ParsedValueImpl<Size,Size>(new Size(1.0, SizeUnits.EM), null), 563 new ParsedValueImpl<Size,Size>(new Size(2.0, SizeUnits.EM), null) 564 }, 565 null 566 }, null 567 ); 568 569 writeAndReadBinary(parsedValue); 570 } 571 }