| /* |
| ******************************************************************************* |
| * Copyright (C) 2008, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| package com.ibm.icu.dev.test.lang; |
| |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.ListIterator; |
| |
| import com.ibm.icu.dev.test.TestFmwk; |
| import com.ibm.icu.lang.UCharacter; |
| |
| /** |
| * @author aheninger |
| * |
| */ |
| public class UCharacterThreadTest extends TestFmwk { |
| // constructor ----------------------------------------------------------- |
| |
| /** |
| * Private constructor to prevent initialisation |
| */ |
| public UCharacterThreadTest() |
| { |
| } |
| |
| // public methods -------------------------------------------------------- |
| |
| public static void main(String[] arg) |
| { |
| try |
| { |
| UCharacterThreadTest test = new UCharacterThreadTest(); |
| test.run(arg); |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| } |
| } |
| |
| |
| // |
| // Test multi-threaded parallel calls to UCharacter.getName(codePoint) |
| // Regression test for ticket 6264. |
| // |
| public void TestUCharactersGetName() throws InterruptedException { |
| List threads = new LinkedList(); |
| for(int t=0; t<20; t++) { |
| int codePoint = 47 + t; |
| String correctName = UCharacter.getName(codePoint); |
| GetNameThread thread = new GetNameThread(codePoint, correctName); |
| thread.start(); |
| threads.add(thread); |
| } |
| ListIterator i = threads.listIterator(); |
| while (i.hasNext()) { |
| GetNameThread thread = (GetNameThread)i.next(); |
| thread.join(); |
| if (!thread.correctName.equals(thread.actualName)) { |
| errln("FAIL, expected \"" + thread.correctName + "\", got \"" + thread.actualName + "\""); |
| } |
| } |
| } |
| |
| private static class GetNameThread extends Thread { |
| private final int codePoint; |
| private final String correctName; |
| private String actualName; |
| |
| GetNameThread(int codePoint, String correctName) { |
| this.codePoint = codePoint; |
| this.correctName = correctName; |
| } |
| |
| public void run() { |
| for(int i=0; i<10000; i++) { |
| actualName = UCharacter.getName(codePoint); |
| if (!correctName.equals(actualName)) { |
| break; |
| } |
| } |
| } |
| } |
| } |