Nickolay - Test.Run-0.10

Documentation | Source
Class('Test.Run.Harness.Browser.UI.TestGrid', {
    
    isa : Ext.grid.GridPanel,
    
    
    have : {
        harness     : null
    },
    
    
    before : {
        initComponent : function () {
            var sm = new Ext.grid.CheckboxSelectionModel({ singleSelect : false })
            
            this.addEvents('rowselect')
            
            Ext.apply(this, {
                
                tbar : [
                    { 
                        text    : 'Re-run all',
                        iconCls : 'x-test-icon-refresh',
                        scale   : 'large',
                        handler : this.reRunSuite,
                        scope   : this
                    },
                    { 
                        text    : 'Re-run selected',
                        iconCls : 'x-test-icon-refresh-single',
                        scale   : 'large',
                        handler : this.reRunSelected,
                        scope   : this
                    }
                ],
                
                width : 400,
                
                columns: [
                    sm,
                    { header: 'Name', width: 210, sortable: true, dataIndex: 'url', renderer : this.testRowRenderer.createDelegate(this) },
                    { header: 'Passed', width: 60, sortable: true, dataIndex: 'passCount', align : 'center' },
                    { header: 'Failed', width: 60, sortable: true, dataIndex: 'failCount', align : 'center' },
                    { header: 'Time', width: 50, sortable: true, dataIndex: 'time', align : 'center' }
                ],
                
                viewConfig : {
                    forceFit : true
                },
                
                sm: sm,//new Ext.grid.CheckboxSelectionModel({ header : 'yo' }),//({ singleSelect : true }),
                
                store: new Ext.data.ArrayStore({
                    fields: [
                        'url',
                        'index',
                        'passCount',
                        'failCount',
                        'time',
                        'isStarting'
                    ],

                    autoDestroy: true,
                    data: []
                })

 
            })
        }
    },
    
    
    after : {
        initComponent : function () {
            this.getSelectionModel().on('rowselect', this.onRowSelect, this)
        }
    },
    
    
    methods : {
        
        onRowSelect : function (selModel, indx, record) {
            this.fireEvent('rowselect', this, record)
        },
        
        
        reRunSuite : function () {
            this.store.each(function (record) {
                record.set('passCount', 0)
                record.set('failCount', 0)
                record.set('time', '')
                record.set('isStarting', true)
                record.commit()
            })
            
            this.harness.reRunSuite()
        },
        
        
        reRunSelected : function () {
            var harness     = this.harness
            var records     = this.getSelectionModel().getSelections()
            
            var tests = []
            
            Joose.A.each(records, function (record) {
                record.set('passCount', 0)
                record.set('failCount', 0)
                record.set('time', '')
                record.set('isStarting', true)
                record.commit()
                
                var test = harness.getTestByURL(record.get('url'))
                
                if (test) tests.push(test)
            })
            
            harness.reRunTests(tests, function () {})
        },
        
        
        testRowRenderer : function (value, metaData, record, rowIndex, colIndex, store) {
            var test = this.harness.getTestByURL(record.get('url'))
            
            metaData.css = 'x-test-test-status '
            
            if (record.get('isStarting')) {
                metaData.css += 'x-test-test-status-working'
                
                return value
            }
            
            if (test) {
                if (test.failed)
                    metaData.css += 'x-test-test-status-thrown'
                else
                    if (test.isFinished()) {
                        
                        if (test.isPassed())
                            metaData.css += 'x-test-test-status-passed'
                        else 
                            metaData.css += 'x-test-test-status-failed'
                    } else
                        metaData.css += 'x-test-test-status-working'
                    
            } else 
                metaData.css += 'x-test-test-status-question'
            
            return value
        }
        
    }
    
})

Ext.reg('testgrid', Test.Run.Harness.Browser.UI.TestGrid)