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); |
+ }); |