harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Maxim Berkultsev (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-420) improper listener notification in java.beans.VetoableChangeSupport
Date Fri, 28 Apr 2006 09:13:38 GMT
improper listener notification in java.beans.VetoableChangeSupport
------------------------------------------------------------------

         Key: HARMONY-420
         URL: http://issues.apache.org/jira/browse/HARMONY-420
     Project: Harmony
        Type: Bug

  Components: Classlib  
 Environment: Harmony Class Library, J9
    Reporter: Maxim Berkultsev
    Priority: Minor


VetoableChangeSupport functionality is not covered completely

Following test code is under examination

----------------------------------------------

import java.beans.*; 

public class VetoableChangeSupportTest  {
	
	private VetoableChangeSupport support = new VetoableChangeSupport(this);
	
	private PropertyChangeEvent event;
	
	private String vetoedPropertyName = "property1";
	
	private Integer basicOldValue = new Integer(1);
	private Integer basicNewValue = new Integer(2);
	
	public static void main(String[] args) { 
		new VetoableChangeSupportTest().run(); 
	} 

	void run(){
		support.addVetoableChangeListener(new VetoableChangeListener() {
			public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException { 
				event = e; 
				String propertyName = e.getPropertyName();
				
				Integer oldValue = (Integer) e.getOldValue();
				Integer newValue = (Integer) e.getNewValue();
				
				System.out.println("in the first listener with property named = "
					+ propertyName
					+ " and old value = "
					+ oldValue
					+ " and new value = "
					+ newValue
				);
				
				
				if(propertyName.equals(vetoedPropertyName) && newValue.equals(basicNewValue))
{ 
					System.out.println("in the first listener with property named = "
						+ propertyName
						+ " and old value = "
						+ oldValue
						+ " and new value = "
						+ newValue
						+ " exception is thrown"
					);

					throw new PropertyVetoException(propertyName + " change is vetoed.", e);
				}
			}
		});
		
		support.addVetoableChangeListener(new VetoableChangeListener() {
			public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException { 
				event = e; 
				String propertyName = e.getPropertyName();
				
				Integer oldValue = (Integer) e.getOldValue();
				Integer newValue = (Integer) e.getNewValue();
				
				System.out.println("in the second listener with property named = "
					+ propertyName
					+ " and old value = "
					+ oldValue
					+ " and new value = "
					+ newValue
				);
				
				if(propertyName.equals(vetoedPropertyName) && newValue.equals(basicOldValue))
{
					System.out.println("in the second listener with property named = "
						+ propertyName
						+ " and old value = "
						+ oldValue
						+ " and new value = "
						+ newValue
						+ " exception is thrown"
					);

					throw new PropertyVetoException(propertyName + " change is vetoed.", e);
				}
			}
		});
		
		try {
			support.fireVetoableChange(vetoedPropertyName, basicNewValue, basicOldValue);
		} catch(PropertyVetoException pve) {
			System.out.println("PropertyVetoException is finally thrown.");
		}
	}
	
} 

----------------------------------------------

For j9 + ClassLib the output of the test is

in the first listener with property named = property1 and old value = 2 and new value = 1
in the second listener with property named = property1 and old value = 2 and new value = 1
in the second listener with property named = property1 and old value = 2 and new value = 1
exception is thrown
in the first listener with property named = property1 and old value = 1 and new value = 2
in the first listener with property named = property1 and old value = 1 and new value = 2
exception is thrown
PropertyVetoException is finally thrown.

For RI

in the first listener with property named = property1 and old value = 2 and new value = 1
in the second listener with property named = property1 and old value = 2 and new value = 1
in the second listener with property named = property1 and old value = 2 and new value = 1
exception is thrown
in the first listener with property named = property1 and old value = 1 and new value = 2
in the first listener with property named = property1 and old value = 1 and new value = 2
exception is thrown
in the second listener with property named = property1 and old value = 1 and new value = 2
PropertyVetoException is finally thrown.

Looks like the second listener is not notified after the PropertyVetoException is thrown for
the second time

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message