| // Copyright 2014 The Closure Library Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS-IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| goog.provide('goog.ui.CharCounterTest'); |
| goog.setTestOnly('goog.ui.CharCounterTest'); |
| |
| goog.require('goog.dom'); |
| goog.require('goog.testing.asserts'); |
| goog.require('goog.testing.jsunit'); |
| goog.require('goog.ui.CharCounter'); |
| goog.require('goog.userAgent'); |
| |
| var countElement, charCounter, inputElement; |
| var incremental = goog.ui.CharCounter.Display.INCREMENTAL; |
| var remaining = goog.ui.CharCounter.Display.REMAINING; |
| var maxLength = 25; |
| |
| function setUp() { |
| inputElement = goog.dom.getElement('test-textarea-id'); |
| inputElement.value = ''; |
| countElement = goog.dom.getElementByClass('char-count'); |
| goog.dom.setTextContent(countElement, ''); |
| charCounter = |
| new goog.ui.CharCounter(inputElement, countElement, maxLength); |
| } |
| |
| function tearDown() { |
| charCounter.dispose(); |
| } |
| |
| function setupCheckLength(content, mode) { |
| inputElement.value = content; |
| charCounter.setDisplayMode(mode); |
| charCounter.checkLength(); |
| } |
| |
| function testConstructor() { |
| assertNotNull('Character counter can not be null', charCounter); |
| assertEquals(maxLength.toString(), goog.dom.getTextContent(countElement)); |
| } |
| |
| function testSetMaxLength() { |
| charCounter.setMaxLength(10); |
| assertEquals('10', goog.dom.getTextContent(countElement)); |
| |
| var tooLongContent = 'This is too long text content'; |
| inputElement.value = tooLongContent; |
| charCounter.setMaxLength(10); |
| assertEquals('0', goog.dom.getTextContent(countElement)); |
| assertEquals('This is to', inputElement.value); |
| } |
| |
| function testGetMaxLength() { |
| assertEquals(maxLength, charCounter.getMaxLength()); |
| } |
| |
| function testSetDisplayMode() { |
| // Test counter to be in incremental mode |
| charCounter.setDisplayMode(incremental); |
| assertEquals('0', goog.dom.getTextContent(countElement)); |
| |
| // Test counter to be in remaining mode |
| charCounter.setDisplayMode(remaining); |
| assertEquals(maxLength.toString(), goog.dom.getTextContent(countElement)); |
| } |
| |
| function testGetDisplayMode() { |
| assertEquals(remaining, charCounter.getDisplayMode()); |
| |
| var incrementalCharCounter = new goog.ui.CharCounter( |
| inputElement, countElement, maxLength, incremental); |
| assertEquals(incremental, incrementalCharCounter.getDisplayMode()); |
| } |
| |
| function testCheckLength() { |
| // Test the characters remaining in DOM |
| setupCheckLength('', remaining); |
| assertEquals(maxLength.toString(), goog.dom.getTextContent(countElement)); |
| |
| // Test the characters incremental in DOM |
| setupCheckLength('', incremental); |
| assertEquals('0', goog.dom.getTextContent(countElement)); |
| } |
| |
| function testCheckLength_limitedContent() { |
| var limitedContent = 'Limited text content'; |
| var limitedContentLength = limitedContent.length; |
| var remainingLimitedContentLength = maxLength - limitedContentLength; |
| |
| // Set some content and test the characters remaining in DOM |
| setupCheckLength(limitedContent, remaining); |
| |
| assertEquals(limitedContent, inputElement.value); |
| assertEquals(remainingLimitedContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| |
| // Test the characters incremented in DOM with limited content |
| charCounter.setDisplayMode(incremental); |
| charCounter.checkLength(); |
| |
| assertEquals(limitedContent, inputElement.value); |
| assertEquals(limitedContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } |
| |
| function testCheckLength_overflowContent() { |
| var tooLongContent = 'This is too long text content'; |
| var truncatedContent = 'This is too long text con'; |
| |
| // Set content longer than the maxLength and test the characters remaining |
| // in DOM with overflowing content |
| setupCheckLength(tooLongContent, remaining); |
| |
| assertEquals(truncatedContent, inputElement.value); |
| assertEquals('0', goog.dom.getTextContent(countElement)); |
| |
| // Set content longer than the maxLength and test the characters |
| // incremented in DOM with overflowing content |
| setupCheckLength(tooLongContent, incremental); |
| |
| assertEquals(truncatedContent, inputElement.value); |
| assertEquals(maxLength.toString(), goog.dom.getTextContent(countElement)); |
| } |
| |
| function testCheckLength_newLineContent() { |
| var newLineContent = 'New\nline'; |
| var newLineContentLength = newLineContent.length; |
| var remainingNewLineContentLength = maxLength - newLineContentLength; |
| |
| var carriageReturnContent = 'New\r\nline'; |
| var carriageReturnContentLength = carriageReturnContent.length; |
| var remainingCarriageReturnContentLength = |
| maxLength - carriageReturnContentLength; |
| |
| // Set some content with new line characters and test the characters |
| // remaining in DOM |
| setupCheckLength(newLineContent, remaining); |
| |
| // Test for IE 7,8 which appends \r to \n |
| if (goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0')) { |
| assertEquals(carriageReturnContent, inputElement.value); |
| assertEquals(remainingCarriageReturnContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } else { |
| assertEquals(newLineContent, inputElement.value); |
| assertEquals(remainingNewLineContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } |
| |
| // Set some content with new line characters and test the characters |
| // incremental in DOM |
| setupCheckLength(newLineContent, incremental); |
| |
| // Test for IE 7,8 which appends \r to \n |
| if (goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0')) { |
| assertEquals(carriageReturnContent, inputElement.value); |
| assertEquals(carriageReturnContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } else { |
| assertEquals(newLineContent, inputElement.value); |
| assertEquals(newLineContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } |
| } |
| |
| function testCheckLength_carriageReturnContent() { |
| var newLineContent = 'New\nline'; |
| var newLineContentLength = newLineContent.length; |
| var remainingNewLineContentLength = maxLength - newLineContentLength; |
| |
| var carriageReturnContent = 'New\r\nline'; |
| var carriageReturnContentLength = carriageReturnContent.length; |
| var remainingCarriageReturnContentLength = |
| maxLength - carriageReturnContentLength; |
| |
| // Set some content with carriage return characters and test the |
| // characters remaining in DOM |
| setupCheckLength(carriageReturnContent, remaining); |
| |
| // Test for IE 7,8 |
| if (goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0')) { |
| assertEquals(carriageReturnContent, inputElement.value); |
| assertEquals(remainingCarriageReturnContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } else { |
| // Others replace \r\n with \n |
| assertEquals(newLineContent, inputElement.value); |
| assertEquals(remainingNewLineContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } |
| |
| // Set some content with carriage return characters and test the |
| // characters incremental in DOM |
| setupCheckLength(carriageReturnContent, incremental); |
| |
| // Test for IE 7,8 |
| if (goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0')) { |
| assertEquals(carriageReturnContent, inputElement.value); |
| assertEquals(carriageReturnContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } else { |
| // Others replace \r\n with \n |
| assertEquals(newLineContent, inputElement.value); |
| assertEquals(newLineContentLength.toString(), |
| goog.dom.getTextContent(countElement)); |
| } |
| } |