blob: 272adee01f0339e28ee3cef1ccc6b69ec2661c65 [file] [log] [blame]
/*
* 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.
*/
package org.openide;
import org.netbeans.junit.NbTestSuite;
import java.awt.Component;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.util.*;
import javax.swing.*;
import javax.swing.JLabel;
import javax.swing.event.ChangeListener;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.openide.InstantiatingIteratorTest.Listener;
import org.openide.util.HelpCtx;
/** Testing functional implementation calling the methods to interface <code>WizardDescriptor.AsynchronousInstantiatingIterator</code>
* from WizardDescriptor. Check if the method <code>instantiate()</code> is called outside AWT in particular.
* @see Issue 62161
*/
public class AsynchronousInstantiatingIteratorTest extends InstantiatingIteratorTest {
public static Test suite() {
return GraphicsEnvironment.isHeadless() ? new TestSuite() : new TestSuite(AsynchronousInstantiatingIteratorTest.class);
}
public AsynchronousInstantiatingIteratorTest (String name) {
super(name);
}
public static void main(String[] args) {
junit.textui.TestRunner.run (new NbTestSuite (AsynchronousInstantiatingIteratorTest.class));
System.exit (0);
}
private Iterator iterator;
protected void setUp () {
iterator = new Iterator ();
wd = new WizardDescriptor (iterator);
wd.addPropertyChangeListener(new Listener ());
java.awt.Dialog d = DialogDisplayer.getDefault ().createDialog (wd);
checkOrder = false;
shouldThrowException = false;
//d.show();
}
/** Run all tests in AWT thread */
protected boolean runInEQ() {
return true;
}
public void testInstantiateInAWTQueueOrNot () {
checkIfInAWT = true;
wd.doNextClick ();
finishWizard (wd);
try {
Set newObjects = wd.getInstantiatedObjects ();
} catch (IllegalStateException ise) {
fail ("IllegalStateException was caught because WD.instantiate() called in AWT queue.");
}
assertNotNull ("InstantiatingIterator was correctly instantiated.", getResult ());
}
public class Panel implements WizardDescriptor.FinishablePanel {
private JLabel component;
private String text;
public Panel(String text) {
this.text = text;
}
public Component getComponent() {
if (component == null) {
component = new JLabel (text);
}
return component;
}
public void addChangeListener(ChangeListener l) {
changeListenersInPanel.add (l);
}
public HelpCtx getHelp() {
return null;
}
public boolean isValid() {
return true;
}
public void readSettings(Object settings) {
log ("readSettings of panel: " + text + " [time: " + System.currentTimeMillis () +
"] with PROP_VALUE: " + handleValue (wd.getValue ()));
}
public void removeChangeListener(ChangeListener l) {
changeListenersInPanel.remove (l);
}
public void storeSettings(Object settings) {
if (checkOrder) {
assertNull ("WD.P.storeSettings() called before WD.I.instantiate()", iterator.result);
// bugfix #45093, remember storeSettings could be called multiple times
// do check order only when the first time
checkOrder = false;
}
log ("storeSettings of panel: " + text + " [time: " + System.currentTimeMillis () +
"] with PROP_VALUE: " + handleValue (wd.getValue ()));
if (exceptedValue != null) {
assertEquals ("WD.getValue() returns excepted value.", exceptedValue, handleValue (wd.getValue ()));
}
}
public boolean isFinishPanel () {
return true;
}
}
protected Boolean getInitialized () {
return iterator.initialized;
}
protected Set getResult () {
return iterator.result;
}
public class Iterator implements WizardDescriptor.AsynchronousInstantiatingIterator {
int index = 0;
WizardDescriptor.Panel panels[] = new WizardDescriptor.Panel[2];
java.util.Set helpSet;
private Boolean initialized = null;
private Set result = null;
public WizardDescriptor.Panel current () {
assertTrue ("WD.current() called on initialized iterator.", initialized != null && initialized.booleanValue ());
return panels[index];
}
public String name () {
return "Test iterator";
}
public boolean hasNext () {
return index < 1;
}
public boolean hasPrevious () {
return index > 0;
}
public void nextPanel () {
if (!hasNext ()) throw new NoSuchElementException ();
index ++;
}
public void previousPanel () {
if (!hasPrevious ()) throw new NoSuchElementException ();
index --;
}
public void addChangeListener (ChangeListener l) {
changeListenersInIterator.add (l);
}
public void removeChangeListener (ChangeListener l) {
changeListenersInIterator.remove (l);
}
public java.util.Set instantiate () throws IOException {
if (checkIfInAWT) {
if (SwingUtilities.isEventDispatchThread ()) {
throw new IOException ("Cannot run in AWT queue.");
}
}
if (shouldThrowException) {
throw new IOException ("Test throw IOException during instantiate().");
}
if (initialized.booleanValue ()) {
helpSet.add ("member");
result = helpSet;
} else {
result = null;
}
return result;
}
public void initialize (WizardDescriptor wizard) {
helpSet = new HashSet ();
panels[0] = new Panel("first panel");
panels[1] = new Panel("second panel");
initialized = Boolean.TRUE;
}
public void uninitialize (WizardDescriptor wizard) {
helpSet.clear ();
initialized = Boolean.FALSE;
panels = null;
}
}
}