/* * Copyright 2007 Google Inc. * * 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. */ package com.google.gwt.user.client.ui; /** * Tests a {@link TextArea}. */ public class TextAreaTest extends TextBoxBaseTestBase { /** * Most browsers strip \r from newlines, but IE adds them in. IE's TextRange * also truncates the \r\n from the end of the selected range. This test is * designed to work on all browsers and verifies that the newlines are * accounted for in all browsers. */ public void testNewline() { testNewline("Hello World\r\n\r\n\r\n\r\n\r\n", 15, 6, 15); testNewline("Hello\r\n\r\n\r\n\r\nWorld, My name is John.", 7, 3, 15); testNewline("\r\n\r\n\r\n\r\n\r\nHello World", 4, 4, 13); testNewline("\r\n\r\n\r\n\r\n\r\n", 2, 2, 4); } @Override protected TextBoxBase createTextBoxBase() { return new TextArea(); } /** * Test the handling of newline characters. * * @param text the text to test * @param cursorPos the cursor position within the newlines * @param startRange the start of a range that includes newlines * @param endRange the end of a range that includes newlines */ private void testNewline(String text, int cursorPos, int startRange, int endRange) { TextBoxBase box = createTextBoxBase(); RootPanel.get().add(box); // Browsers will manipulate the text when attached to the DOM, so we need // to get the new value. Safari 4 delays the manipulation if the text was // set before attaching the TextArea to the DOM, so we attach first and set // the text second. box.setText(text); text = box.getText(); // Position the cursor in the newlines box.setCursorPos(cursorPos); assertEquals(cursorPos, box.getCursorPos()); // Select newlines box.setSelectionRange(startRange, endRange - startRange); assertEquals(text.substring(startRange, endRange), box.getSelectedText()); RootPanel.get().remove(box); } }