# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#VERSION 1.0.1

1. Jemmy versioning has been started.
Current major version - 1.0
Current minor version - 1
Version can be received:
- By manifest file using:
META-INF/MANIFEST.MF file contains information like:
Jemmy-MajorVersion: 1.0
Jemmy-MinorVersion: 1
Jemmy-Build: 010323
- By static method within java:
public static String getMajorVersion();
public static String getMinorVersion();
public static String getBuild();
public static String getVersion();
- By java "-jar" option:
bash-2.03$ java -jar jemmy.jar 
Jemmy version : 1.0.1-010326


2. Robot operations are now produced safely.
Earlier dangerous mouse clicks on system gui application were possible
as a result of incorrect test.
Now NoComponentUnderMouseException exception is produced, if mouse is going to be pressed,
but no java component is under the mouse.


3. Some changes in org.netbeans.jemmy.testing package for stability.

#VERSION 1.0.2

Two errors were checked:
	jemmy/com/sun/jemmy/Timeouts.java
		Sleeping methods did not work if timeout had only default value
		and was not defined in this Timeouts instance.
	
	jemmy/com/sun/jemmy/operators/ComponentOperator.java
		Component should use visible part center coordinates
		(instead off the whole component coordinates) 
		for a mouse operation, if no coordinates were passed.

Functionality to work with JTable component.	
	New methods in org.netbeans.jemmy.operators.JTableOperator class.
		isEditing()
		isRowSelected(int)
		isColumnSelected(int)
		isCellSelected(int, int)
		getEditingRow()
		getEditingColumn()
		getModel()
		getValueAt(int, int)
		getPointToClick(int, int)
		clickOnCell(int, int, int)
		clickOnCell(int, int)
		findCellRow(String, boolean, boolean, int)
		findCellColumn(String, boolean, boolean, int)
		findCellRow(String, boolean, boolean)
		findCellColumn(String, boolean, boolean)
		clickForEdit(int, int)
		changeCellText(int, int, String)
	
Text components operators (JTextComponentOperator, JTextAreaOperator, 
JTextFieldOperator, JEditorPaneOperator) were modified.
	Caret operations were optimized by using all possible navigation keys.

	Some different approaches to clear text in text component were implemented.

Minor version was changed to 2.

#VERSION 1.0.3

4433709 bugfix
	enterText(String) methods have been implemented in JTextComponentOperator
	and JComboBoxOperator. It clears text, types new text, and pushes "Enter".

New operator - JComponentOperator.
	In contains methods to find and wait component by its tool tip,
	and some other useful methods.
Some classes were reparented to JComponentOperator.
jemmy/com/sun/jemmy/operators/AbstractButtonOperator.java
jemmy/com/sun/jemmy/operators/JLabelOperator.java
jemmy/com/sun/jemmy/operators/JComboBoxOperator.java
jemmy/com/sun/jemmy/operators/JListOperator.java
jemmy/com/sun/jemmy/operators/JTextComponentOperator.java
jemmy/com/sun/jemmy/operators/WindowOperator.java
jemmy/com/sun/jemmy/operators/JMenuBarOperator.java
jemmy/com/sun/jemmy/operators/JTableOperator.java
jemmy/com/sun/jemmy/operators/JPopupMenuOperator.java
jemmy/com/sun/jemmy/operators/JTabbedPaneOperator.java
jemmy/com/sun/jemmy/operators/JScrollPaneOperator.java
jemmy/com/sun/jemmy/operators/JSplitPaneOperator.java
jemmy/com/sun/jemmy/operators/JScrollBarOperator.java
jemmy/com/sun/jemmy/operators/JSliderOperator.java
jemmy/com/sun/jemmy/operators/JInternalFrameOperator.java

