001// Copyright 2007, 2009 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry5.test;
016
017import com.thoughtworks.selenium.CommandProcessor;
018
019/**
020 * A wrapper around a standard command processor that adds additional exception reporting when a
021 * failure occurs.
022 */
023public class ErrorReportingCommandProcessor implements CommandProcessor
024{
025    private final CommandProcessor delegate;
026
027    private final ErrorReporter errorReporter;
028
029    public ErrorReportingCommandProcessor(CommandProcessor delegate, ErrorReporter errorReporter)
030    {
031        this.delegate = delegate;
032        this.errorReporter = errorReporter;
033    }
034
035    private static final String BORDER = "**********************************************************************";
036
037    private void reportError(String command, String[] args, RuntimeException ex)
038    {
039        StringBuilder builder = new StringBuilder();
040
041        builder.append(BORDER);
042        builder.append("\nSelenium failure processing command ");
043        builder.append(command);
044        builder.append("(");
045
046        for (int i = 0; i < args.length; i++)
047        {
048            if (i > 0)
049                builder.append(", ");
050            builder.append('"');
051            builder.append(args[i]);
052            builder.append('"');
053        }
054
055        builder.append("): ");
056        builder.append(ex.toString());
057
058        builder.append(BORDER);
059
060        System.err.println(builder.toString());
061
062        errorReporter.writeErrorReport();
063    }
064
065    public String doCommand(String command, String[] args)
066    {
067        try
068        {
069            return delegate.doCommand(command, args);
070        }
071        catch (RuntimeException ex)
072        {
073            reportError(command, args, ex);
074            throw ex;
075        }
076    }
077
078    public boolean getBoolean(String string, String[] strings)
079    {
080        try
081        {
082            return delegate.getBoolean(string, strings);
083        }
084        catch (RuntimeException ex)
085        {
086            reportError(string, strings, ex);
087            throw ex;
088        }
089    }
090
091    public boolean[] getBooleanArray(String string, String[] strings)
092    {
093        try
094        {
095            return delegate.getBooleanArray(string, strings);
096        }
097        catch (RuntimeException ex)
098        {
099            reportError(string, strings, ex);
100            throw ex;
101        }
102    }
103
104    public Number getNumber(String string, String[] strings)
105    {
106        try
107        {
108            return delegate.getNumber(string, strings);
109        }
110        catch (RuntimeException ex)
111        {
112            reportError(string, strings, ex);
113            throw ex;
114        }
115    }
116
117    public Number[] getNumberArray(String string, String[] strings)
118    {
119        try
120        {
121            return delegate.getNumberArray(string, strings);
122        }
123        catch (RuntimeException ex)
124        {
125            reportError(string, strings, ex);
126            throw ex;
127        }
128    }
129
130    public String getString(String string, String[] strings)
131    {
132        try
133        {
134            return delegate.getString(string, strings);
135        }
136        catch (RuntimeException ex)
137        {
138            reportError(string, strings, ex);
139            throw ex;
140        }
141    }
142
143    public String[] getStringArray(String string, String[] strings)
144    {
145        try
146        {
147            return delegate.getStringArray(string, strings);
148        }
149        catch (RuntimeException ex)
150        {
151            reportError(string, strings, ex);
152            throw ex;
153        }
154    }
155
156    public void start()
157    {
158        delegate.start();
159    }
160
161    public void stop()
162    {
163        delegate.stop();
164    }
165
166    /**
167     * @since 5.1.0.0
168     */
169    public String getRemoteControlServerLocation()
170    {
171        return delegate.getRemoteControlServerLocation();
172    }
173
174    /**
175     * @since 5.1.0.0
176     */
177    public void setExtensionJs(String extensionJs)
178    {
179        delegate.setExtensionJs(extensionJs);
180    }
181
182    /**
183     * @since 5.1.0.0
184     */
185    public void start(String optionsString)
186    {
187        delegate.start(optionsString);
188    }
189
190    /**
191     * @since 5.1.0.0
192     */
193    public void start(Object optionsObject)
194    {
195        delegate.start(optionsObject);
196    }
197}