[Httpunit-commit] CVS: httpunit/src/com/meterware/httpunit Button.java,1.10,1.11 FormControl.java,1.
Brought to you by:
russgold
From: Russell G. <rus...@us...> - 2003-12-05 04:06:57
|
Update of /cvsroot/httpunit/httpunit/src/com/meterware/httpunit In directory sc8-pr-cvs1:/tmp/cvs-serv27254/src/com/meterware/httpunit Modified Files: Button.java FormControl.java FrameHolder.java ResetButton.java SubmitButton.java TableCell.java WebForm.java WebResponse.java WebWindow.java Log Message: from Andrew Bickerton: Support form.length, control.type, control.defaultValue Index: Button.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/Button.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- Button.java 23 Jun 2003 23:54:03 -0000 1.10 +++ Button.java 5 Dec 2003 04:06:53 -0000 1.11 @@ -40,6 +40,10 @@ private String _onClickEvent = ""; + public String getType() { + return BUTTON_TYPE; + } + Button( WebForm form ) { super( form ); } Index: FormControl.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/FormControl.java,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- FormControl.java 19 Sep 2003 18:53:43 -0000 1.43 +++ FormControl.java 5 Dec 2003 04:06:53 -0000 1.44 @@ -50,6 +50,25 @@ private final String _onClickEvent; private final WebForm _form; + public static final String UNDEFINED_TYPE = "undefined"; + public static final String BUTTON_TYPE = "button"; + public static final String RESET_BUTTON_TYPE = "reset"; + public static final String SUBMIT_BUTTON_TYPE = "submit"; + public static final String IMAGE_BUTTON_TYPE = "image"; + public static final String RADIO_BUTTON_TYPE = "radio"; + public static final String CHECKBOX_TYPE = "checkbox"; + public static final String TEXT_TYPE = "text"; + public static final String PASSWORD_TYPE = "password"; + public static final String HIDDEN_TYPE = "hidden"; + public static final String TEXTAREA_TYPE = "textarea"; + public static final String FILE_TYPE = "file"; + public static final String SINGLE_TYPE = "select-one"; + public static final String MULTIPLE_TYPE = "select-multiple"; + + /** + * Return the type of the control, as seen from JavaScript. + */ + abstract public String getType(); static ScriptableDelegate newSelectionOption() { return new SelectionFormControl.Option(); @@ -292,10 +311,10 @@ } else if (node.getNodeName().equalsIgnoreCase( "select" )) { return new SelectionFormControl( form, node ); } else if (node.getNodeName().equalsIgnoreCase( "button" )) { - final String type = NodeUtils.getNodeAttribute( node, "type", "submit" ); - if (type.equalsIgnoreCase( "submit" )) { + final String type = NodeUtils.getNodeAttribute( node, "type", SUBMIT_BUTTON_TYPE ); + if (type.equalsIgnoreCase( SUBMIT_BUTTON_TYPE )) { return new SubmitButton( form, node ); - } else if (type.equalsIgnoreCase( "reset" )) { + } else if (type.equalsIgnoreCase( RESET_BUTTON_TYPE )) { return new ResetButton( form, node ); } else { return new Button( form, node ); @@ -303,22 +322,24 @@ } else if (!node.getNodeName().equalsIgnoreCase( "input" )) { return null; } else { - final String type = NodeUtils.getNodeAttribute( node, "type", "text" ); - if (type.equalsIgnoreCase( "text" ) || type.equalsIgnoreCase( "password" )) { + final String type = NodeUtils.getNodeAttribute( node, "type", TEXT_TYPE ); + if (type.equalsIgnoreCase( TEXT_TYPE )) { return new TextFieldFormControl( form, node ); - } else if (type.equalsIgnoreCase( "hidden" )) { + } else if (type.equalsIgnoreCase( PASSWORD_TYPE )) { + return new PasswordFieldFormControl( form, node ); + } else if (type.equalsIgnoreCase( HIDDEN_TYPE )) { return new HiddenFieldFormControl( form, node ); - } else if (type.equalsIgnoreCase( "radio" )) { + } else if (type.equalsIgnoreCase( RADIO_BUTTON_TYPE )) { return new RadioButtonFormControl( form, node ); - } else if (type.equalsIgnoreCase( "checkbox" )) { + } else if (type.equalsIgnoreCase( CHECKBOX_TYPE )) { return new CheckboxFormControl( form, node ); - } else if (type.equalsIgnoreCase( "submit" ) || type.equalsIgnoreCase( "image" )) { + } else if (type.equalsIgnoreCase( SUBMIT_BUTTON_TYPE ) || type.equalsIgnoreCase( IMAGE_BUTTON_TYPE )) { return new SubmitButton( form, node ); - } else if (type.equalsIgnoreCase( "button" )) { + } else if (type.equalsIgnoreCase( BUTTON_TYPE )) { return new Button( form, node ); - } else if (type.equalsIgnoreCase( "reset" )) { + } else if (type.equalsIgnoreCase( RESET_BUTTON_TYPE )) { return new ResetButton( form, node ); - } else if (type.equalsIgnoreCase( "file" )) { + } else if (type.equalsIgnoreCase( FILE_TYPE )) { return new FileSubmitFormControl( form, node ); } else { return new TextFieldFormControl( form, node ); @@ -347,6 +368,8 @@ public Object get( String propertyName ) { if (propertyName.equalsIgnoreCase( "name" )) { return FormControl.this.getName(); + } else if (propertyName.equalsIgnoreCase( "type" )) { + return FormControl.this.getType(); } else { return super.get( propertyName ); } @@ -491,6 +514,10 @@ class RadioButtonFormControl extends BooleanFormControl { + public String getType() { + return RADIO_BUTTON_TYPE; + } + public RadioButtonFormControl( WebForm form, Node node ) { super( form, node ); } @@ -517,6 +544,10 @@ private String[] _allowedValues; + public String getType() { + return UNDEFINED_TYPE; + } + public RadioGroupFormControl( WebForm form ) { super( form ); } @@ -628,6 +659,9 @@ class CheckboxFormControl extends BooleanFormControl { + public String getType() { + return CHECKBOX_TYPE; + } public CheckboxFormControl( WebForm form, Node node ) { super( form, node ); @@ -666,7 +700,7 @@ } -class TextFormControl extends FormControl { +abstract class TextFormControl extends FormControl { private String[] _value = new String[1]; private String[] _defaultValue; @@ -738,6 +772,8 @@ public Object get( String propertyName ) { if (propertyName.equalsIgnoreCase( "value" )) { return getValues()[0]; + } else if (propertyName.equalsIgnoreCase( "defaultValue" )) { + return _defaultValue[0]; } else { return super.get( propertyName ); } @@ -746,7 +782,7 @@ public void set( String propertyName, Object value ) { if (propertyName.equalsIgnoreCase( "value" )) { - _value[0] =_defaultValue[0] = value.toString(); + _value[0] = value.toString(); } else { super.set( propertyName, value ); } @@ -756,6 +792,11 @@ class TextFieldFormControl extends TextFormControl { + + public String getType() { + return TEXT_TYPE; + } + public TextFieldFormControl( WebForm form, Node node ) { super( form, node, NodeUtils.getNodeAttribute( node, "value" ) ); supportAttribute( "maxlength" ); @@ -763,8 +804,23 @@ } +class PasswordFieldFormControl extends TextFieldFormControl { + + public String getType() { + return PASSWORD_TYPE; + } + + public PasswordFieldFormControl(WebForm form, Node node) { + super(form, node); + } +} class HiddenFieldFormControl extends TextFieldFormControl { + + public String getType() { + return HIDDEN_TYPE; + } + public HiddenFieldFormControl( WebForm form, Node node ) { super( form, node ); } @@ -800,11 +856,19 @@ return NodeUtils.asText( node.getChildNodes() ); } + public String getType() { + return TEXTAREA_TYPE; + } + } class FileSubmitFormControl extends FormControl { + public String getType() { + return FILE_TYPE; + } + private UploadFileSpec _fileToUpload; @@ -880,6 +944,10 @@ private Options _selectionOptions; + + public String getType() { + return (isMultiValued()?MULTIPLE_TYPE:SINGLE_TYPE); + } SelectionFormControl( WebForm form, Node node ) { super( form, node ); Index: FrameHolder.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/FrameHolder.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- FrameHolder.java 27 Feb 2003 23:35:58 -0000 1.8 +++ FrameHolder.java 5 Dec 2003 04:06:53 -0000 1.9 @@ -125,7 +125,7 @@ private void createSubFrames( String targetName, String[] frameNames ) { _subFrames.put( targetName, frameNames ); for (int i = 0; i < frameNames.length; i++) { - _contents.put( frameNames[ i ], WebResponse.BLANK_RESPONSE ); + _contents.put( frameNames[ i ], WebResponse.createBlankResponse() ); } } Index: ResetButton.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/ResetButton.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ResetButton.java 17 Feb 2003 23:54:41 -0000 1.3 +++ ResetButton.java 5 Dec 2003 04:06:53 -0000 1.4 @@ -29,6 +29,9 @@ **/ public class ResetButton extends Button { + public String getType() { + return RESET_BUTTON_TYPE; + } ResetButton( WebForm form, Node node ) { super( form, node ); Index: SubmitButton.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/SubmitButton.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- SubmitButton.java 23 May 2003 03:09:27 -0000 1.16 +++ SubmitButton.java 5 Dec 2003 04:06:53 -0000 1.17 @@ -29,6 +29,10 @@ **/ public class SubmitButton extends Button { + public String getType() { + return (isImageButton()?IMAGE_BUTTON_TYPE:SUBMIT_BUTTON_TYPE); + } + /** * Returns true if this submit button is an image map. **/ @@ -71,7 +75,7 @@ SubmitButton( WebForm form, Node node ) { super( form, node ); - _isImageButton = NodeUtils.getNodeAttribute( node, "type" ).equalsIgnoreCase( "image" ); + _isImageButton = NodeUtils.getNodeAttribute( node, "type" ).equalsIgnoreCase( IMAGE_BUTTON_TYPE ); } Index: TableCell.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/TableCell.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- TableCell.java 19 Sep 2003 18:53:43 -0000 1.15 +++ TableCell.java 5 Dec 2003 04:06:53 -0000 1.16 @@ -66,6 +66,12 @@ return super.getDOM(); } + /** + * Returns the underlying HTML Element. + */ + public Element getElement() { + return _element; + } //-------------------------------- HTMLElement methods --------------------------------------- Index: WebForm.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/WebForm.java,v retrieving revision 1.86 retrieving revision 1.87 diff -u -r1.86 -r1.87 --- WebForm.java 24 Jun 2003 22:40:36 -0000 1.86 +++ WebForm.java 5 Dec 2003 04:06:53 -0000 1.87 @@ -584,6 +584,8 @@ public Object get( String propertyName ) { if (propertyName.equals( "target" )) { return getTarget(); + } else if (propertyName.equals( "length" )) { + return new Integer(getFormControls().length); } else { final FormParameter parameter = getParameter( propertyName ); if (parameter != UNKNOWN_PARAMETER) return parameter.getScriptableObject(); @@ -937,6 +939,10 @@ if (_value != null) claimValueIsRequired( values, _value ); } + + public String getType() { + return UNDEFINED_TYPE; + } /** * Returns the current value(s) associated with this control. These values will be transmitted to the server Index: WebResponse.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/WebResponse.java,v retrieving revision 1.122 retrieving revision 1.123 diff -u -r1.122 -r1.123 --- WebResponse.java 27 Aug 2003 02:16:06 -0000 1.122 +++ WebResponse.java 5 Dec 2003 04:06:53 -0000 1.123 @@ -768,8 +768,10 @@ //------------------------------------------ package members ------------------------------------------------ final static String BLANK_HTML = ""; - final static WebResponse BLANK_RESPONSE = new DefaultWebResponse( BLANK_HTML ); + final static WebResponse createBlankResponse() { + return new DefaultWebResponse(BLANK_HTML); + } WebWindow getWindow() { return _window; @@ -900,7 +902,7 @@ private void readTags( byte[] rawMessage ) throws UnsupportedEncodingException, MalformedURLException { ByteTagParser parser = new ByteTagParser( rawMessage ); ByteTag tag = parser.getNextTag(); - while (tag != null) { + while (tag != null ) { if (tag.getName().equalsIgnoreCase( "meta" )) processMetaTag( tag ); if (tag.getName().equalsIgnoreCase( "base" )) processBaseTag( tag ); if (tag.getName().equalsIgnoreCase( "frameset" )) _hasSubframes = true; @@ -1081,7 +1083,7 @@ //======================================================================================= - class ByteTag { + static class ByteTag { ByteTag( byte[] buffer, int start, int length ) throws UnsupportedEncodingException { _buffer = new String( buffer, start, length, WebResponse.getDefaultEncoding() ).toCharArray(); @@ -1155,22 +1157,31 @@ //======================================================================================= - class ByteTagParser { - + static class ByteTagParser { ByteTagParser( byte[] buffer ) { _buffer = buffer; } ByteTag getNextTag() throws UnsupportedEncodingException { - _start = _end+1; - while (_start < _buffer.length && _buffer[ _start ] != '<') _start++; - for (_end =_start+1; _end < _buffer.length && _buffer[ _end ] != '>'; _end++); - if (_end >= _buffer.length || _end < _start) return null; - return new ByteTag( _buffer, _start+1, _end-_start-1 ); + ByteTag byteTag = null; + do { + _start = _end+1; + while (_start < _buffer.length && _buffer[ _start ] != '<') _start++; + for (_end =_start+1; _end < _buffer.length && _buffer[ _end ] != '>'; _end++); + if (_end >= _buffer.length || _end < _start) return null; + byteTag = new ByteTag( _buffer, _start+1, _end-_start-1 ); + if (byteTag.getName().equalsIgnoreCase("script")) { + _scriptDepth++; + return byteTag; + } + if (byteTag.getName().equalsIgnoreCase("/script")) _scriptDepth--; + } while (_scriptDepth > 0); + return byteTag; } + private int _scriptDepth = 0; private int _start = 0; private int _end = -1; Index: WebWindow.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/WebWindow.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- WebWindow.java 23 Sep 2003 12:13:43 -0000 1.15 +++ WebWindow.java 5 Dec 2003 04:06:53 -0000 1.16 @@ -157,7 +157,7 @@ final String frameName = getTargetFrame( request ); String urlString = request.getURLString().trim(); if (urlString.startsWith( "about:" )) { - response = WebResponse.BLANK_RESPONSE; + response = WebResponse.createBlankResponse(); } else if (!HttpUnitUtils.isJavaScriptURL( urlString )) { response = _client.newResponse( request, frameName ); } else { |