Javadoc comments.
jemmy/com/sun/jemmy/Action.java
jemmy/com/sun/jemmy/TestOut.java
jemmy/com/sun/jemmy/ActionProducer.java
jemmy/com/sun/jemmy/ComponentChooser.java
jemmy/com/sun/jemmy/DialogWaiter.java
jemmy/com/sun/jemmy/ComponentSearcher.java
jemmy/com/sun/jemmy/JemmyProperties.java
jemmy/com/sun/jemmy/FrameWaiter.java
jemmy/com/sun/jemmy/EventDispatcher.java
jemmy/com/sun/jemmy/Waiter.java
jemmy/com/sun/jemmy/WindowWaiter.java
jemmy/com/sun/jemmy/Test.java
jemmy/com/sun/jemmy/Scenario.java
jemmy/com/sun/jemmy/operators/AbstractButtonOperator.java
jemmy/com/sun/jemmy/operators/ComponentOperator.java
jemmy/com/sun/jemmy/operators/JButtonOperator.java
jemmy/com/sun/jemmy/operators/JCheckBoxOperator.java
jemmy/com/sun/jemmy/operators/JComboBoxOperator.java
jemmy/com/sun/jemmy/operators/JLabelOperator.java
jemmy/com/sun/jemmy/operators/JListOperator.java
jemmy/com/sun/jemmy/operators/JRadioButtonOperator.java
jemmy/com/sun/jemmy/operators/JTextAreaOperator.java
jemmy/com/sun/jemmy/operators/JTextComponentOperator.java
jemmy/com/sun/jemmy/operators/JTextFieldOperator.java
jemmy/com/sun/jemmy/operators/JToggleButtonOperator.java
jemmy/com/sun/jemmy/operators/WindowOperator.java
jemmy/com/sun/jemmy/operators/JMenuBarOperator.java
jemmy/com/sun/jemmy/operators/JMenuOperator.java
jemmy/com/sun/jemmy/operators/JPopupMenuOperator.java
jemmy/com/sun/jemmy/operators/JMenuItemOperator.java
jemmy/com/sun/jemmy/operators/JTreeOperator.java
jemmy/com/sun/jemmy/operators/JDialogOperator.java
jemmy/com/sun/jemmy/operators/JFrameOperator.java
jemmy/com/sun/jemmy/operators/JTabbedPaneOperator.java
jemmy/com/sun/jemmy/operators/JEditorPaneOperator.java
jemmy/com/sun/jemmy/operators/ContainerOperator.java
jemmy/com/sun/jemmy/operators/JInternalFrameOperator.java
jemmy/com/sun/jemmy/operators/JComponentOperator.java

jemmy/com/sun/jemmy/operators/ComponentOperator.java
	One error was checked: in event dispatching mode moveMouse(int, int) method did exitMouse().

jemmy/com/sun/jemmy/operators/JMenuOperator.java
	findJMenu(*) and waitJMenu(*) methods.
	isPopupMenuVisible() method
	getPopupMenu() method.

jemmy/com/sun/jemmy/operators/JMenuItemOperator.java
	Using Container instead of JPopupMenu in static findJMenuItem and waitJMenuItem method
	since MenuItem also can be on JMenuBar.
	
jemmy/com/sun/jemmy/operators/JTreeOperator.java
	One error was checked: isEditable() method returned value of isEditing().

update: jemmy/com/sun/jemmy/operators/JScrollPaneOperator.java
	setValues(int, int) method.
	
update: jemmy/com/sun/jemmy/operators/JScrollBarOperator.java
	setValue(int) method.

Minor version was changed to 3.

#VERSION 1.0.4

New implementation of methods to wait event queue empty
	One new class QueueTool.
	There are two methods:
	QueueTool.waitEmpty() - waits EventQueue to be empty.
	QueueTool.waitEmpty(long emptyTime) - waits EventQueue to stay empty
	for "emptyTime" milliseconds.

	Existing static EventDispatcher.waitQueueEmpty methods use 
	QueueTool class. New implementation is more correct, and tests should
	be more stable even if they use one of these two methods.

	EventDispatcher has two new methods:
	EventDispatcher.waitQueueEmpty(long emptyTime);
	EventDispatcher.waitQueueEmpty(long emptyTime, TestOut output, Timeouts timeouts);

jemmy/com/sun/jemmy/operators/ComponentOperator.java
	clickMouse should move mouse first both for robot and nonrobot modes.

Minor version has been changed to 4

#VERSION 1.0.5

4478876 and 4464081 bugfixes

4482908 bugfix
4464101 bugfix.

jemmy/com/sun/jemmy/operators/JComboBoxOperator.java
	Combo button have not to be pushed if popup is already visible.

jemmy/com/sun/jemmy/operators/JListOperator.java
jemmy/com/sun/jemmy/operators/JTableOperator.java
jemmy/com/sun/jemmy/operators/JTreeOperator.java
	Changes to work with components covered by renderer and editor.
	
