blob: 85c3253279adf9a0aeb031e886e275e279882e94 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed 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 com.intellij.openapi.ui;
import junit.framework.TestCase;
import javax.swing.*;
import java.awt.*;
public class SplitterTest extends TestCase{
public void testResizeVert() {
resizeTest(new Splitter(true));
}
public void testResizeHoriz() {
resizeTest(new Splitter(false));
}
private static void resizeTest(Splitter splitter) {
JPanel jPanel1 = new JPanel();
jPanel1.setMinimumSize(new Dimension(100, 100));
JPanel jPanel2 = new JPanel();
jPanel2.setMinimumSize(new Dimension(100, 100));
splitter.setFirstComponent(jPanel1);
splitter.setSecondComponent(jPanel2);
splitter.setHonorComponentsMinimumSize(true);
splitter.setSize(new Dimension(500, 500));
splitter.doLayout();
checkBounds(splitter);
splitter.setSize(new Dimension(300, 300));
splitter.doLayout();
checkBounds(splitter);
for (float proportion = 0; proportion <= 1; proportion+=0.01) {
splitter.setProportion(proportion);
splitter.doLayout();
checkBounds(splitter);
}
splitter.setProportion(.9f);
splitter.doLayout();
checkBounds(splitter);
splitter.setSize(new Dimension(100, 100));
splitter.doLayout();
checkBounds(splitter);
splitter.setProportion(.1f);
splitter.doLayout();
checkBounds(splitter);
splitter.setSize(new Dimension(10, 10));
splitter.doLayout();
checkBounds(splitter);
splitter.setSize(new Dimension(100, 100));
splitter.doLayout();
checkBounds(splitter);
splitter.setSize(new Dimension(150, 150));
splitter.doLayout();
checkBounds(splitter);
splitter.setSize(splitter.isVertical() ? new Dimension(150, 1000) : new Dimension(1000, 150));
for (float f = .01F; f < 1F; f+=.01F) {
splitter.setProportion(f);
splitter.doLayout();
float proportion = splitter.getProportion();
assertTrue (proportion==f);
}
}
private static void checkBounds(Splitter splitter) {
Dimension firstSize = splitter.getFirstComponent().getSize();
Dimension secondSize = splitter.getSecondComponent().getSize();
Dimension size = splitter.getSize();
if(splitter.getOrientation()) { // Split horizontally
assertTrue(firstSize.height + splitter.getDividerWidth() + secondSize.height == size.height);
assertTrue(firstSize.width == size.width && secondSize.width == size.width);
}
else {
assertTrue(firstSize.width + splitter.getDividerWidth() + secondSize.width == size.width);
assertTrue(firstSize.height == size.height && secondSize.height == size.height);
}
if(splitter.isHonorMinimumSize()) {
Dimension firstMinimum = splitter.getFirstComponent().getMinimumSize();
Dimension secondMinimum = splitter.getSecondComponent().getMinimumSize();
assertTrue(firstSize.width < firstMinimum.width == secondSize.width < secondMinimum.width);
assertTrue(firstSize.height < firstMinimum.height == secondSize.height < secondMinimum.height);
}
}
}