blob: cf1641370b8c5c4ccd1ed5e18a654f601dbddcb7 [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.netbeans.core.windows.view.ui;
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import javax.swing.SwingUtilities;
import org.netbeans.core.windows.actions.GlobalPropertiesAction;
import org.netbeans.junit.NbTestCase;
import org.netbeans.junit.RandomlyFails;
import org.openide.modules.ModuleInfo;
import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import org.openide.util.Lookup;
import org.openide.windows.TopComponent;
/**
*
* @author Jaroslav Tulach
*/
@RandomlyFails
public class NbSheetTest extends NbTestCase {
static {
System.setProperty("org.openide.windows.DummyWindowManager.VISIBLE", "false");
}
NbSheet s;
GlobalPropertiesAction a;
static TopComponent tc;
public NbSheetTest(String testName) {
super(testName);
}
@Override
protected Level logLevel() {
return Level.FINE;
}
@Override
protected String logRoot() {
return NbSheetTest.class.getPackage().getName();
}
@Override
protected int timeOut() {
return 15000;
}
@Override
protected void setUp() throws Exception {
Lookup.getDefault().lookup(ModuleInfo.class);
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
s = NbSheet.findDefault();
}
});
assertNotNull("Sheet found", s);
assertFalse("Not yet visible", s.isShowing());
a = GlobalPropertiesAction.get(GlobalPropertiesAction.class);
if (tc == null) {
tc = new TopComponent();
}
}
public void testIssue97069EgUseSetActivatedNodesNull() throws Exception {
class Empty implements Runnable {
public void run() { }
}
Empty empty = new Empty();
class R implements Runnable {
N node = new N("node1");
public void run() {
tc.setActivatedNodes(new Node[] { node });
tc.open();
tc.requestActive();
assertTrue("action enabled", a.isEnabled());
a.actionPerformed(new ActionEvent(a, 0, ""));
}
}
R activate = new R();
SwingUtilities.invokeAndWait(activate);
SwingUtilities.invokeAndWait(empty);
for (int i = 0; i < 5; i++) {
if (s == TopComponent.getRegistry().getActivated()) {
break;
}
Thread.sleep(500);
}
assertEquals("sheet activated", s, TopComponent.getRegistry().getActivated());
assertEquals("One node displayed", 1, s.getNodes().length);
assertEquals("it is node", activate.node, s.getNodes()[0]);
assertEquals("No activated nodes", null, s.getActivatedNodes());
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
s.close();
}
});
final N another = new N("another");
SwingUtilities.invokeAndWait( new Runnable() {
@Override
public void run() {
tc.setActivatedNodes(new Node[] { another });
tc.requestActive();
}
});
class R2 implements Runnable {
public void run() {
assertTrue("action enabled", a.isEnabled());
a.actionPerformed(new ActionEvent(a, 0, ""));
}
}
R2 anotherAct = new R2();
SwingUtilities.invokeAndWait(anotherAct);
SwingUtilities.invokeAndWait(empty);
for (int i = 0; i < 5; i++) {
if (s == TopComponent.getRegistry().getActivated()) {
break;
}
Thread.sleep(500);
}
assertEquals("sheet activated another time", s, TopComponent.getRegistry().getActivated());
assertEquals("One node displayed", 1, s.getNodes().length);
assertEquals("it is another", another, s.getNodes()[0]);
assertEquals("No activated nodes", null, s.getActivatedNodes());
}
private static final class N extends AbstractNode {
public N(String n) {
super(Children.LEAF);
setName(n);
}
}
public void testMemoryLeakIssue125057() throws Exception {
final NbSheet sheet = NbSheet.getDefault();
SwingUtilities.invokeAndWait( new Runnable() {
@Override
public void run() {
N node = new N("node1");
tc.setActivatedNodes(new Node[] { node });
tc.open();
tc.requestActive();
NbSheet sheet = NbSheet.getDefault();
sheet.open();
Node[] activated = sheet.getNodes();
assertNotNull(activated);
assertEquals(activated.length, 1);
assertEquals(activated[0], node);
sheet.close();
assertEquals("NbSheet's nodes are gone", 0, sheet.getNodes().length );
}
});
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
List<Node> arr = Arrays.asList(sheet.getNodes());
assertEquals("NbSheet's nodes point to tc: " + arr, 1, arr.size());
assertEquals("It is the one of tc", tc.getActivatedNodes()[0], arr.get(0));
}
});
}
}