jemmy/com/sun/jemmy/operators/ContainerOperator.java
	getComponentAt(int, int) method

Component visualizer.
Interface and three default implementation allow to define own/on of implemented
algorithm to prepare component to "user" input.
Interface:
org.netbeans.jemmy.ComponentOperator.ComponentVisualizer
Default implementations:
jemmy/com/sun/jemmy/util/EmptyVisualizer.java - do not do anything.
jemmy/com/sun/jemmy/util/DefaultVisualizer.java
	- activates window by toFront() and window event
	- scrolls to the component
	- switches tabs
	- activates internal frames
jemmy/com/sun/jemmy/util/MouseVisualizer.java - just like DefaultVisualizer,
	except uses robot operation to activate window (click on window (0,0) point)
	

makeComponentVisible method in ComponentOperator replaces activateWindow
(last has been made deprecated (still works)). 

ComponentOperator.copyEnvironment(ComponentOperator) method.
Copies everithing: timeouts, output, disp. model, visualizer.

JMenuItemOperator shouldn't activate window before push.
JemmyProperties.getProperty and JemmyProperties.setProperty methods
was made public to allow other classes keep their static part.

EventDispatcher class can now be used to provide mouse robot operations 
outside any component. It does not throw exception if value defined by
method checkComponentUnderMouse(boolean) is false.
	
WindowOperator.getFocusOwner() method.
Can be used to define if window is really activated.
	
JScrollPaneOperator.checkInside methods.
	
 Author tag was modified.
Alexander Ilyin shura@nbsp.nsk.su => Alexandre Iline alexandre.iline@sun.com

"Old" jemmy version was removed.

jemmy/com/sun/jemmy/operators/ComponentOperator.java
	Two new methods: isVisible and isShowing
	Javadoc comments regarding 4463363 bug.

jemmy/com/sun/jemmy/operators/JDialogOperator.java
	getTopModalDialog method (4469838 bugfix)
	
jemmy/com/sun/jemmy/operators/JTabbedPaneOperator.java
	Javadoc comments regarding 4463363 bug.
	
jemmy/com/sun/jemmy/util/DefaultVisualizer.java
	Visualizer can now check that component isn't under modal dialog. 
	(4469838 bugfix)

#VERSION 1.0.6

EventTool class
Class has functionality to work with events 
received by AWTEventListener, which was added by 
Toolkit.addAWTEventListener(AWTEventListener, long)
method.

It can also be used for test reliability instead of 
QueueTool class.
If tested application do something through EventQueue
what does not change GUI components state, test developer
can wait that no events are posted instead of wait
EventQueue empty.

EventTool class has a bunch of methods to do this.

#VERSION 1.0.7

One more operator:
JFileChooserOperator

Six more targets were added into main Makefile
to build zip and jar archives.
Now the full list of targets is:
jar - builds jar with classes.
jarsrc - adds sources into jar
jarapi - adds javadoc
jarall - adds both javadoc and sources
zip - builds zip with classes.
zipsrc - adds sources into zip
zipapi - adds javadoc
zipall - adds both javadoc and sources

ComponentOperator:
One error has been fixed for the robot mode.

#VERSION 1.0.8

Steps 2 and 4 from Jemmy updating plan.

2. Operator class.

Common ancestor for all operator classes.
Contain all functionality to work with operator environment.

Class has method:
public static Operator getEnvironmentOperator();
which returns

4. Operator constructors. 

New operator be created by typical
<component>Operator(ContainerOperator container, int index)
<component>Operator(ContainerOperator container, String text, int index)
has all container's enironment (not just timeouts and output as was before)

Changes in window operators constructors 
<window>Operator(WindowOperator owner, int index)
<window>Operator(WindowOperator owner, String title, int index)
are the same.

If component does not have a container(owner), 
operator has one more constructor with operator to get environment from:
JDialogOperator(String title, int index, Operator envOperator)
JPopupMenu(Operator envOperator)
These operators have constructors without this parameter as well:
JDialogOperator(String title, int index)
In this case operator returned by getEnvironmentOperator() is used.




ComponentOperator.StringComparator interface.

Defines how to compare two strings.

Default implementation (ComponentOperator.DefaultStringComparator)
uses a way was used before by 
isCaptionEqual(String, String, boolean, boolean) method.

Each operator class has it's own StringComparator.

