Index: tests/qunit/fixtures/quicktags.js
===================================================================
--- tests/qunit/fixtures/quicktags.js	(revision 0)
+++ tests/qunit/fixtures/quicktags.js	(working copy)
@@ -0,0 +1,5 @@
+var quicktagsCanvas = jQuery( '<div id="quicktags-test-parent"><div id="quicktags-test"></div></div>' );
+quicktagsCanvas.css( { position: 'absolute', top: -1000 } ); // remove from view
+jQuery( document.body ).append( quicktagsCanvas );
+
+window.quicktagsL10n = {"closeAllOpenTags":"Close all open tags","closeTags":"close tags","enterURL":"Enter the URL","enterImageURL":"Enter the URL of the image","enterImageDescription":"Enter a description of the image","fullscreen":"fullscreen","toggleFullscreen":"Toggle fullscreen mode","textdirection":"text direction","toggleTextdirection":"Toggle Editor Text Direction","dfw":"Distraction-free writing mode"};
Index: tests/qunit/index.html
===================================================================
--- tests/qunit/index.html	(revision 31068)
+++ tests/qunit/index.html	(working copy)
@@ -25,6 +25,7 @@
     <div id="qunit-fixture">
       <script src="fixtures/customize-header.js"></script>
       <script src="fixtures/customize-settings.js"></script>
+      <script src="fixtures/quicktags.js"></script>
     </div>
     <p><a href="editor">TinyMCE tests</a></p>
 
@@ -34,6 +35,7 @@
     <script src="../../src/wp-includes/js/customize-models.js"></script>
     <script src="../../src/wp-includes/js/shortcode.js"></script>
     <script src="../../src/wp-admin/js/customize-controls.js"></script>
+    <script src="../../src/wp-includes/js/quicktags.js"></script>
 
     <!-- Unit tests -->
     <script src="wp-admin/js/password-strength-meter.js"></script>
@@ -42,6 +44,7 @@
     <script src="wp-includes/js/shortcode.js"></script>
     <script src="wp-admin/js/customize-controls.js"></script>
     <script src="wp-admin/js/customize-controls-utils.js"></script>
+    <script src="wp-includes/js/quicktags.js"></script>
   </div>
 </body>
 </html>
Index: tests/qunit/wp-includes/js/quicktags.js
===================================================================
--- tests/qunit/wp-includes/js/quicktags.js	(revision 0)
+++ tests/qunit/wp-includes/js/quicktags.js	(working copy)
@@ -0,0 +1,59 @@
+/* global wp, jQuery, quicktagsL10n */
+jQuery( function() {
+	module( 'quicktags' );
+
+	test( 'settings.buttons zero', function() {
+		var settings = {
+			id: 'quicktags-test',
+			buttons: ''
+		};
+		var qinst = quicktags( settings );
+		var expected = {};
+
+		QTags._buttonsInit(); // Call manually to make sure theButtons exists (#26183).
+
+		deepEqual( qinst.theButtons, expected, 'buttons not blank on zero-length string' );
+	});
+
+	test( 'settings.buttons false', function() {
+		var settings = {
+			id: 'quicktags-test',
+			buttons: false
+		};
+		var qinst = quicktags( settings );
+		var expected = {};
+
+		QTags._buttonsInit(); // Call manually to make sure theButtons exists (#26183).
+
+		deepEqual( qinst.theButtons, expected, 'buttons not blank on false' );
+	});
+
+	test( 'settings.buttons one', function() {
+		var settings = {
+			id: 'quicktags-test',
+			buttons: 'em'
+		};
+		var qinst = quicktags( settings );
+		var expected = { 'em' : new QTags.TagButton('em','i','<em>','</em>') };
+
+		QTags._buttonsInit(); // Call manually to make sure theButtons exists (#26183).
+
+		deepEqual( qinst.theButtons, expected, 'buttons not one' );
+	});
+
+	test( 'settings.buttons two', function() {
+		var settings = {
+			id: 'quicktags-test',
+			buttons: 'em,ul'
+		};
+		var qinst = quicktags( settings );
+		var expected = {
+			'em' : new QTags.TagButton('em','i','<em>','</em>'),
+			'ul' : new QTags.TagButton('ul','ul','<ul>\n','</ul>\n\n')
+		};
+
+		QTags._buttonsInit(); // Call manually to make sure theButtons exists (#26183).
+
+		deepEqual( qinst.theButtons, expected, 'buttons not two' );
+	});
+});
