blob: 50b4bd11771a3b42ddc19f5e724dcc7e1223d420 [file] [log] [blame]
// 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));
}
}