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 015 package org.apache.tapestry5.test; 016 017 import 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 */ 023 public 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 }