It is used in another operator constructor (during component waiting), 
if an operator plays a role of container/owner/environment.

It is also used in new operators' methods like
public int JListOperator.findItemIndex(String item, int index);

NoBlocking methods.
AbstractButtonOperator.pushNoBlock()
AbstractButtonOperator.changeSelectionNoBlock(boolean)
JMenuOperator.pushMenuNoBlock(ComponentChooser[] choosers) 
JMenuOperator.pushMenuNoBlock(String[] names, boolean ce, boolean ccs) 
JMenuOperator.pushMenuNoBlock(String[] names) 
JMenuOperator.pushMenuNoBlock(String path, String delim, boolean ce, boolean ccs) 
JMenuOperator.pushMenuNoBlock(String path, String delim) 
JPopupMenuOperator.pushMenuNoBlock(ComponentChooser[] choosers) 
JPopupMenuOperator.pushMenuNoBlock(String[] names, boolean ce, boolean ccs) 
JPopupMenuOperator.pushMenuNoBlock(String[] names) 
JPopupMenuOperator.pushMenuNoBlock(String path, String delim, boolean ce, boolean ccs) 
JPopupMenuOperator.pushMenuNoBlock(String path, String delim) 
JMenuOperator.pushMenuNoBlock(ComponentChooser[] choosers) 
JMenuOperator.pushMenuNoBlock(String[] names, boolean ce, boolean ccs) 
JMenuOperator.pushMenuNoBlock(String[] names) 
JMenuOperator.pushMenuNoBlock(String path, String delim, boolean ce, boolean ccs) 
JMenuOperator.pushMenuNoBlock(String path, String delim) 

4512814 rfe
JTreeOperator.getChildCount(Object)
JTreeOperator.getChildCount(TreePath)
JTreeOperator.getChild(Object, int)
JTreeOperator.getChildren(Object)
JTreeOperator.getChildPath(TreePath, int)
JTreeOperator.getChildPaths(TreePath)

#VERSION 1.0.9

jemmy/com/sun/jemmy/util/MouseVisualizer.java
	Should activate window by toFront() before click on corner.
	
jemmy/com/sun/jemmy/operators/JListOperator.java
	Throw exception if item does not exist.
	methods selectItem(String, ...) should throw an exception
	if item is not found.

jemmy/com/sun/jemmy/Timeout.java
	Do not sleep if time equals to 0
	Thread.sleep(0) can take up to 10 milliseconds.

jemmy/com/sun/jemmy/explorer/ComponentBrowser.java
	Shows implemented interfaces.
	There is one more page containing interface implemented
	by component class.

jemmy/com/sun/jemmy/ActionProducer.java
	run() and actionProduced(Object) are final.

jemmy/com/sun/jemmy/EventDispatcher.java
	4607042 bugfix.


Javadoc has been updated.
Most files has been affected by this change.


#VERSION 1.0.10

Javadoc has been updated (Allan Jacobs).

getDump() method has been fixed in some classes:
jemmy/com/sun/jemmy/operators/JComboBoxOperator.java
jemmy/com/sun/jemmy/operators/JLabelOperator.java
jemmy/com/sun/jemmy/operators/JMenuOperator.java
jemmy/com/sun/jemmy/operators/JTabbedPaneOperator.java

Right way to pass no parameters into the application.
jemmy/com/sun/jemmy/ClassReference.java

One more method: selectItem(String) in
jemmy/com/sun/jemmy/operators/JComboBoxOperator.java


#VERSION 1.0.11

4637840 bugfix

Ability to work with javax.swing.text.StyledDocument:

New interface:
org.netbeans.jemmy.operators.JTextComponentOperator.TextChooser - 
	defines text searching criteria


New methods:
org.netbeans.jemmy.operators.JTextComponentOperator.getPositionByText(String, TextChooser, int),
org.netbeans.jemmy.operators.JTextComponentOperator.getPositionByText(String, TextChooser) - 
	searches position by text and criteria defined by TextChooser

org.netbeans.jemmy.operators.JTextComponentOperator.getDisplayedText() - 
	gives text which is actually displayed.


New classes:
org.netbeans.jemmy.operators.JTextPaneOperator - 
	operator for javax.swing.JTextPane component

jemmy.org.netbeans.jemmy.util.AbstractTextStyleChooser - 
	abstract org.netbeans.jemmy.operators.JTextComponentOperator.TextChooser
	simplifying working with StyledDocument

