| // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package com.android.tools.r8.debug; |
| |
| import org.apache.harmony.jpda.tests.framework.jdwp.Value; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| public class ClassInitializationTest extends DebugTestBase { |
| |
| private static DebugTestConfig config; |
| |
| @BeforeClass |
| public static void setup() { |
| config = new D8DebugTestResourcesConfig(temp); |
| } |
| |
| @Test |
| public void testStaticAssingmentInitialization() throws Throwable { |
| final String SOURCE_FILE = "ClassInitializerAssignmentInitialization.java"; |
| final String CLASS = "ClassInitializerAssignmentInitialization"; |
| |
| runDebugTest( |
| config, |
| CLASS, |
| breakpoint(CLASS, "<clinit>"), |
| run(), |
| checkLine(SOURCE_FILE, 7), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(0)), |
| checkStaticFieldClinitSafe(CLASS, "y", null, Value.createInt(0)), |
| checkStaticFieldClinitSafe(CLASS, "z", null, Value.createInt(0)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 10), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(1)), |
| checkStaticFieldClinitSafe(CLASS, "y", null, Value.createInt(0)), |
| checkStaticFieldClinitSafe(CLASS, "z", null, Value.createInt(0)), |
| breakpoint(CLASS, "main"), |
| run(), |
| checkStaticField(CLASS, "x", null, Value.createInt(1)), |
| checkStaticField(CLASS, "y", null, Value.createInt(0)), |
| checkStaticField(CLASS, "z", null, Value.createInt(2)), |
| run()); |
| } |
| |
| @Test |
| public void testBreakpointInEmptyClassInitializer() throws Throwable { |
| final String SOURCE_FILE = "ClassInitializerEmpty.java"; |
| final String CLASS = "ClassInitializerEmpty"; |
| |
| runDebugTest( |
| config, |
| CLASS, |
| breakpoint(CLASS, "<clinit>"), |
| run(), |
| checkLine(SOURCE_FILE, 8), |
| run()); |
| } |
| |
| @Test |
| public void testStaticBlockInitialization() throws Throwable { |
| final String SOURCE_FILE = "ClassInitializerStaticBlockInitialization.java"; |
| final String CLASS = "ClassInitializerStaticBlockInitialization"; |
| |
| runDebugTest( |
| config, |
| CLASS, |
| breakpoint(CLASS, "<clinit>"), |
| run(), |
| checkLine(SOURCE_FILE, 12), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(0)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 13), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(1)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 14), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(2)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 17), |
| stepOver(), |
| checkLine(SOURCE_FILE, 19), |
| breakpoint(CLASS, "main"), |
| run(), |
| checkLine(SOURCE_FILE, 23), |
| checkStaticField(CLASS, "x", null, Value.createInt(3)), |
| run()); |
| } |
| |
| @Test |
| public void testStaticMixedInitialization() throws Throwable { |
| final String SOURCE_FILE = "ClassInitializerMixedInitialization.java"; |
| final String CLASS = "ClassInitializerMixedInitialization"; |
| |
| runDebugTest( |
| config, |
| CLASS, |
| breakpoint(CLASS, "<clinit>"), |
| run(), |
| checkLine(SOURCE_FILE, 8), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(0)), |
| checkStaticFieldClinitSafe(CLASS, "y", null, Value.createInt(0)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 12), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(1)), |
| checkStaticFieldClinitSafe(CLASS, "y", null, Value.createInt(0)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 13), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(2)), |
| checkStaticFieldClinitSafe(CLASS, "y", null, Value.createInt(0)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 16), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(2)), |
| checkStaticFieldClinitSafe(CLASS, "y", null, Value.createInt(0)), |
| stepOver(), |
| checkLine(SOURCE_FILE, 18), |
| checkStaticFieldClinitSafe(CLASS, "x", null, Value.createInt(2)), |
| checkStaticFieldClinitSafe(CLASS, "y", null, Value.createInt(2)), |
| breakpoint(CLASS, "main"), |
| run(), |
| checkLine(SOURCE_FILE, 22), |
| checkStaticField(CLASS, "x", null, Value.createInt(3)), |
| checkStaticField(CLASS, "y", null, Value.createInt(2)), |
| run()); |
| } |
| } |