Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3296)

Unified Diff: chrome/browser/resources/hterm/js/terminal_tests.js

Issue 8680034: Initial landing of Screen, Terminal, and VT100 classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/hterm/js/terminal_tests.js
diff --git a/chrome/browser/resources/hterm/js/terminal_tests.js b/chrome/browser/resources/hterm/js/terminal_tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..67275bba79398bc8f4a6140aa0336ae2342c2e27
--- /dev/null
+++ b/chrome/browser/resources/hterm/js/terminal_tests.js
@@ -0,0 +1,130 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview hterm.Terminal unit tests.
+ */
+
+hterm.Terminal.Tests = new TestManager.Suite('hterm.Terminal.Tests');
+
+hterm.Terminal.Tests.prototype.setup = function(cx) {
+ this.setDefaults(cx,
+ { visibleColumnCount: 80,
+ visibleRowCount: 25,
+ fontSize: 15,
+ lineHeight: 17,
+ charWidth: 9,
+ scrollbarWidth: 16,
+ });
+};
+
+/**
+ * Clear out the current document and create a new hterm.Terminal object for
+ * testing.
+ *
+ * Called before each test case in this suite.
+ */
+hterm.Terminal.Tests.prototype.preamble = function(result, cx) {
+ var document = cx.window.document;
+
+ document.body.innerHTML = '';
+
+ var div = document.createElement('div');
+ div.style.position = 'absolute';
+ div.style.height = this.lineHeight * this.visibleRowCount + 'px';
+ div.style.width = this.charWidth * this.visibleColumnCount +
+ this.scrollbarWidth + 'px';
+ document.body.appendChild(div);
+
+ cx.window.terminal = this.terminal = new hterm.Terminal(
+ this.fontSize, this.lineHeight);
+
+ this.terminal.decorate(div);
+};
+
+/**
+ * Overridden addTest method.
+ *
+ * Every test in this suite needs to wait for the terminal initialization to
+ * complete asynchronously. Rather than stick a bunch of biolerplate into each
+ * test case, we use this overridden addTest method to add a proxy around the
+ * actual test.
+ */
+hterm.Terminal.Tests.addTest = function(name, callback) {
+ function testProxy(result, cx) {
+ setTimeout(function() {
+ this.terminal.setCursorPosition(0, 0);
+ callback.apply(this, [result, cx]);
+ }, 0);
+
+ result.requestTime(200);
+ }
+
+ TestManager.Suite.addTest.apply(this, [name, testProxy]);
+};
+
+/**
+ * Fill the screen with 'X' characters one character at a time, in a way
+ * that should stress the cursor positioning code.
+ */
+hterm.Terminal.Tests.addTest('plaintext-stress-cursor-ltr',
+ function(result, cx) {
+ for (var col = 0; col < this.visibleColumnCount; col++) {
+ for (var row = 0; row < this.visibleRowCount; row++) {
+ console.log(row, col);
+ this.terminal.screen_.setCursorPosition(row, col);
+ this.terminal.screen_.insertString('X');
+ }
+ }
+
+ result.pass();
+ });
+
+/**
+ * Fill the screen with 'X' characters one character at a time, in a way
+ * that should stress the cursor positioning code and the overwriteString()
+ * code.
+ */
+hterm.Terminal.Tests.addTest('plaintext-stress-cursor-rtl',
+ function(result, cx) {
+ for (var col = this.visibleColumnCount - 1; col >= 0; col--) {
+ for (var row = 0; row < this.visibleRowCount; row++) {
+ this.terminal.screen_.setCursorPosition(row, col);
+ this.terminal.screen_.overwriteString('X');
+ }
+ }
+
+ result.pass();
+ });
+
+/**
+ * Fill the terminal with a lot of text as quickly as possible.
+ *
+ * This test doesn't actually assert anything, but the timing data in the test
+ * log is useful.
+ */
+hterm.Terminal.Tests.addTest('plaintext-stress-insert',
+ function(result, cx) {
+ var chunkSize = 1000;
+ var testCount = 10;
+ var self = this;
+
+ function test(count) {
+ for (var i = count * chunkSize; i < (count + 1) * chunkSize; i++) {
+ if (i != 0)
+ self.terminal.newLine();
+ self.terminal.screen_.insertString(
+ 'line ' + i + ': All work and no play makes jack a dull boy.');
+ }
+
+ if (count + 1 >= testCount) {
+ result.pass();
+ } else {
+ result.requestTime(200);
+ setTimeout(test, 0, count + 1);
+ }
+ }
+
+ test(0);
+ });

Powered by Google App Engine
This is Rietveld 408576698