jemmy.org.netbeans.jemmy.util.TextStyleChooser
	implementation containing most tipical criteria.


Other new operators:
org.netbeans.jemmy.operators.JCheckBoxMenuItemOperator
org.netbeans.jemmy.operators.JColorChooserOperator
org.netbeans.jemmy.operators.JPasswordFieldOperator
org.netbeans.jemmy.operators.JProgressBarOperator
org.netbeans.jemmy.operators.JRadioButtonMenuItemOperator

#VERSION 1.0.12

Solution to work with dynamic popups loading.
JPopupMenuOperator:
One more constructor, methods to wait popup by a chooser and menu item text. 

21187 issue fix

Workaround for Gnome window activization.
Do this before any operators creation:
ComponentOperator.setDefaultComponentVisualizer(new MouseVisualizer(MouseVisualizer.TOP, 0.5, 10, false));



Some wait methods which could be used for test synchronization.

Root one:
Operator.waitState(ComponentChooser)
Timeout value to wait the state defined by ComponentChooser parameter
is defined by ComponentOperator.WaitStateTimeout timeout.

Next some invoke waitState methods:
AbstractButtonOperator.waitText(String)
DialogOperator.waitTitle(String)
FrameOperator.waitTitle(String)
JComboBoxOperator.waitItemSelected(int)
JComboBoxOperator.waitItemSelected(String)
JLabelOperator.waitText(String)
JListOperator.waitItemSelection(int, boolean)
JListOperator.waitItem(String, int)
JTableOperator.waitCell(String, int, int)
JTextComponentOperator.waitText(String, int)
JTextComponentOperator.waitText(String)
JTextComponentOperator.waitCaretPosition(int)
JTreeOperator.waitExpanded(TreePath)
JTreeOperator.waitCollapsed(TreePath)
JTreeOperator.waitVisible(TreePath)
JTreeOperator.waitSelected(TreePath[])
JTreeOperator.waitSelected(TreePath)
JTreeOperator.waitRow(String, int)



Post-operation verifications.
If verification mode is on (Operator.getVerification() == true),
post-verification is performed for some particular operations:
text typing (JTextComponentOperator), combobox item selecting (JComboBoxOperator), 
tree path selecting (JTreeOperator).
Methods to work with verification mode:
static Operator.getDefaultVerification()
static Operator.setDefaultVerification(boolean)
Operator.getVerification()
Operator.setVerification(boolean)



Safety feature. 
Text component clearing now works through ActionProducer.

21668 issue fix.

#VERSION 1.0.13


21846, 21769, 21771 and 21872 fixes

#VERSION 2.0.beta

#VERSION 2.0.gamma

Focus, Window, Menu drivers.

Correct way to install input drivers depending on mode.

One more method in TreeDriver - startEditing.

All method containing two boolean parameters
(compare exactly, compare case sensitively) have been made deprecated.

22726, 22953 fixes

#VERSION 2.0.1

23663 DefaultJMenuDriver.java
        Subpopup is now searched by regular window/component searching - 
        not by JMenu.getPopupMenu().
      JMenuBarOperator.java
	makeComponentVisible() before menu pushing
	
25020 ComponentOperator.java
        getWindow() method modified as proposed in bug description.
	
25319 JComboBoxOperator.java
        If no item selected, JComboBoxByItemFinder returns true.

25134 JListOperator.java
        NoSuchItemException is thrown for nonexistent item.
	
25303 JTabbedPaneOperator.java
	makeComponentVisible() before tab selecting
	
GUIBrowser.java
	One reload() removed, only showing windows showed.

JTreeOperator.java
	Adding only visible nodes to dump
        It make GUI browser loading inside IDE twice faster.

DefaultWindowDriver.java
	COMPONENT_RESIZED is posted during resizing.


#VERSION 2.0.2

25983 
        JTreeOperator
25255 
        Added new package - src.org.netbeans.jemmy.accessibility
        Classes: AccessibilityChooser, AccessibleNameChooser, AccessibleNameChooser
	
