UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

315 lines (283 loc) 12.4 kB
<!DOCTYPE html> <html> <!-- Copyright 2010 The Closure Library Authors. All Rights Reserved. Use of this source code is governed by the Apache License, Version 2.0. See the COPYING file for details. --> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Closure Unit Tests - goog.ui.Textarea</title> <script src="../base.js"></script> <script> goog.require('goog.debug.DivConsole'); goog.require('goog.debug.LogManager'); goog.require('goog.dom'); goog.require('goog.dom.classes'); goog.require('goog.events'); goog.require('goog.log'); goog.require('goog.object'); goog.require('goog.testing.ExpectedFailures'); goog.require('goog.testing.events'); goog.require('goog.testing.events.EventObserver'); goog.require('goog.testing.jsunit'); goog.require('goog.ui.Control'); goog.require('goog.ui.ControlRenderer'); goog.require('goog.ui.Textarea'); goog.require('goog.ui.TextareaRenderer'); goog.require('goog.userAgent'); goog.require('goog.userAgent.product'); goog.require('goog.userAgent.product.isVersion'); </script> <style> textarea { height: 25px; /* Need to force an initial height < our minHeight. */ width: 150px; padding: 2px; margin: 0; border: 1px solid #000; } .drop-shadowed { filter:progid:DXImageTransform.Microsoft.DropShadow(color='#e7e7e7', offX='5',offY='5'); box-shadow: 5px 5px 0 #e7e7e7; -moz-box-shadow: 5px 5px 0 #e7e7e7; -webkit-box-shadow: 5px 5px 0 #e7e7e7; } </style> </head> <body> <h1>goog.ui.Textarea tests</h1> <p>Here's a textarea defined in markup:</p> <textarea id="demo-textarea">Foo</textarea> <div id="sandbox"></div> <script> var sandbox = goog.dom.getElement('sandbox'); var textarea; var demoTextareaElement = goog.dom.getElement('demo-textarea'); var expectedFailures = new goog.testing.ExpectedFailures(); function setUp() { textarea = new goog.ui.Textarea(); } function tearDown() { expectedFailures.handleTearDown(); textarea.dispose(); goog.dom.removeChildren(sandbox); } /** * @return {boolean} Whether we're on Mac Safari 3.x. */ function isMacSafari3() { return goog.userAgent.WEBKIT && goog.userAgent.MAC && !goog.userAgent.isVersionOrHigher('527'); } /** * @return {boolean} Whether we're on Linux Firefox 3.6.3. */ function isLinuxFirefox() { return goog.userAgent.product.FIREFOX && goog.userAgent.LINUX; } /** * @return {boolean} Whether we're on Firefox 3.0. */ function isFirefox3() { return goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher('1.9.1'); } function testConstructor() { assertNotNull('Textarea must not be null', textarea); assertEquals('Renderer must default to expected value', goog.ui.TextareaRenderer.getInstance(), textarea.getRenderer()); var fakeDomHelper = { 'getDocument': function() { return true; } }; var testTextarea = new goog.ui.Textarea('Hello', goog.ui.TextareaRenderer.getInstance(), fakeDomHelper); assertEquals('Content must have expected content', 'Hello', testTextarea.getContent()); assertEquals('Renderer must have expected value', goog.ui.TextareaRenderer.getInstance(), testTextarea.getRenderer()); assertEquals('DOM helper must have expected value', fakeDomHelper, testTextarea.getDomHelper()); testTextarea.dispose(); } function testConstructorWithDecorator() { var decoratedTextarea = new goog.ui.Textarea(); decoratedTextarea.decorate(demoTextareaElement); assertEquals('Textarea should have current content after decoration', 'Foo', decoratedTextarea.getContent()); var initialHeight = decoratedTextarea.getHeight_(); var initialOffsetHeight = decoratedTextarea.getElement().offsetHeight; // focus() will trigger the grow/shrink flow. decoratedTextarea.getElement().focus(); assertEquals('Height should not have changed without content change', initialHeight, decoratedTextarea.getHeight_()); assertEquals('offsetHeight should not have changed without content ' + 'change', initialOffsetHeight, decoratedTextarea.getElement().offsetHeight); decoratedTextarea.dispose(); } function testGetSetContent() { textarea.render(sandbox); assertEquals('Textarea\'s content must default to an empty string', '', textarea.getContent()); textarea.setContent(17); assertEquals('Textarea element must have expected content', '17', textarea.getElement().value); textarea.setContent('foo'); assertEquals('Textarea element must have updated content', 'foo', textarea.getElement().value); } function testGetSetValue() { textarea.render(sandbox); assertEquals('Textarea\'s content must default to an empty string', '', textarea.getValue()); textarea.setValue(17); assertEquals('Textarea element must have expected content', '17', textarea.getValue()); textarea.setValue('17'); assertEquals('Textarea element must have expected content', '17', textarea.getValue()); } function testBasicTextareaBehavior() { var observer = new goog.testing.events.EventObserver(); goog.events.listen(textarea, goog.ui.Textarea.EventType.RESIZE, observer); textarea.render(sandbox); var el = textarea.getElement(); var heightBefore = textarea.getHeight_(); assertTrue('One resize event should be fired during render', observer.getEvents().length == 1); textarea.setContent('Lorem ipsum dolor sit amet, consectetuer ' + 'elit. Aenean sollicitudin ultrices urna. Proin vehicula mauris ac ' + 'est. Ut scelerisque, risus ut facilisis dictum, est massa lacinia ' + 'lorem, in fermentum purus ligula quis nunc.'); var heightAfter = textarea.getHeight_(); assertTrue('With this much content, height should have grown.', heightAfter > heightBefore); assertTrue('With a height change, a resize event should have fired.', observer.getEvents().length == 2); textarea.setContent(''); heightAfter = textarea.getHeight_(); assertTrue('Textarea should shrink with no content.', heightAfter <= heightBefore); assertTrue('With a height change, a resize event should have fired.', observer.getEvents().length == 3); goog.events.unlisten(textarea, goog.ui.Textarea.EventType.RESIZE, observer); } function testGetHorizontalScrollBarHeight() { textarea.render(sandbox); var textareaEl = textarea.getElement(); var scrollHeightWithoutScrollBar = textareaEl.scrollHeight; var withoutScrollBarHeight = textarea.getHorizontalScrollBarHeight_(); assertEquals('ScrollbarHeight should be 0 with no scrollbar.', 0, withoutScrollBarHeight); textarea.setContent('Onereallylongstringoftextlongenoughto' + 'justifyascrollbar'); textarea.getElement().style.overflow = 'scroll'; textarea.getElement().style.overflowX = 'scroll'; var scrollBarHeight = textarea.getHorizontalScrollBarHeight_(); var scrollHeight = textareaEl.scrollHeight; // Opera & Safari3 include scrollbars in scrollHeight. expectedFailures.expectFailureFor(goog.userAgent.OPERA || isMacSafari3() || isFirefox3()); try { assertTrue('ScrollbarHeight should be something > 0 (it is ' + scrollBarHeight + ') and isFirefox3():' + isFirefox3() + ', ' + goog.userAgent.VERSION, scrollBarHeight > 0); } catch (e) { expectedFailures.handleException(e); } } function testMinHeight() { textarea.render(sandbox); textarea.setMinHeight(50); assertEquals('offsetHeight should be 50 initially', 50, textarea.getElement().offsetHeight); textarea.setContent('Lorem ipsum dolor sit amet, consectetuer ' + 'elit. Aenean sollicitudin ultrices urna. Proin vehicula mauris ac ' + 'est. Ut scelerisque, risus ut facilisis dictum, est massa lacinia ' + 'lorem, in fermentum purus ligula quis nunc.'); assertTrue('getHeight_() should be > 50', textarea.getHeight_() > 50); textarea.setContent(''); assertEquals('With no content, offsetHeight should go back to 50, ' + 'the minHeight.', 50, textarea.getElement().offsetHeight); expectedFailures.expectFailureFor(isMacSafari3()); try { textarea.setMinHeight(0); assertTrue('After setting minHeight to 0, offsetHeight should ' + 'now be < 50, but it is ' + textarea.getElement().offsetHeight, textarea.getElement().offsetHeight < 50); } catch (e) { expectedFailures.handleException(e); } } function testMouseUpListener() { textarea.render(sandbox); textarea.setMinHeight(100); textarea.setMaxHeight(200); textarea.mouseUpListener_({}); assertEquals('After a mouseup which is not a resize, minHeight should ' + 'still be 100', 100, textarea.minHeight_); // We need to test how CSS drop shadows effect this too. goog.dom.classes.add(textarea.getElement(), 'drop-shadowed'); textarea.mouseUpListener_({}); assertEquals('After a mouseup which is not a resize, minHeight should ' + 'still be 100 even with a shadow', 100, textarea.minHeight_); } function testMaxHeight() { textarea.render(sandbox); textarea.setMaxHeight(50); assertTrue('Initial offsetHeight should be less than 50', textarea.getElement().offsetHeight < 50); var newContent = 'Lorem ipsum dolor sit amet, consectetuer adipiscing ' + 'elit. Aenean sollicitudin ultrices urna. Proin vehicula mauris ac ' + 'est. Ut scelerisque, risus ut facilisis dictum, est massa lacinia ' + 'lorem, in fermentum purus ligula quis nunc.' textarea.setContent(newContent); assertTrue('With lots of content, getHeight_() should be > 50', textarea.getHeight_() > 50); assertEquals('Even with lots of content, offsetHeight should be 50 ' + 'with maxHeight set', 50, textarea.getElement().offsetHeight); textarea.setMaxHeight(0); assertTrue('After setting maxHeight to 0, offsetHeight should now ' + 'be > 50', textarea.getElement().offsetHeight > 50); } function testMinAndMaxHeight() { textarea.render(sandbox); textarea.setMinHeight(50); textarea.setMaxHeight(150); assertEquals('offsetHeight should be 50 initially', 50, textarea.getElement().offsetHeight); textarea.setContent('Lorem ipsum dolor sit amet, consectetuer ' + 'elit. Aenean sollicitudin ultrices urna. Proin vehicula mauris ac ' + 'est. Ut scelerisque, risus ut facilisis dictum, est massa lacinia ' + 'lorem, in fermentum purus ligula quis nunc.'); var height = textarea.getHeight_(); // For some reason Mac Safari 3 has 136 and Linux FF has 146 here. expectedFailures.expectFailureFor(isMacSafari3() || isLinuxFirefox()); try { assertTrue('With lots of content, getHeight_() should be > 150 ' + '(it is ' + height + ')', height > 150); assertEquals('Even with lots of content, offsetHeight should be 150 ' + 'with maxHeight set', 150, textarea.getElement().offsetHeight); textarea.setMaxHeight(0); assertTrue('After setting maxHeight to 0, offsetHeight should now ' + 'be > 150 (it is ' + textarea.getElement().offsetHeight + ')', textarea.getElement().offsetHeight > 150); textarea.setContent(''); textarea.setMinHeight(0); assertTrue('After setting minHeight to 0, with no contents, ' + 'offsetHeight should now be < 50', textarea.getElement().offsetHeight < 50); } catch (e) { expectedFailures.handleException(e); } } </script> </body> </html>