001    /*
002     * Copyright (c) 2005 Jens Schou, Staffan Gustafsson, Björn Lanneskog, 
003     * Einar Pehrson and Sebastian Kekkonen
004     *
005     * This file is part of
006     * CleanSheets Extension for Test Cases
007     *
008     * CleanSheets Extension for Test Cases is free software; you can
009     * redistribute it and/or modify it under the terms of the GNU General Public
010     * License as published by the Free Software Foundation; either version 2 of
011     * the License, or (at your option) any later version.
012     *
013     * CleanSheets Extension for Test Cases is distributed in the hope that
014     * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
015     * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU General Public License for more details.
017     *
018     * You should have received a copy of the GNU General Public License
019     * along with CleanSheets Extension for Test Cases; if not, write to the
020     * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
021     * Boston, MA  02111-1307  USA
022     */
023    package csheets.ext.test.ui;
024    
025    import java.awt.Color;
026    import java.awt.Component;
027    
028    import javax.swing.JTable;
029    import javax.swing.table.DefaultTableCellRenderer;
030    
031    import csheets.core.Value;
032    import csheets.ext.assertion.AssertableCell;
033    import csheets.ext.assertion.Assertion;
034    import csheets.ext.assertion.AssertionExtension;
035    import csheets.ext.test.TestCase;
036    import csheets.ext.test.TestableCell;
037    
038    /**
039     * A table cell renderer for test case results.
040     * @author Einar Pehrson
041     */
042    @SuppressWarnings("serial")
043    public class TestCaseResultRenderer extends DefaultTableCellRenderer {
044    
045            /**
046             * Creates a new test case result renderer.
047             */
048            public TestCaseResultRenderer() {}
049    
050            public Component getTableCellRendererComponent(JTable table, Object o,
051                    boolean isSelected, boolean hasFocus, int row, int column) {
052    
053                    // Defines variables
054                    Color color = Color.black;
055                    String tooltip = null;
056    
057                    // Get result, and cell of test case at column 0 in this row
058                    Value value = (Value)o;
059                    TestableCell cell = ((TestCase)table.getValueAt(row, 0)).getCell();
060    
061                    // Assert value against cells assertion, if possible
062                    AssertableCell assertableCell
063                            = (AssertableCell)cell.getExtension(AssertionExtension.NAME);
064                    if (assertableCell != null) {
065                            Assertion.Result result = assertableCell.assertAny(value);
066                            if (result == Assertion.Result.NAN || result == Assertion.Result.FAILED) {
067                                    color = Color.RED;
068                                    tooltip = "Entered test case param violates assertion";
069                            }
070                    }
071    
072                    // Render component
073                    setForeground(color);
074                    setToolTipText(tooltip);
075                    return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
076            }
077    }