25307
        - all inner finders made public:
                AbstractButtonOperator.AbstractButtonFinder
                AbstractButtonOperator.AbstractButtonByLabelFinder

        - new constructor added to all by-class finders:
                public AbstractButtonOperator.AbstractButtonFinder()

        - new constructor added to all by-string resource finders:
                public AbstractButtonOperator.AbstractButtonByLabelFinder(String)
                public JListOperator.JListByItemFinder(String, int)

        - new constructors are added to all operators:
                public AbstractButtonOperator(ContainerOperator, ComponentChooser, int)
                public AbstractButtonOperator(ContainerOperator, ComponentChooser)

        - methods for finding subcomponent added to ContainerOperator:
                public Component findSubComponent(ComponentChooser, int)
                public Component findSubComponent(ComponentChooser)
                
        - methods for finding subwindow added to WindowOperator:
                public Window findSubWindow(ComponentChooser, int)
                public Window findSubWindow(ComponentChooser)



25409, 25406, 25407, 25408

        New methods in JTableOperator:
        Point findCell(*)
        int findCellRow(*, int column, int index)
        int findCellColumn(*, int row, int index)
        int findColumn(String)

        new classes JTableHeaderOperator, OrderedListDriver

#VERSION 2.0.3

26251:

        QueueTool:
                new methods invokeSmoothly(*).
                They perform an action directly if executed in event dispatching thread,
                otherwise invoke invokeAndWait(*).

        EventDriver:
                uses QueueTool.invokeSmoothly(*) for event dispatching.
                It makes possible to create bigger transactions including
                event dispatching.

        RobotDriver.java:
                Does not wait for the event queue emptying being executed
                in event dispatching thread.
	
        JTreeMouseDriver.java, JListMouseDriver.java, JTableMouseDriver.java:
        	Click point calculation performed in the same InvocationEvent as events dispatching.

        Operator.java:
                Uses QueueTool.invokeSmoothly(*) for mapping
	
        JTreeOperator.java, JListOperator.java, JTableOperator.java:
                Row calculation performed in the same InvocationEvent as events dispatching.

ChoiceDriver.java:
	Changes for 1.4
        Behavior of java.awt.Choise is a little bit different for 1.4.
	
Documentation: 
        new document describing operator environment.
        plans page has been updated.

Some javadoc for classes in "drivers" subpackage.

#VERSION 2.0.3.queue-branch

New EventQueue using technique. See http://jemmy.netbeans.org/queue.html for more info.

Post-verification added to some operators.

        Files:
        src/org/netbeans/jemmy/operators/AbstractButtonOperator.java
        src/org/netbeans/jemmy/operators/JListOperator.java
        src/org/netbeans/jemmy/operators/JTabbedPaneOperator.java
        src/org/netbeans/jemmy/operators/ListOperator.java
        src/org/netbeans/jemmy/operators/CheckboxOperator.java
        src/org/netbeans/jemmy/operators/ChoiceOperator.java
        src/org/netbeans/jemmy/operators/WindowOperator.java

src/org/netbeans/jemmy/operators/WindowOperator.java
	isFocused() works as (getFocusOwner() != null) for java older than 1.4
	isActive() - as isShowing()

src/org/netbeans/jemmy/TestOut.java
	No in after print(String) method

#VERSION 2.0.3.queue-branch.1

26907: KeyEvent are posted to first native container.
Files:
        src/org/netbeans/jemmy/drivers/input/KeyEventDriver.java
	
27152: 
Files:
src/org/netbeans/jemmy/drivers/menus/DefaultJMenuDriver.java
src/org/netbeans/jemmy/drivers/menus/QueueJMenuDriver.java

25018 bugfix propogated on branch.

27140:
Files:
src/org/netbeans/jemmy/drivers/menus/QueueJMenuDriver.java

#VERSION 2.1.0

Merge of trunk and queue-branch versions. See <a href="http://jemmy.netbeans.org/queue.html">"Queue Using"</a>
for more information

Versioning. Build number and packages implementtion version.
See <a href="http://jemmy.netbeans.org/JemmyVersioning.html">"Jemmy Versioning"</a>
for more info.

Image library. New library allowing to compare two images using different approaches
and to find one image inside another.

New class: PNGDecored. Allows to load image from PNG graphics file.

Bugfixes: 23436, 28144, 23436, 21011


#VERSION 2.1.1

28822:
src/org/netbeans/jemmy/drivers/menus/DefaultJMenuDriver.java
	
28754:
src/org/netbeans/jemmy/operators/FrameOperator.java
src/org/netbeans/jemmy/operators/JInternalFrameOperator.java
	
