1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package libcore.java.lang;
19
20import junit.framework.TestCase;
21
22public class OldInheritableThreadLocalTest extends TestCase {
23
24    public void test_Ljava_lang_InheritableThreadLocal()
25            throws InterruptedException {
26        final Object value = new Object();
27        final Object inheritedValue = new Object();
28        final ThreadLocal<Object> threadLocal
29                = new InheritableThreadLocal<Object>() {
30            @Override
31            protected Object childValue(Object parentValue) {
32                assertSame(value, parentValue);
33                return inheritedValue;
34            }
35        };
36        threadLocal.set(value);
37        final Object[] holder = new Object[1];
38        Thread thread = new Thread() {
39            public void run() {
40                holder[0] = threadLocal.get();
41            }
42        };
43        thread.start();
44        thread.join();
45        assertSame(value, threadLocal.get());
46        assertSame(inheritedValue, holder[0]);
47
48        // Cleanup properly, so other tests are not affected.
49        threadLocal.remove();
50    }
51
52    public void test_childValue() {
53        InheritableThreadLocal<String> itl = new InheritableThreadLocal<String>() {
54            @Override
55            protected String initialValue() {
56                return "initial";
57            }
58            @Override
59            protected String childValue(String parentValue) {
60                return "childValue";
61            }
62        };
63        assertEquals("initial", itl.get());
64    }
65
66}
67