blob: 77b5915c84b013e78d3287f915ac42f023584234 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2014 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
(function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var registry;
rwt.qx.Class.define( "org.eclipse.rwt.test.tests.CellRendererRegistryTest", {
extend : rwt.qx.Object,
members : {
setUp : function() {
registry = new rwt.widgets.util.CellRendererRegistry();
},
tearDown : function() {
registry = null;
},
testAdd_FailsWithNull : function() {
try {
registry.add( null );
fail();
} catch( ex ) {
// expected
}
},
testAdd_DoesNotFailWithMinimalRenderer : function() {
try {
registry.add( {
"cellType" : "foo",
"contentType" : "foo",
"renderContent" : function(){}
} );
} catch( ex ) {
fail();
}
},
testAdd_FailsWithoutCellType : function() {
try {
registry.add( {
"cellType" : null,
"contentType" : "foo",
"renderContent" : function(){}
} );
fail();
} catch( ex ) {
}
},
testAdd_FailsWithoutContentType : function() {
try {
registry.add( {
"cellType" : "foo",
"contentType" : null,
"renderContent" : function(){}
} );
fail();
} catch( ex ) {
// expected
}
},
testAdd_FailsForAddingSameCellTypeTwice : function() {
registry.add( {
"cellType" : "foo",
"contentType" : "foo",
"renderContent" : function(){}
} );
try {
registry.add( {
"cellType" : "foo",
"contentType" : "foo",
"renderContent" : function(){}
} );
fail();
} catch( ex ) {
// expected
}
},
testGetRendererFor : function() {
var renderer = {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){}
};
registry.add( renderer );
assertIdentical( renderer, registry.getRendererFor( "foo" ) );
},
testAddFunctionCreateElement : function() {
registry.add( {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){}
} );
var element = registry.getRendererFor( "foo" ).createElement( {} );
assertEquals( "div", element.tagName.toLowerCase() );
assertEquals( "absolute", element.style.position );
assertEquals( "hidden", element.style.overflow );
assertEquals( "rwt-cell", element.className || element.getAttribute( "class" ) );
},
testWrapFunctionCreateElement : function() {
var arg;
registry.add( {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){},
"createElement" : function() {
arg = arguments[ 0 ];
return document.createElement( "input" );
}
} );
var element = registry.getRendererFor( "foo" ).createElement( { "x" : 123 } );
assertEquals( { "x" : 123 }, arg );
assertEquals( "input", element.tagName.toLowerCase() );
assertEquals( "absolute", element.style.position );
assertEquals( "hidden", element.style.overflow );
},
testAddFunctionCreateElement_ForSelectableCell : function() {
registry.add( {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){}
} );
var element = registry.getRendererFor( "foo" ).createElement( { "selectable" : true } );
assertEquals( "rwt-cell-selectable", element.className || element.getAttribute( "class" ) );
},
testAddFunctionCreateElement_ForNamedCell : function() {
registry.add( {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){}
} );
var element = registry.getRendererFor( "foo" ).createElement( { "name" : "foo_bar-1"} );
assertEquals( "rwt-cell foo_bar-1", element.className || element.getAttribute( "class" ) );
},
testAddFunctionCreateElement_ForNamedCellNotStartingWithLetter : function() {
registry.add( {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){}
} );
var element = registry.getRendererFor( "foo" ).createElement( { "name" : "1foobar"} );
assertEquals( "rwt-cell", element.className || element.getAttribute( "class" ) );
},
testAddFunctionCreateElement_ForNamedCellContainingInvalidCharacer : function() {
registry.add( {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){}
} );
var element = registry.getRendererFor( "foo" ).createElement( { "name" : "foo$bar"} );
assertEquals( "rwt-cell", element.className || element.getAttribute( "class" ) );
},
testGetAll : function() {
registry.add( {
"cellType" : "bar1",
"contentType" : "foo",
"renderContent" : function(){}
} );
registry.add( {
"cellType" : "bar2",
"contentType" : "foo",
"renderContent" : function(){}
} );
var map = registry.getAll();
assertTrue( map.bar1 != null );
assertTrue( map.bar2 != null );
},
testGetAll_UpdatedAfterGet : function() {
registry.add( {
"cellType" : "bar1",
"contentType" : "foo",
"renderContent" : function(){}
} );
var map = registry.getAll();
registry.add( {
"cellType" : "bar2",
"contentType" : "foo",
"renderContent" : function(){}
} );
assertTrue( map.bar1 != null );
assertTrue( map.bar2 != null );
},
testGetAll_ProtectedAgainstManipulation : function() {
registry.add( {
"cellType" : "bar1",
"contentType" : "foo",
"renderContent" : function(){}
} );
registry.add( {
"cellType" : "bar2",
"contentType" : "foo",
"renderContent" : function(){}
} );
registry.getAll().bar1 = null;
var map = registry.getAll();
assertTrue( map.bar1 != null );
assertTrue( map.bar2 != null );
},
testRemove : function() {
var renderer = {
"cellType" : "foo",
"contentType" : "bar",
"renderContent" : function(){}
};
registry.add( renderer );
registry.removeRendererFor( "foo" );
assertNull( renderer, registry.getRendererFor( "foo" ) );
},
testGetInstance : function() {
var instance = rwt.widgets.util.CellRendererRegistry.getInstance();
var Singletons = rwt.runtime.Singletons;
assertIdentical( instance, Singletons.get( rwt.widgets.util.CellRendererRegistry ) );
},
testTextRenderer_CreateElementSetsTextOverflow : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var create = defaultRegistry.getRendererFor( "text" ).createElement;
assertEquals( "ellipsis", create( {} ).style.textOverflow );
},
testTextRenderer_CreateElementSetsHorizontalAlignment : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var create = defaultRegistry.getRendererFor( "text" ).createElement;
assertEquals( "left", create( {} ).style.textAlign );
assertEquals( "left", create( { "horizontalAlignment" : "LEFT" } ).style.textAlign );
assertEquals( "center", create( { "horizontalAlignment" : "CENTER" } ).style.textAlign );
assertEquals( "right", create( { "horizontalAlignment" : "RIGHT" } ).style.textAlign );
},
testTextRenderer_CreateElementSetsWrap : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var create = defaultRegistry.getRendererFor( "text" ).createElement;
assertEquals( "nowrap", create( {} ).style.whiteSpace );
assertTrue( "nowrap" != create( { "wrap" : true } ).style.whiteSpace );
},
testImageRenderer_CreateElementSetsAlignmentLeftTop : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var element = renderer.createElement( {
"horizontalAlignment" : "LEFT",
"verticalAlignment" : "TOP"
} );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], {}, {} );
var position = element.style.backgroundPosition;
assertTrue( "left top" === position || "0% 0%" === position );
},
testImageRenderer_CreateElementSetsAlignmentCenterCenter : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var element = renderer.createElement( {
"horizontalAlignment" : "CENTER",
"verticalAlignment" : "CENTER"
} );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], {}, {} );
var position = element.style.backgroundPosition;
assertTrue( "center" === position || "center center" === position || "50% 50%" === position );
},
testImageRenderer_CreateElementSetsAlignmentDefault : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var element = renderer.createElement( { "alignment" : {} } );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], {}, {} );
var position = element.style.backgroundPosition;
assertTrue( "center" === position || "center center" === position || "50% 50%" === position );
},
testImageRenderer_CreateElementSetsAlignmentRightBottom : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var element = renderer.createElement( {
"horizontalAlignment" : "RIGHT",
"verticalAlignment" : "BOTTOM"
} );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], {}, {} );
var position = element.style.backgroundPosition;
assertTrue( "right bottom" === position || "100% 100%" === position );
},
testImageRenderer_CreateElementSetsScaleModeFit : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var element = renderer.createElement( { "scaleMode" : "FIT" } );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], {}, {} );
var position = element.style.backgroundPosition;
var size = element.style.backgroundSize;
assertTrue( "center" === position || "center center" === position || "50% 50%" === position );
assertEquals( "contain", size );
},
testImageRenderer_CreateElementSetsScaleModeFill : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var element = renderer.createElement( { "scaleMode" : "FILL" } );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], {}, {} );
var position = element.style.backgroundPosition;
var size = element.style.backgroundSize;
assertTrue( "center" === position || "center center" === position || "50% 50%" === position );
assertEquals( "cover", size );
},
testImageRenderer_CreateElementSetsScaleModeStretch : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var element = renderer.createElement( { "scaleMode" : "STRETCH" } );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], {}, {} );
var position = element.style.backgroundPosition;
var size = element.style.backgroundSize;
assertTrue( "center" === position || "center center" === position || "50% 50%" === position );
assertTrue( "100% 100%" === size || "100%" === size );
},
testImageRenderer_RenderImageNoScale : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var cellData = { "scaleMode" : "NONE" };
var element = renderer.createElement( cellData );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], cellData, { "enabled" : true } );
var url = TestUtil.getCssBackgroundImage( element );
assertTrue( url.indexOf( "foo.jpg" ) != -1 );
},
testImageRenderer_RenderImageScaleStretch : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var cellData = { "scaleMode" : "STRETCH" };
var options = { "enabled" : true, "width" : 20, "height" : 40 };
var element = renderer.createElement( cellData );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], cellData, options );
if( rwt.client.Client.isMshtml() ) {
var img = element.firstChild;
assertEquals( "img", img.tagName.toLowerCase() );
assertEquals( "20px", img.style.width );
assertEquals( "40px", img.style.height );
} else {
var url = TestUtil.getCssBackgroundImage( element );
assertTrue( url.indexOf( "foo.jpg" ) != -1 );
}
},
testImageRenderer_RenderImageScaleFitWidth : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var cellData = { "scaleMode" : "FIT" };
var element = renderer.createElement( cellData );
var options = { "enabled" : true, "width" : 20, "height" : 40 };
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], cellData, options );
if( rwt.client.Client.isMshtml() ) {
var img = element.firstChild;
assertEquals( "img", img.tagName.toLowerCase() );
assertEquals( "absolute", img.style.position );
assertEquals( "20px", img.style.width );
assertEquals( "30px", img.style.height );
assertEquals( "0px", img.style.left );
assertEquals( "5px", img.style.top );
} else {
var url = TestUtil.getCssBackgroundImage( element );
assertTrue( url.indexOf( "foo.jpg" ) != -1 );
}
},
testImageRenderer_RenderImageScaleFitHeight : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var cellData = { "scaleMode" : "FIT" };
var element = renderer.createElement( cellData );
var options = { "enabled" : true, "width" : 20, "height" : 10 };
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], cellData, options );
if( rwt.client.Client.isMshtml() ) {
var img = element.firstChild;
assertEquals( "img", img.tagName.toLowerCase() );
assertEquals( "absolute", img.style.position );
assertEquals( "7px", img.style.width );
assertEquals( "10px", img.style.height );
assertEquals( "7px", img.style.left );
assertEquals( "0px", img.style.top );
} else {
var url = TestUtil.getCssBackgroundImage( element );
assertTrue( url.indexOf( "foo.jpg" ) != -1 );
}
},
testImageRenderer_RenderImageScaleFillWidth : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var cellData = { "scaleMode" : "FILL" };
var element = renderer.createElement( cellData );
var options = { "enabled" : true, "width" : 20, "height" : 20 };
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], cellData, options );
if( rwt.client.Client.isMshtml() ) {
var img = element.firstChild;
assertEquals( "img", img.tagName.toLowerCase() );
assertEquals( "absolute", img.style.position );
assertEquals( "20px", img.style.width );
assertEquals( "30px", img.style.height );
assertEquals( "0px", img.style.left );
assertEquals( "-5px", img.style.top );
} else {
var url = TestUtil.getCssBackgroundImage( element );
assertTrue( url.indexOf( "foo.jpg" ) != -1 );
}
},
testImageRenderer_RenderImageScaleFillHeight : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var cellData = { "scaleMode" : "FILL" };
var element = renderer.createElement( cellData );
var options = { "enabled" : true, "width" : 5, "height" : 10 };
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], cellData, options );
if( rwt.client.Client.isMshtml() ) {
var img = element.firstChild;
assertEquals( "img", img.tagName.toLowerCase() );
assertEquals( "absolute", img.style.position );
assertEquals( "7px", img.style.width );
assertEquals( "10px", img.style.height );
assertEquals( "-1px", img.style.left );
assertEquals( "0px", img.style.top );
} else {
var url = TestUtil.getCssBackgroundImage( element );
assertTrue( url.indexOf( "foo.jpg" ) != -1 );
}
},
testImageRenderer_ResetImageScaleStretch : function() {
var defaultRegistry = rwt.widgets.util.CellRendererRegistry.getInstance();
var renderer = defaultRegistry.getRendererFor( "image" );
var cellData = { "scaleMode" : "STRETCH" };
var element = renderer.createElement( cellData );
renderer.renderContent( element, [ "foo.jpg", 10, 15 ], cellData, { "enabled" : true } );
renderer.renderContent( element, null, cellData, { "enabled" : true } );
if( rwt.client.Client.isMshtml() ) {
assertEquals( 0, element.childNodes.length );
} else {
var url = TestUtil.getCssBackgroundImage( element );
assertEquals( "", url );
}
}
}
} );
}() );