/* * 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); } } }