<!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>[27492] trunk/tests/phpunit/tests: Add widget customizer tests missing from [27419].</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">
<dt>Revision</dt> <dd><a href="http://core.trac.wordpress.org/changeset/27492">27492</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2014-03-10 23:04:53 +0000 (Mon, 10 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add widget customizer tests missing from <a href="http://core.trac.wordpress.org/changeset/27419">[27419]</a>. see <a href="http://core.trac.wordpress.org/ticket/27112">#27112</a>.</pre>

<h3>Added Paths</h3>
<ul>
<li>trunk/tests/phpunit/tests/widgets/</li>
<li><a href="#trunktestsphpunittestswidgetscustomizerphp">trunk/tests/phpunit/tests/widgets/customizer.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunktestsphpunittestswidgetscustomizerphp"></a>
<div class="addfile"><h4>Added: trunk/tests/phpunit/tests/widgets/customizer.php (0 => 27492)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/tests/phpunit/tests/widgets/customizer.php                         (rev 0)
+++ trunk/tests/phpunit/tests/widgets/customizer.php    2014-03-10 23:04:53 UTC (rev 27492)
</span><span class="lines">@@ -0,0 +1,110 @@
</span><ins>+<?php
+class Test_Widget_Customizer extends WP_UnitTestCase {
+
+       public function setUp() {
+               parent::setUp();
+
+               // Create a new user then add 'edit_theme_options' capability
+               $user_id = $this->factory->user->create();
+               $user    = wp_set_current_user( $user_id );
+               $user->add_cap( 'edit_theme_options' );
+
+               // Pretending in customize page.
+               if ( ! isset( $_REQUEST['wp_customize'] ) ) {
+                       $_REQUEST['wp_customize'] = 'on';
+               }
+
+               if ( ! class_exists( 'WP_Customize_Manager' ) )
+                       require_once ABSPATH . WPINC . '/class-wp-customize-manager.php';
+
+               // Init Customize class.
+               if ( ! isset( $GLOBALS['wp_customize'] ) )
+                       $GLOBALS['wp_customize'] = new WP_Customize_Manager;
+
+               // Removes any registered actions (in which some themes use) and re-register action
+               // from this plugin.
+               remove_all_actions( 'customize_register' );
+               add_action( 'customize_register', array( 'Widget_Customizer', 'customize_register' ) );
+
+               set_current_screen( 'customize' );
+
+               do_action( 'customize_register', $GLOBALS['wp_customize'] );
+       }
+
+       public function test_plugins_loaded() {
+               $this->assertTrue( class_exists( 'Widget_Customizer' ), 'class Widget_Customizer does not exists' );
+               $this->assertGreaterThan( 0, has_action( 'plugins_loaded', array( 'Widget_Customizer', 'setup' ) ), 'setup method is not properly invoked during plugins_loaded' );
+       }
+
+       public function test_setup_i18n() {
+               global $l10n;
+
+               $test_string = __( 'Test string', 'widget-customizer' );
+               $this->assertArrayHasKey( 'widget-customizer', $l10n, 'Text domain is not loaded or has the wrong name' );
+       }
+
+       public function test_setup_actions() {
+               // Makes sure all registered actions are invoked in expected hooks
+
+               $this->assertGreaterThan( 0, has_action( 'after_setup_theme', array( 'Widget_Customizer', 'setup_widget_addition_previews' ) ), 'preview_new_widgets method is not properly invoked during after_setup_theme' );
+
+               $this->assertGreaterThan( 0, has_action( 'customize_register', array( 'Widget_Customizer', 'customize_register' ) ), 'customize_register method is not properly invoked during customize_register' );
+
+               $this->assertGreaterThan( 0, has_action( sprintf( 'wp_ajax_%s', Widget_Customizer::UPDATE_WIDGET_AJAX_ACTION ), array( 'Widget_Customizer', 'wp_ajax_update_widget' ) ), 'wp_ajax_update_widget method is not properly invoked during wp_ajax_' . Widget_Customizer::UPDATE_WIDGET_AJAX_ACTION );
+
+               $this->assertGreaterThan( 0, has_action( 'customize_controls_enqueue_scripts', array( 'Widget_Customizer', 'customize_controls_enqueue_deps' ) ), 'customize_controls_enqueue_deps method is not properly invoked during customize_controls_enqueue_scripts' );
+
+               $this->assertGreaterThan( 0, has_action( 'customize_preview_init', array( 'Widget_Customizer', 'customize_preview_init' ) ), 'customize_preview_init method is not properly invoked during customize_preview_init' );
+
+               $this->assertGreaterThan( 0, has_action( 'widgets_admin_page', array( 'Widget_Customizer', 'widget_customizer_link' ) ), 'widget_customizer_link method is not properly invoked during widgets_admin_page' );
+
+               $this->assertGreaterThan( 0, has_action( 'dynamic_sidebar', array( 'Widget_Customizer', 'tally_sidebars_via_dynamic_sidebar_actions' ) ), 'tally_sidebars_via_dynamic_sidebar_actions method is not properly invoked during dynamic_sidebar' );
+       }
+
+       public function test_setup_filters() {
+               // Makes sure all registered filters are invoked in expected hooks
+
+               $this->assertEquals( 10, has_action( 'temp_is_active_sidebar', array( 'Widget_Customizer', 'tally_sidebars_via_is_active_sidebar_calls' ) ), 'tally_sidebars_via_is_active_sidebar_calls method is not properly invoked during temp_is_active_sidebar' );
+
+               $this->assertEquals( 10, has_action( 'temp_dynamic_sidebar_has_widgets', array( 'Widget_Customizer', 'tally_sidebars_via_dynamic_sidebar_calls' ) ), 'tally_sidebars_via_dynamic_sidebar_calls method is not properly invoked during temp_dynamic_sidebar_has_widgets' );
+       }
+
+       public function test_plugin_meta() {
+               $this->assertEquals( 'widget-customizer', Widget_Customizer::get_plugin_meta( 'TextDomain' ), 'Unexpected TextDomain value of plugin data' );
+               $this->assertEquals( '/languages', Widget_Customizer::get_plugin_meta( 'DomainPath' ), 'Unexpected DomainPath value of plugin data' );
+               $this->assertEquals( 'Widget Customizer', Widget_Customizer::get_plugin_meta( 'Name' ), 'Unexpected Version value plugin data' );
+       }
+
+       public function test_preview_new_widgets() {
+               // @todo Adds test here. Please note that this is the most tricky test as it tests AJAX request.
+       }
+
+       public function test_customize_register() {
+               // Since two classes are expected to be loaded in here, tests it if those classess exist.
+               $expected_classes_loaded = (
+                       class_exists( 'Sidebar_Widgets_WP_Customize_Control' )
+                       &&
+                       class_exists( 'Widget_Form_WP_Customize_Control' )
+               );
+
+               $this->assertTrue( $expected_classes_loaded, 'Sidebar_Widgets_WP_Customize_Control and Widget_Form_WP_Customize_Control are not loaded properly' );
+
+               // @todo Puts more assertions
+       }
+
+       public function test_customize_controls_enqueue_deps() {
+               global $wp_scripts;
+
+               remove_all_actions( 'customize_controls_enqueue_scripts' );
+               add_action( 'customize_controls_enqueue_scripts', array( 'Widget_Customizer', 'customize_controls_enqueue_deps' ) );
+               do_action( 'customize_controls_enqueue_scripts' );
+
+               $this->assertTrue( wp_script_is( 'jquery-ui-sortable', 'enqueued' ), 'jquery-ui-sortable script is not properly enqueued' );
+               $this->assertTrue( wp_script_is( 'jquery-ui-droppable', 'enqueued' ), 'jquery-ui-droppable script is not properly enqueued' );
+               $this->assertTrue( wp_script_is( 'widget-customizer', 'enqueued' ), 'widget-customizer script is not properly enqueued' );
+
+               $this->assertTrue( wp_style_is( 'widget-customizer', 'enqueued' ), 'widget-customizer style is not properly enqueued' );
+
+               $this->assertNotEmpty( $wp_scripts->get_data( 'widget-customizer', 'data' ), 'widget-customizer data is empty' );
+       }
+}
</ins></span></pre>
</div>
</div>

</body>
</html>