15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/*
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership.
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License.  You may obtain a copy of the License at
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  See the License for the specific language governing permissions and
165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  limitations under the License.
175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Ivan G. Popov
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 29.01.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.jdwp.share;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.io.BufferedReader;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.io.IOException;
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.io.InputStreamReader;
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.LogWriter;
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.framework.TestErrorException;
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport org.apache.harmony.jpda.tests.share.JPDATestOptions;
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class provides DebuggeeWrapper implementation based on JUnit framework.
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Debuggee is always launched on local machine and attaches to debugger.
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class JDWPManualDebuggeeWrapper extends JDWPUnitDebuggeeWrapper {
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private BufferedReader reader = null;
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * A constructor that creates new instance with given data.
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param settings
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            test run options
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param logWriter
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            where to print log messages
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public JDWPManualDebuggeeWrapper(JPDATestOptions settings,
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            LogWriter logWriter) {
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        super(settings, logWriter);
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        reader = new BufferedReader(new InputStreamReader(System.in));
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Get response from user and check if it is as expected.
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private void checkUserResponse(String expected) throws IOException {
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String response = reader.readLine();
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (!expected.equals(response)) {
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Unexpected user response: "
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + response + " (expected: " + expected + ")");
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Asks user to launch process with given command line and waits for
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * confirmation.
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param cmdLine
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            command line
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return null instead of associated Process object
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @throws IOException
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *             if user does not confirm process launching
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected Process launchProcess(String cmdLine) throws IOException {
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getLogWriter().println(
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                "\n>>> Start debuggee VM with this command line:\n" + cmdLine);
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getLogWriter().println(
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                "\n>>> Confirm that debuggee VM has started [yes/no]:");
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkUserResponse("yes");
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return null;
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Waits for user to confirm that launched process has exited.
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param process
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            should be null instead of associated Process object
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @throws IOException
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *             if user does not confirm process exit
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected void WaitForProcessExit(Process process) throws IOException {
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        getLogWriter().println(
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                "\n>>> Confirm that debuggee VM has exited [yes/no]:");
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        checkUserResponse("yes");
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
102