28833:
src/org/netbeans/jemmy/operators/JFileChooserOperator.java

28835:
src/org/netbeans/jemmy/operators/JFileChooserOperator.java
	
24313:
src/org/netbeans/jemmy/operators/JMenuBarOperator.java
src/org/netbeans/jemmy/operators/JPopupMenuOperator.java
	
28672:
src/org/netbeans/jemmy/operators/JTabbedPaneOperator.java

some more callPopup methods:
src/org/netbeans/jemmy/operators/JPopupMenuOperator.java
	
Correct initialization:
src/org/netbeans/jemmy/JemmyProperties.java
	
Do not install new queue unless necessary:
src/org/netbeans/jemmy/QueueTool.java
	
	


#VERSION 2.1.2

 New set of methods with String path parameter:
 they do not have a parameter-separator:
 JMenuOperator.pushMenu(String path);
 JTreeOperator.findPath(String path);
 
The way of parsing path string is defined by 
Operator.PathParser implementation. Parser is passed
 between operators similar to other environment.
 
By default, path string is treated as separated by "|" symbol, 
so, by default, this two lines are equal:
 menubar.pushMenu("File|New", "|");
 and
 menubar.pushMenu("File|New");
 
Files:
 src/org/netbeans/jemmy/operators/JMenuBarOperator.java
 src/org/netbeans/jemmy/operators/JMenuOperator.java
 src/org/netbeans/jemmy/operators/JPopupMenuOperator.java
 src/org/netbeans/jemmy/operators/JTreeOperator.java
 src/org/netbeans/jemmy/operators/Operator.java
 

 29761 fix:
 src/org/netbeans/jemmy/operators/JMenuBarOperator.java
 src/org/netbeans/jemmy/operators/JMenuItemOperator.java
 src/org/netbeans/jemmy/operators/JMenuOperator.java
 src/org/netbeans/jemmy/operators/JPopupMenuOperator.java


 28672 fix:
 src/org/netbeans/jemmy/operators/JTabbedPaneOperator.java


 Symbolic constants for names in Hashtable generated by 
getDump() methods.
 All constants have "_DPROP" postfix:
 public static final String AbstractButtonOperator.TEXT_DPROP = "Text";
 
Files:
 Almost all operators - the ones having getDump() method.
 
 
#VERSION 2.2.0

Divers updated as described in
http://jemmy.netbeans.org/servlets/ReadMsg?msgId=446615&listName=users
Files: Almost all driver classes.

InternalFrameDriver class as described in
http://jellytools.netbeans.org/issues/show_bug.cgi?id=30195
Affected files:
src/org/netbeans/jemmy/drivers/DriverManager.java
src/org/netbeans/jemmy/drivers/windows/DefaultInternalFrameDriver.java
src/org/netbeans/jemmy/operators/JInternalFrameOperator.java
src/org/netbeans/jemmy/drivers/InternalFrameDriver.java

JComponentOperator.getWindowContainer() returns first window-like 
container: JInternalFrame or Window.

util.NameComponentChooser class. (thanks to Nathan Paris)
Allows to find a component by component name - string
returned by Component.getname() method.

29761 fix:
src/org/netbeans/jemmy/operators/JMenuItemOperator.java
	
	

#VERSION 2.2.1

Javadoc has been completed.

JSpinner operator and driver
(Could be compiled and used under 1.4 only.)
        src/org/netbeans/jemmy/drivers/scrolling/JSpinnerDriver.java
        src/org/netbeans/jemmy/operators/JSpinnerOperator.java

JSlider is now working through ScrollDriver
        src/org/netbeans/jemmy/operators/JSliderOperator.java
        src/org/netbeans/jemmy/drivers/scrolling/JSliderDriver.java

28835: JemmyException is thrown if getApproveButton() returns null.
        src/org/netbeans/jemmy/operators/JFileChooserOperator.java

30939: description field has been removed.
        src/org/netbeans/jemmy/JemmyException.java

Throwable is accepted as an inner exception by JemmyException
        src/org/netbeans/jemmy/JemmyException.java

StringComparator can be passed to StringPropChooser constructor
        src/org/netbeans/jemmy/util/StringPropChooser.java

Tooltip component is now searched through all the windows:
        src/org/netbeans/jemmy/operators/JComponentOperator.java
