Home | History | Annotate | Download | only in lang
      1 //  2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html#License
      3 /*
      4  *******************************************************************************
      5  * Copyright (C) 2008, International Business Machines Corporation and         *
      6  * others. All Rights Reserved.                                                *
      7  *******************************************************************************
      8  */
      9 package com.ibm.icu.dev.test.lang;
     10 
     11 import java.util.LinkedList;
     12 import java.util.List;
     13 import java.util.ListIterator;
     14 
     15 import org.junit.Test;
     16 import org.junit.runner.RunWith;
     17 import org.junit.runners.JUnit4;
     18 
     19 import com.ibm.icu.dev.test.TestFmwk;
     20 import com.ibm.icu.lang.UCharacter;
     21 
     22 /**
     23  * @author aheninger
     24  *
     25  */
     26 @RunWith(JUnit4.class)
     27 public class UCharacterThreadTest extends TestFmwk {
     28   // constructor -----------------------------------------------------------
     29 
     30     /**
     31     * Private constructor to prevent initialisation
     32     */
     33     public UCharacterThreadTest()
     34     {
     35     }
     36 
     37       // public methods --------------------------------------------------------
     38 
     39     //
     40     //  Test multi-threaded parallel calls to UCharacter.getName(codePoint)
     41     //  Regression test for ticket 6264.
     42     //
     43     @Test
     44     public void TestUCharactersGetName() throws InterruptedException {
     45         List threads = new LinkedList();
     46         for(int t=0; t<20; t++) {
     47           int codePoint = 47 + t;
     48           String correctName = UCharacter.getName(codePoint);
     49           GetNameThread thread = new GetNameThread(codePoint, correctName);
     50           thread.start();
     51           threads.add(thread);
     52         }
     53         ListIterator i = threads.listIterator();
     54         while (i.hasNext()) {
     55             GetNameThread thread = (GetNameThread)i.next();
     56             thread.join();
     57             if (!thread.correctName.equals(thread.actualName)) {
     58                 errln("FAIL, expected \"" + thread.correctName + "\", got \"" + thread.actualName + "\"");
     59             }
     60         }
     61       }
     62 
     63       private static class GetNameThread extends Thread {
     64         private final int codePoint;
     65         private final String correctName;
     66         private String actualName;
     67 
     68         GetNameThread(int codePoint, String correctName) {
     69            this.codePoint = codePoint;
     70            this.correctName = correctName;
     71         }
     72 
     73         @Override
     74         public void run() {
     75           for(int i=0; i<10000; i++) {
     76             actualName = UCharacter.getName(codePoint);
     77             if (!correctName.equals(actualName)) {
     78               break;
     79             }
     80           }
     81         }
     82       }
     83 }
     84