/** * Copyright 2014 Comcast Cable Communications Management, LLC * * This file is part of CATS. * * CATS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CATS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CATS. If not, see <http://www.gnu.org/licenses/>. */ package com.comcast.cats.vision; import java.awt.Component; import java.util.Arrays; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.uispec4j.AbstractSwingUIComponent; import org.uispec4j.Button; import org.uispec4j.CheckBox; import org.uispec4j.Mouse; import org.uispec4j.Panel; import org.uispec4j.Table; import org.uispec4j.ToggleButton; import org.uispec4j.UISpec4J; import org.uispec4j.UISpecTestCase; import org.uispec4j.Window; import org.uispec4j.assertion.Assertion; import org.uispec4j.interception.MainClassAdapter; import org.uispec4j.interception.WindowInterceptor; import com.comcast.cats.vision.test.utils.CommonTestUtils; public class CATSVisionTest extends UISpecTestCase { protected final Log LOGGER = LogFactory.getLog( getClass() ); protected void setUp() throws Exception { System.setProperty( "uispec4j.test.library", "junit" ); // CatsFramework framework = new CatsFrameworkLocal(); UISpec4J.setWindowInterceptionTimeLimit( 360000 ); String[] args = { "--server=http://cats-dev2.cable.comcast.com:8080/", "--mac=00:22:10:21:A4:17", "--authToken=dummy-auth-token" }; setAdapter( new MainClassAdapter( CATSVisionApplication.class, args ) ); } protected void enableComponent( AbstractSwingUIComponent component ) { component.getAwtComponent().setEnabled( true ); } protected Assertion selectCheckBox( CheckBox checkBox ) { enableComponent( checkBox ); if ( !checkBox.isSelected().isTrue() ) { checkBox.getAwtComponent().doClick(); } return checkBox.isSelected(); } protected Assertion deselectCheckBox( CheckBox checkBox ) { enableComponent( checkBox ); if ( checkBox.isSelected().isTrue() ) { checkBox.getAwtComponent().doClick(); } return checkBox.isSelected(); } protected JLabel getLabel( Panel parentPanel, String labelName ) { JLabel label = null; Component[] components = parentPanel.getSwingComponents( JLabel.class ); for ( Component component : components ) { if ( component.getName() == labelName ) { label = ( JLabel ) component; break; } } return label; } protected void streamAndAllocateSettop( Window window ) { Panel panel = window.getPanel( "mainPanel" ); Panel mainControlPanel = panel.getPanel( "mainControlPanel" ); Panel settopSelectionPanel = mainControlPanel.getPanel( "settopSelectionPanel" ); ToggleButton jStreamToggleButton = settopSelectionPanel.getToggleButton( "jStreamToggleButton" ); if ( jStreamToggleButton.getAwtComponent().getText().equals( "Stream" ) ) { jStreamToggleButton.getAwtComponent().doClick(); } try { Thread.sleep( 500 ); } catch ( InterruptedException interruptedException ) { fail( interruptedException.getMessage() ); } /* * Locking Settop */ CheckBox checkBoxLock = settopSelectionPanel.getCheckBox( "Lock" ); assertTrue( "Unable to lock settop", selectCheckBox( checkBoxLock ) ); } protected void releaseSettop( Window window ) { Panel panel = window.getPanel( "mainPanel" ); Panel mainControlPanel = panel.getPanel( "mainControlPanel" ); Panel settopSelectionPanel = mainControlPanel.getPanel( "settopSelectionPanel" ); CheckBox checkBoxLock = settopSelectionPanel.getCheckBox( "Lock" ); assertFalse( "Unable to release settop", deselectCheckBox( checkBoxLock ) ); } protected void testRemoteKeyPress( Window window, String... buttonNames ) throws Exception { Panel panel = window.getPanel( "mainPanel" ); streamAndAllocateSettop( window ); Panel remotePanel = panel.getPanel( "remotePanel" ); for ( String buttonName : buttonNames ) { Button button = remotePanel.getButton( buttonName ); assertTrue( button.getLabel().contentEquals( buttonName ) ); Mouse.click( button ); Thread.sleep( 1500 ); } releaseSettop( window ); } protected Window launchMultivision( Window mainWindow, int... rows ) throws Exception { Window videoGridWindow = null; JPanel configPanel = CommonTestUtils.getConfigPanel( mainWindow ); final Button launchVideoButton = CommonTestUtils.getConfigPanelButton( mainWindow, "launchVideoButton" ); Table uiTable = CommonTestUtils.getTableFromConfigPanel( configPanel, "availableSettopsScrollPane", "Available Settops", 0 ); assertTrue( "Expected header for the table is - " + Arrays.asList( CommonTestUtils.AVAILABLE_TABLE_STRINGS ) + "\n but actual header is - " + Arrays.asList( uiTable.getHeader().getColumnNames() ), Arrays.equals( uiTable.getHeader().getColumnNames(), CommonTestUtils.AVAILABLE_TABLE_STRINGS ) ); assertTrue( uiTable.getRowCount() > ( rows.length + 1 ) ); uiTable.selectRows( rows ); assertTrue( "No Settops selected", uiTable.rowsAreSelected( rows ) ); videoGridWindow = WindowInterceptor.run( launchVideoButton.triggerClick() ); assertTrue( videoGridWindow.titleEquals( "CATS MultiVision" ) ); return videoGridWindow; } protected int[] searchAvailableSettopsAndGetRowsSelected( Window mainWindow, String keyword ) { JPanel configPanel = CommonTestUtils.getConfigPanel( mainWindow ); final Button searchButton = CommonTestUtils.getConfigPanelButton( mainWindow, "searchButton" ); final JTextField searchTextField = CommonTestUtils.getConfigPanelTextField( mainWindow, "searchTextField" ); Table uiTable = CommonTestUtils.getTableFromConfigPanel( configPanel, "availableSettopsScrollPane", "Available Settops", 0 ); assertTrue( "Expected header for the table is - " + Arrays.asList( CommonTestUtils.AVAILABLE_TABLE_STRINGS ) + "\n but actual header is - " + Arrays.asList( uiTable.getHeader().getColumnNames() ), Arrays.equals( uiTable.getHeader().getColumnNames(), CommonTestUtils.AVAILABLE_TABLE_STRINGS ) ); int numberOfRows = ( uiTable.getRowCount() > 0 ) ? uiTable.getRowCount() : 0; assertTrue( "'Available Settops' donot have any rows", numberOfRows > 0 ); searchTextField.setText( keyword ); searchButton.click(); Table uiTableAfterSearch = CommonTestUtils.getTableFromConfigPanel( configPanel, "availableSettopsScrollPane", "Available Settops", 0 ); int rows = ( uiTableAfterSearch.getRowCount() > 0 ) ? uiTableAfterSearch.getRowCount() : 0; assertTrue( "No matching settop found", rows > 0 ); uiTableAfterSearch.selectRow( 0 ); searchTextField.setText( "" ); searchButton.click(); uiTableAfterSearch = CommonTestUtils.getTableFromConfigPanel( configPanel, "availableSettopsScrollPane", "Available Settops", 0 ); JTable table = uiTableAfterSearch.getAwtComponent(); int numberOfRowsAfterSearch = ( table.getSelectedRows().length > 0 ) ? table.getSelectedRows().length : 0; assertTrue( numberOfRowsAfterSearch <= numberOfRows ); return table.getSelectedRows(); } protected CheckBox getAllocateAllCheckBox( Window multivisionWindow ) throws InterruptedException { Panel videoControlPanel = multivisionWindow.getPanel( "videoControlPanel" ); Panel allocationPanel = videoControlPanel.getPanel( "allocationPanel" ); return allocationPanel.getCheckBox( "allocateAllCheckBox" ); } }