<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[33451] trunk/tests/qunit: Add Initial JS Unit Tests for Menu Customizer</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/33451">33451</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/33451","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>jorbin</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2015-07-27 22:07:27 +0000 (Mon, 27 Jul 2015)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Add Initial JS Unit Tests for Menu Customizer

While these two tests will help ensure we don't repeat our mistakes, they mostly help lay the foundation for more tests that still need to be written.

See <a href="https://core.trac.wordpress.org/ticket/32688">#32688</a>
Props adamsilverstein, jorbin</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunktestsqunitindexhtml">trunk/tests/qunit/index.html</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunktestsqunitfixturescustomizemenusjs">trunk/tests/qunit/fixtures/customize-menus.js</a></li>
<li><a href="#trunktestsqunitwpadminjscustomizenavmenusjs">trunk/tests/qunit/wp-admin/js/customize-nav-menus.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunktestsqunitfixturescustomizemenusjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/fixtures/customize-menus.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/fixtures/customize-menus.js                             (rev 0)
+++ trunk/tests/qunit/fixtures/customize-menus.js       2015-07-27 22:07:27 UTC (rev 33451)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,123 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+window._wpCustomizeNavMenusSettings = {
+       'nonce': 'yo',
+       'phpIntMax': '2147483647',
+       'menuItemTransport': 'postMessage',
+       'allMenus': [{
+               'term_id': '2',
+               'name': 'Awesome menu',
+               'slug': 'awesome-menu',
+               'term_group': '0',
+               'term_taxonomy_id': '2',
+               'taxonomy': 'nav_menu',
+               'description': '',
+               'parent': '0',
+               'count': '0'
+       }, {
+               'term_id': '3',
+               'name': 'Cool Menu',
+               'slug': 'cool-menu',
+               'term_group': '0',
+               'term_taxonomy_id': '3',
+               'taxonomy': 'nav_menu',
+               'description': '',
+               'parent': '0',
+               'count': '0'
+       }],
+       'defaultSettingValues': {
+               'nav_menu': {
+                       'name': '',
+                       'description': '',
+                       'parent': 0,
+                       'auto_add': false
+               },
+               'nav_menu_item': {
+                       'object_id': 0,
+                       'object': '',
+                       'menu_item_parent': 0,
+                       'position': 0,
+                       'type': 'custom',
+                       'title': '',
+                       'url': '',
+                       'target': '',
+                       'attr_title': '',
+                       'description': '',
+                       'classes': '',
+                       'xfn': '',
+                       'status': 'publish',
+                       'original_title': '',
+                       'nav_menu_term_id': 0
+               }
+       },
+       'itemTypes': {
+               'postTypes': {
+                       'page': {
+                               'label': 'Page'
+                       },
+                       'post': {
+                               'label': 'Post'
+                       }
+               },
+               'taxonomies': {
+                       'post_tag': {
+                               'label': 'Tag'
+                       },
+                       'post_format': {
+                               'label': 'Format'
+                       },
+                       'category': {
+                               'label': 'Category'
+                       }
+               }
+       },
+       'l10n': {
+               'custom_label': 'Custom Link',
+               'customizingMenus': 'Customizing &#9656; Menus',
+               'invalidTitleTpl': '%s (Invalid)',
+               'itemAdded': 'Menu item added',
+               'itemDeleted': 'Menu item deleted',
+               'itemsFound': 'Number of items found: %d',
+               'itemsFoundMore': 'Additional items found: %d',
+               'itemsLoadingMore': 'Loading more results... please wait.',
+               'menuAdded': 'Menu created',
+               'menuDeleted': 'Menu deleted',
+               'menuLocation': '(Currently set to: %s)',
+               'menuNameLabel': 'Menu Name',
+               'movedDown': 'Menu item moved down',
+               'movedLeft': 'Menu item moved out of submenu',
+               'movedRight': 'Menu item is now a sub-item',
+               'movedUp': 'Menu item moved up',
+               'pendingTitleTpl': '%s (Pending)',
+               'postTypeLabel': 'Post Type',
+               'reorderLabelOff': 'Close reorder mode',
+               'reorderLabelOn': 'Reorder menu items',
+               'reorderModeOff': 'Reorder mode closed',
+               'reorderModeOn': 'Reorder mode enabled',
+               'taxonomyTermLabel': 'Taxonomy',
+               'unnamed': '(unnamed)',
+               'untitled': '(no label)'
+       }
+};
+
+window._wpCustomizeSettings.panels.nav_menus = {
+       'id': 'nav_menus',
+       'description': '<p>This panel is used for managing navigation menus for content you have already published on your site. You can create menus and add items for existing content such as pages, posts, categories, tags, formats, or custom links.</p><p>Menus can be displayed in locations defined by your theme or in <a href="javascript:wp.customize.panel( "widgets" ).focus();">widget areas</a> by adding a &#8220;Custom Menu&#8221; widget.</p>',
+       'priority': 100,
+       'type': 'nav_menus',
+       'title': 'Menus',
+       'content': '',
+       'active': true,
+       'instanceNumber': 2
+};
+
+window.wpNavMenu = {
+       'options': {
+               'menuItemDepthPerLevel': 30,
+               'globalMaxDepth': 11,
+               'sortableItems': '> *',
+               'targetTolerance': 0
+       },
+       'menusChanged': false,
+       'isRTL': false,
+       'negateIfRTL': 1
+};
+
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/fixtures/customize-menus.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:executable</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+*
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsqunitindexhtml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/index.html</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/index.html      2015-07-27 21:24:36 UTC (rev 33450)
+++ trunk/tests/qunit/index.html        2015-07-27 22:07:27 UTC (rev 33451)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -8,6 +8,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="../../src/wp-includes/js/jquery/ui/core.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="../../src/wp-includes/js/underscore.min.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="../../src/wp-includes/js/backbone.min.js"></script>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                <script src="../../src/wp-includes/js/wp-backbone.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px">                 <script src="../../src/wp-includes/js/zxcvbn.min.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="../../src/wp-includes/js/wp-util.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -23,6 +24,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                <div id="qunit-fixture">
</span><span class="cx" style="display: block; padding: 0 10px">                        <script src="fixtures/customize-header.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                        <script src="fixtures/customize-settings.js"></script>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        <script src="fixtures/customize-menus.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px">                 </div>
</span><span class="cx" style="display: block; padding: 0 10px">                <p><a href="editor">TinyMCE tests</a></p>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32,6 +34,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="../../src/wp-includes/js/customize-models.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="../../src/wp-includes/js/shortcode.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="../../src/wp-admin/js/customize-controls.js"></script>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                <script src="../../src/wp-admin/js/customize-nav-menus.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px">                 <script src="../../src/wp-admin/js/word-count.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                <!-- Unit tests -->
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -41,6 +44,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="wp-includes/js/shortcode.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="wp-admin/js/customize-controls.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">                <script src="wp-admin/js/customize-controls-utils.js"></script>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                <script src="wp-admin/js/customize-nav-menus.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px">                 <script src="wp-admin/js/word-count.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                <!-- Customizer templates for sections -->
</span></span></pre></div>
<a id="trunktestsqunitwpadminjscustomizenavmenusjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/wp-admin/js/customize-nav-menus.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/wp-admin/js/customize-nav-menus.js                              (rev 0)
+++ trunk/tests/qunit/wp-admin/js/customize-nav-menus.js        2015-07-27 22:07:27 UTC (rev 33451)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,43 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/* global wp */
+jQuery( function( ) {
+
+       var api = wp.customize,
+        settings = window._wpCustomizeNavMenusSettings,
+        navMenu = window.wpNavMenu;
+        
+       module( 'Customize Nav Menus', {
+               setup: function() {
+            window._wpCustomizeNavMenusSettings = settings; 
+            window.wpNavMenu = navMenu;
+               },
+               teardown: function() {
+                       // restore defaults
+            window._wpCustomizeNavMenusSettings = settings; 
+            window.wpNavMenu = navMenu;
+               }
+
+       });
+
+
+       /**
+        * Generate 20 ids and verify they are all unique.
+        */
+       test( 'generatePlaceholderAutoIncrementId generates unique IDs', function() {
+               var testIterations = 20,
+                       ids = [ api.Menus.generatePlaceholderAutoIncrementId() ];
+
+               while( testIterations-- > 0 ) {
+                       var placeholderID = api.Menus.generatePlaceholderAutoIncrementId();
+
+                       ok( -1 === ids.indexOf( placeholderID ) );
+                       ids.push( placeholderID );
+               }
+
+       } );
+
+       test( 'it should parse _wpCustomizeMenusSettings.defaults into itself', function() {
+               deepEqual( window._wpCustomizeNavMenusSettings, api.Menus.data );
+       });
+
+
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/wp-admin/js/customize-nav-menus.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:executable</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+*
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span></div>

</body>
</html>