src/cm/media/js/lib/yui/yui3.0.0/examples/test/test-array-tests.html
changeset 0 40c8f766c9b8
equal deleted inserted replaced
-1:000000000000 0:40c8f766c9b8
       
     1 
       
     2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
       
     3 <html>
       
     4 <head>
       
     5 	<title>YUI Library Examples: Test: Array Processing</title>
       
     6     <meta http-equiv="content-type" content="text/html; charset=utf-8">
       
     7     	<link rel="stylesheet" type="text/css" href="../../assets/yui.css" >
       
     8 
       
     9 <style>
       
    10     /*Supplemental CSS for the YUI distribution*/
       
    11     #custom-doc { width: 95%; min-width: 950px; }
       
    12     #pagetitle {background-image: url(../../assets/bg_hd.gif);}
       
    13 /*    #pagetitle h1 {background-image: url(../../assets/title_h_bg.gif);}*/
       
    14 </style>
       
    15 
       
    16 <link rel="stylesheet" type="text/css" href="../../assets/dpSyntaxHighlighter.css">
       
    17 <link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
       
    18 <script type="text/javascript" src="../../build/yui/yui-min.js"></script>
       
    19 <style type="text/css">
       
    20 #testLogger {
       
    21     margin-bottom: 1em;
       
    22 }
       
    23 
       
    24 #testLogger .yui-console .yui-console-title {
       
    25     border: 0 none;
       
    26     color: #000;
       
    27     font-size: 13px;
       
    28     font-weight: bold;
       
    29     margin: 0;
       
    30     text-transform: none;
       
    31 }
       
    32 #testLogger .yui-console .yui-console-entry-meta {
       
    33     margin: 0;
       
    34 }
       
    35 
       
    36 .yui-skin-sam .yui-console-entry-pass .yui-console-entry-cat {
       
    37     background: #070;
       
    38     color: #fff;
       
    39 }
       
    40 </style>
       
    41 
       
    42 </head>
       
    43 <body id="yahoo-com" class=" yui-skin-sam">
       
    44 <div id="custom-doc" class="yui-t2">
       
    45 <div id="hd">
       
    46 	<div id="ygunav">
       
    47 		<p>
       
    48             <em>
       
    49                 <a href="http://developer.yahoo.com/yui/3/">YUI 3.x Home</a> <i> - </i>	
       
    50             </em>
       
    51 		</p>
       
    52 		<form action="http://search.yahoo.com/search" id="sitesearchform">
       
    53             <input name="vs" type="hidden" value="developer.yahoo.com">
       
    54             <input name="vs" type="hidden" value="yuiblog.com">
       
    55 		    <div id="sitesearch">
       
    56 		    	<label for="searchinput">Site Search (YDN &amp; YUIBlog): </label>
       
    57 			    <input type="text" id="searchinput" name="p">
       
    58 			    <input type="submit" value="Search" id="searchsubmit" class="ygbt">
       
    59 		    </div>
       
    60 		</form>
       
    61     </div>
       
    62 	<div id="ygma"><a href="../../"><img src="../../assets/logo.gif"  border="0" width="200" height="93"></a></div>
       
    63 	<div id="pagetitle"><h1>YUI Library Examples: Test: Array Processing</h1></div>
       
    64 </div>
       
    65 <div id="bd">
       
    66 
       
    67 
       
    68 	<div id="yui-main">
       
    69 		<div class="yui-b">
       
    70 		  <div class="yui-ge">
       
    71 			  <div class="yui-u first example" id="main">
       
    72 
       
    73 	<h2>Test: Array Processing</h2>
       
    74 
       
    75 	<div id="example" class="promo">
       
    76 	<div class="example-intro">
       
    77 	<p>This example shows how to use the <a href="/yui/test/#arrayassert"><code>ArrayAssert</code></a> object, which
       
    78   contains assertions designed to be used specifically with JavaScript Arrays and array-like objects.</p>	</div>	
       
    79 
       
    80 	<div class="module example-container ">
       
    81 			<div class="hd exampleHd">
       
    82 			<p class="newWindowButton yui-skin-sam">
       
    83                 <a href="test-array-tests_clean.html" target="_blank">View example in new window.</a>
       
    84             </p>
       
    85 		</div>		<div id="example-canvas" class="bd">
       
    86 
       
    87 		
       
    88 	<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
       
    89 	
       
    90 	<div id="testLogger"></div>
       
    91 <script type="text/javascript">
       
    92 YUI({base:"../../build/", timeout: 10000}).use("node", "console", "test",function (Y) {
       
    93 
       
    94     Y.namespace("example.test");
       
    95     
       
    96     Y.example.test.ArrayTestCase = new Y.Test.Case({
       
    97 
       
    98         //the name of the test case - if not provided, one is automatically generated
       
    99         name: "Array Tests",
       
   100         
       
   101         //-------------------------------------------------------------------------
       
   102         // Setup and teardown
       
   103         //-------------------------------------------------------------------------
       
   104     
       
   105         /*
       
   106          * The setUp() method is used to setup data that necessary for a test to
       
   107          * run. This method is called immediately before each test method is run,
       
   108          * so it is run as many times as there are test methods.
       
   109          */
       
   110         setUp : function () {        
       
   111             this.data = new Array (0,1,2,3,4,5);        
       
   112         },
       
   113         
       
   114         /*
       
   115          * The tearDown() method is used to clean up the initialization that was done
       
   116          * in the setUp() method. Ideally, it should free up all memory allocated in
       
   117          * setUp(), anticipating any possible changes to the data. This method is called
       
   118          * immediately after each test method is run.
       
   119          */
       
   120         tearDown : function () {
       
   121             delete this.data;
       
   122         },
       
   123         
       
   124         //-------------------------------------------------------------------------
       
   125         // Basic tests - all method names must begin with "test"
       
   126         //-------------------------------------------------------------------------
       
   127         
       
   128         /*
       
   129          * Test the push() method.
       
   130          */
       
   131         testPush : function() {
       
   132         
       
   133             //shortcut variables
       
   134             var ArrayAssert = Y.ArrayAssert;
       
   135         
       
   136             //do whatever data manipulation is necessary
       
   137             this.data.push(6);
       
   138         
       
   139             //array-specific assertions
       
   140             ArrayAssert.isNotEmpty(this.data, "Array should not be empty.");
       
   141             ArrayAssert.contains(6, this.data, "Array should contain 6.");
       
   142             ArrayAssert.indexOf(6, this.data, 6, "The value in position 6 should be 6.");
       
   143             
       
   144             //check that all the values are there
       
   145             ArrayAssert.itemsAreEqual([0,1,2,3,4,5,6], this.data, "Arrays should be equal.");        
       
   146             
       
   147         },
       
   148         
       
   149         /*
       
   150          * Test the pop() method.
       
   151          */
       
   152         testPop : function() {
       
   153         
       
   154             //shortcut variables
       
   155             var Assert = Y.Assert;
       
   156             var ArrayAssert = Y.ArrayAssert;
       
   157         
       
   158             //do whatever data manipulation is necessary
       
   159             var value = this.data.pop();
       
   160             
       
   161             //array shouldn't be empty
       
   162             ArrayAssert.isNotEmpty(this.data, "Array should not be empty.");                
       
   163         
       
   164             //basic equality assertion - expected value, actual value, optional error message
       
   165             Assert.areEqual(5, this.data.length, "Array should have 5 items.");
       
   166             Assert.areEqual(5, value, "Value should be 5.");   
       
   167             
       
   168             ArrayAssert.itemsAreSame([0,1,2,3,4], this.data, "Arrays should be equal.");                                
       
   169         },
       
   170         
       
   171         /*
       
   172          * Test the reverse() method.
       
   173          */
       
   174         testReverse : function() {
       
   175         
       
   176             //shortcut variables
       
   177             var ArrayAssert = Y.ArrayAssert;
       
   178         
       
   179             //do whatever data manipulation is necessary
       
   180             this.data = this.data.reverse();
       
   181             
       
   182             ArrayAssert.itemsAreEqual([5,4,3,2,1,0], this.data, "Arrays should be equal.");                              
       
   183         },
       
   184         
       
   185         /*
       
   186          * Test the shift() method.
       
   187          */
       
   188         testShift : function() {
       
   189         
       
   190             //shortcut variables
       
   191             var Assert = Y.Assert;
       
   192             var ArrayAssert = Y.ArrayAssert;
       
   193         
       
   194             //do whatever data manipulation is necessary
       
   195             var value = this.data.shift();
       
   196         
       
   197             //array shouldn't be empty
       
   198             ArrayAssert.isNotEmpty(this.data, "Array should not be empty.");                
       
   199         
       
   200             //basic equality assertion - expected value, actual value, optional error message
       
   201             Assert.areEqual(5, this.data.length, "Array should have 6 items."); 
       
   202             Assert.areEqual(0, value, "Value should be 0."); 
       
   203             
       
   204             ArrayAssert.itemsAreEqual([1,2,3,4,5], this.data, "Arrays should be equal.");                              
       
   205         },            
       
   206         
       
   207         /*
       
   208          * Test the splice() method.
       
   209          */
       
   210         testSplice : function() {
       
   211         
       
   212             //shortcut variables
       
   213             var Assert = Y.Assert;
       
   214             var ArrayAssert = Y.ArrayAssert;
       
   215         
       
   216             //do whatever data manipulation is necessary
       
   217             var removed = this.data.splice(1, 2, 99, 100);
       
   218         
       
   219             //basic equality assertion - expected value, actual value, optional error message
       
   220             Assert.areEqual(6, this.data.length, "Array should have 6 items.");              
       
   221         
       
   222             //the new items should be there
       
   223             ArrayAssert.indexOf(99, this.data, 1, "Value at index 1 should be 99.");   
       
   224             ArrayAssert.indexOf(100, this.data, 2, "Value at index 2 should be 100.");   
       
   225             
       
   226             ArrayAssert.itemsAreEqual([0,99,100,3,4,5], this.data, "Arrays should be equal.");  
       
   227             ArrayAssert.itemsAreEqual([1,2], removed, "Removed values should be an array containing 1 and 2.");
       
   228 
       
   229         },
       
   230 
       
   231         /*
       
   232          * Test the unshift() method.
       
   233          */
       
   234         testUnshift : function() {
       
   235         
       
   236             //shortcut variables
       
   237             var Assert = Y.Assert;
       
   238             var ArrayAssert = Y.ArrayAssert;
       
   239         
       
   240             //do whatever data manipulation is necessary
       
   241             this.data.unshift(-1);
       
   242         
       
   243             //basic equality assertion - expected value, actual value, optional error message
       
   244             Assert.areEqual(7, this.data.length, "Array should have 7 items."); 
       
   245 
       
   246             //the new item should be there
       
   247             ArrayAssert.indexOf(-1, this.data, 0, "First item should be -1."); 
       
   248         
       
   249             ArrayAssert.itemsAreEqual([-1,0,1,2,3,4,5], this.data, "Arrays should be equal.");                              
       
   250         } 
       
   251         
       
   252     });
       
   253      
       
   254     //create the console
       
   255     var r = new Y.Console({
       
   256         newestOnTop : false,
       
   257         style: 'block' // to anchor in the example content
       
   258     });
       
   259     
       
   260     r.render('#testLogger');
       
   261     
       
   262     Y.Test.Runner.add(Y.example.test.ArrayTestCase);
       
   263 
       
   264     //run the tests
       
   265     Y.Test.Runner.run();
       
   266 });
       
   267 
       
   268 </script>
       
   269 	
       
   270 	<!--END SOURCE CODE FOR EXAMPLE =============================== -->
       
   271 	
       
   272 		
       
   273 		</div>
       
   274 	</div>			
       
   275 	</div>
       
   276 		
       
   277 	<h2 class="first">Array Assertions</h2>
       
   278 
       
   279 <p>This example uses the <code>Y.ArrayAssert</code> object to test methods on JavaScript's
       
   280   built-in <code>Array</code> object. The intent of this example is to introduce <code>Y.ArrayAssert</code> and its methods
       
   281   as an alternative to the generic methods available on <code>Y.Assert</code>.</p>
       
   282 <p>The example begins by creating an example namespace and <code>Y.Test.Case</code>:</p>
       
   283 <div id="syntax1" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">Y.<span class="kw2">namespace</span><span class="br0">&#40;</span><span class="st0">&quot;example.test&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">&quot;Array Tests&quot;</span><span class="sy0">,</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//-------------------------------------------------------------------------</span></div></li><li class="li1"><div class="de1">    <span class="co1">// Setup and teardown</span></div></li><li class="li1"><div class="de1">    <span class="co1">//-------------------------------------------------------------------------</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="coMULTI">/*</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    * The setUp() method is used to setup data that necessary for a test to</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    * run. This method is called immediately before each test method is run,</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    * so it is run as many times as there are test methods.</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    */</span></div></li><li class="li2"><div class="de2">    setUp <span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">data</span> <span class="sy0">=</span> <span class="kw2">new</span> Array <span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="coMULTI">/*</span></div></li><li class="li2"><div class="de2"><span class="coMULTI">&nbsp;    * The tearDown() method is used to clean up the initialization that was done</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    * in the setUp() method. Ideally, it should free up all memory allocated in</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    * setUp(), anticipating any possible changes to the data. This method is called</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    * immediately after each test method is run.</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;    */</span></div></li><li class="li2"><div class="de2">    tearDown <span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">delete</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li2"><div class="de2"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">Y.<span class="kw2">namespace</span><span class="br0">&#40;</span><span class="st0">&quot;example.test&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   284 Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   285 &nbsp;
       
   286     <span class="kw3">name</span><span class="sy0">:</span> <span class="st0">&quot;Array Tests&quot;</span><span class="sy0">,</span>
       
   287 &nbsp;
       
   288     <span class="co1">//-------------------------------------------------------------------------</span>
       
   289     <span class="co1">// Setup and teardown</span>
       
   290     <span class="co1">//-------------------------------------------------------------------------</span>
       
   291 &nbsp;
       
   292     <span class="coMULTI">/*
       
   293      * The setUp() method is used to setup data that necessary for a test to
       
   294      * run. This method is called immediately before each test method is run,
       
   295      * so it is run as many times as there are test methods.
       
   296      */</span>
       
   297     setUp <span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   298         <span class="kw1">this</span>.<span class="me1">data</span> <span class="sy0">=</span> <span class="kw2">new</span> Array <span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   299     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   300 &nbsp;
       
   301     <span class="coMULTI">/*
       
   302      * The tearDown() method is used to clean up the initialization that was done
       
   303      * in the setUp() method. Ideally, it should free up all memory allocated in
       
   304      * setUp(), anticipating any possible changes to the data. This method is called
       
   305      * immediately after each test method is run.
       
   306      */</span>
       
   307     tearDown <span class="sy0">:</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   308         <span class="kw1">delete</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">;</span>
       
   309     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   310 &nbsp;
       
   311     ...
       
   312 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax1-plain">Y.namespace("example.test");
       
   313 Y.example.test.ArrayTestCase = new Y.Test.Case({
       
   314 
       
   315     name: "Array Tests",
       
   316 
       
   317     //-------------------------------------------------------------------------
       
   318     // Setup and teardown
       
   319     //-------------------------------------------------------------------------
       
   320 
       
   321     /*
       
   322      * The setUp() method is used to setup data that necessary for a test to
       
   323      * run. This method is called immediately before each test method is run,
       
   324      * so it is run as many times as there are test methods.
       
   325      */
       
   326     setUp : function () {
       
   327         this.data = new Array (0,1,2,3,4,5);
       
   328     },
       
   329 
       
   330     /*
       
   331      * The tearDown() method is used to clean up the initialization that was done
       
   332      * in the setUp() method. Ideally, it should free up all memory allocated in
       
   333      * setUp(), anticipating any possible changes to the data. This method is called
       
   334      * immediately after each test method is run.
       
   335      */
       
   336     tearDown : function () {
       
   337         delete this.data;
       
   338     },
       
   339 
       
   340     ...
       
   341 });</textarea></div><p>This <code>TestCase</code> has a <code>setUp()</code> method that creates an array for all the tests to use, as well as
       
   342   a <code>tearDown()</code> method that deletes the array after each test has been executed. This array is used throughout
       
   343   the tests as a base for array manipulations.</p>
       
   344 
       
   345 <h3>Testing <code>push()</code></h3>
       
   346 <p>The first test is <code>testPush()</code>, which tests the functionality of the <code>Array</code> object's <code>push()</code> method
       
   347   (other methods hidden for simpicity):</p>
       
   348 
       
   349 <div id="syntax2" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="me1">testPush</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//shortcut variables</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="co1">//do whatever data manipulation is necessary</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//array-specific assertions</span></div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">isNotEmpty</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should not be empty.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">        ArrayAssert.<span class="me1">contains</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should contain 6.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">6</span><span class="sy0">,</span> <span class="st0">&quot;The value in position 6 should be 6.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//check that all the values are there</span></div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="sy0">,</span><span class="nu0">6</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   350 &nbsp;
       
   351     ...
       
   352 &nbsp;
       
   353     <span class="me1">testPush</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   354 &nbsp;
       
   355         <span class="co1">//shortcut variables</span>
       
   356         <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span>
       
   357 &nbsp;
       
   358         <span class="co1">//do whatever data manipulation is necessary</span>
       
   359         <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">push</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   360 &nbsp;
       
   361         <span class="co1">//array-specific assertions</span>
       
   362         ArrayAssert.<span class="me1">isNotEmpty</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should not be empty.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   363         ArrayAssert.<span class="me1">contains</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should contain 6.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   364         ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">6</span><span class="sy0">,</span> <span class="st0">&quot;The value in position 6 should be 6.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   365 &nbsp;
       
   366         <span class="co1">//check that all the values are there</span>
       
   367         ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="sy0">,</span><span class="nu0">6</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   368 &nbsp;
       
   369     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   370 &nbsp;
       
   371     ...
       
   372 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax2-plain">Y.example.test.ArrayTestCase = new Y.Test.Case({
       
   373 
       
   374     ...
       
   375 
       
   376     testPush : function() {
       
   377 
       
   378         //shortcut variables
       
   379         var ArrayAssert = Y.ArrayAssert;
       
   380 
       
   381         //do whatever data manipulation is necessary
       
   382         this.data.push(6);
       
   383 
       
   384         //array-specific assertions
       
   385         ArrayAssert.isNotEmpty(this.data, "Array should not be empty.");
       
   386         ArrayAssert.contains(6, this.data, "Array should contain 6.");
       
   387         ArrayAssert.indexOf(6, this.data, 6, "The value in position 6 should be 6.");
       
   388 
       
   389         //check that all the values are there
       
   390         ArrayAssert.itemsAreEqual([0,1,2,3,4,5,6], this.data, "Arrays should be equal.");
       
   391 
       
   392     },
       
   393 
       
   394     ...
       
   395 });</textarea></div><p>The test begins by setting up a shortcut variables for <code>Y.ArrayAssert</code>, then pushes the value 6 onto
       
   396   the <code>data</code> array (which was created by <code>setUp()</code>). Next, <code>Y.ArrayAssert.isNotEmpty()</code> determines if the
       
   397   array has at least one item; this should definitely pass because the <code>push()</code> operation only adds values to the array. To determine
       
   398   that the new value, 6, is in the array, <code>Y.ArrayAssert.contains()</code> is used. The first argument is the value to look for and the second
       
   399   is the array to look in. To find out if the new value ended up where it should have (the last position, index 6), <code>Y.ArrayAssert.indexOf()</code>
       
   400   is used, passing in the value to search for as the first argument, the array to search in as the second, and the index at which the value should
       
   401   occur as the final argument. Since 6 was pushed onto the end of an array that already had 6 items, it should end up at index 6 (the length of the
       
   402   array minus one). As a final test, <code>Y.ArrayAssert.itemsAreEqual()</code> is used to determine that all of the items in the array are in the
       
   403   correct place. The first argument of this method is an array that has all of the values that should be in the array you're testing. This assertion
       
   404   passes only when the values in both arrays match up (the values are equal and the positions are the same).</p>
       
   405 
       
   406 <h3>Testing <code>pop()</code></h3>
       
   407 <p>The next test is <code>testPop()</code>, which tests the functionality of the <code>Array</code> object's <code>pop()</code> method:</p>
       
   408 
       
   409 <div id="syntax3" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="me1">testPop</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//shortcut variables</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//do whatever data manipulation is necessary</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> value <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//array shouldn't be empty</span></div></li><li class="li2"><div class="de2">        ArrayAssert.<span class="me1">isNotEmpty</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should not be empty.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span></div></li><li class="li1"><div class="de1">        Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 5 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="sy0">,</span> value<span class="sy0">,</span> <span class="st0">&quot;Value should be 5.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">itemsAreSame</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    ...</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   410 &nbsp;
       
   411     ...
       
   412 &nbsp;
       
   413     <span class="me1">testPop</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   414 &nbsp;
       
   415         <span class="co1">//shortcut variables</span>
       
   416         <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span>
       
   417         <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span>
       
   418 &nbsp;
       
   419         <span class="co1">//do whatever data manipulation is necessary</span>
       
   420         <span class="kw2">var</span> value <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   421 &nbsp;
       
   422         <span class="co1">//array shouldn't be empty</span>
       
   423         ArrayAssert.<span class="me1">isNotEmpty</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should not be empty.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   424 &nbsp;
       
   425         <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span>
       
   426         Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 5 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   427         Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="sy0">,</span> value<span class="sy0">,</span> <span class="st0">&quot;Value should be 5.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   428 &nbsp;
       
   429         ArrayAssert.<span class="me1">itemsAreSame</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   430 &nbsp;
       
   431     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   432 &nbsp;
       
   433     ...
       
   434 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax3-plain">Y.example.test.ArrayTestCase = new Y.Test.Case({
       
   435 
       
   436     ...
       
   437 
       
   438     testPop : function() {
       
   439 
       
   440         //shortcut variables
       
   441         var Assert = Y.Assert;
       
   442         var ArrayAssert = Y.ArrayAssert;
       
   443 
       
   444         //do whatever data manipulation is necessary
       
   445         var value = this.data.pop();
       
   446 
       
   447         //array shouldn't be empty
       
   448         ArrayAssert.isNotEmpty(this.data, "Array should not be empty.");
       
   449 
       
   450         //basic equality assertion - expected value, actual value, optional error message
       
   451         Assert.areEqual(5, this.data.length, "Array should have 5 items.");
       
   452         Assert.areEqual(5, value, "Value should be 5.");
       
   453 
       
   454         ArrayAssert.itemsAreSame([0,1,2,3,4], this.data, "Arrays should be equal.");
       
   455 
       
   456     },
       
   457 
       
   458     ...
       
   459 });</textarea></div><p>This test also starts out by creating some shortcut variables, for <code>Y.Assert</code> and <code>Y.ArrayAssert</code>. Next, the <code>pop()</code>
       
   460   method is called, storing the returned item in <code>value</code>. Since <code>pop()</code> should only remove a single item, <code>Y.ArrayAssert.isNotEmpty()</code>
       
   461   is called to ensure that only one item has been removed. After that, <code>Y.Assert.areEqual()</code> is called twice: once to check the
       
   462   length of the array and once to confirm the value of the item that was removed from the array (which should be 5). The last assertion uses
       
   463   <code>Y.ArrayAssert.itemsAreSame()</code>, which is similar to <code>Y.ArrayAssert.itemsAreEqual()</code> in that it compares values between two
       
   464   arrays. The difference is that <code>Y.ArrayAssert.itemsAreSame()</code> uses strict equality (<code>===</code>) to compare values, ensuring that
       
   465   no behind-the-scenes type conversions will occur (this makes <code>Y.ArrayAssert.itemsAreSame()</code> more useful for working with arrays of
       
   466   objects).</p>
       
   467 
       
   468 <h3>Testing <code>reverse()</code></h3>
       
   469 <p>The next test is <code>testReverse()</code>, which tests the functionality of the <code>Array</code> object's <code>reverse()</code> method:</p>
       
   470 
       
   471 <div id="syntax4" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="me1">testReverse</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//shortcut variables</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="co1">//do whatever data manipulation is necessary</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">data</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">reverse</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">5</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   472 &nbsp;
       
   473     ...
       
   474 &nbsp;
       
   475     <span class="me1">testReverse</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   476 &nbsp;
       
   477         <span class="co1">//shortcut variables</span>
       
   478         <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span>
       
   479 &nbsp;
       
   480         <span class="co1">//do whatever data manipulation is necessary</span>
       
   481         <span class="kw1">this</span>.<span class="me1">data</span> <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">reverse</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   482 &nbsp;
       
   483         ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">5</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   484 &nbsp;
       
   485     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   486 &nbsp;
       
   487     ...
       
   488 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax4-plain">Y.example.test.ArrayTestCase = new Y.Test.Case({
       
   489 
       
   490     ...
       
   491 
       
   492     testReverse : function() {
       
   493 
       
   494         //shortcut variables
       
   495         var ArrayAssert = Y.ArrayAssert;
       
   496 
       
   497         //do whatever data manipulation is necessary
       
   498         this.data = this.data.reverse();
       
   499 
       
   500         ArrayAssert.itemsAreEqual([5,4,3,2,1,0], this.data, "Arrays should be equal.");
       
   501 
       
   502     },
       
   503 
       
   504     ...
       
   505 });</textarea></div><p>The <code>testRemove()</code> method is very simple, calling <code>reverse()</code> on the array and then testing the result. Since
       
   506   every item in the array has changed, the changes can be tested by calling <code>Y.ArrayAssert.itemsAreEqual()</code> once (instead of
       
   507   calling <code>Y.ArrayAssert.indexOf()</code> multiple times). The first argument is an array with all the values in the reverse order
       
   508   of the array that was created in <code>setUp()</code>. When compared with the second argument, the newly reversed array, the values in
       
   509   each position should be equal.</p>
       
   510 
       
   511 <h3>Testing <code>shift()</code></h3>
       
   512 <p>The next test is <code>testShift()</code>, which tests the functionality of the <code>Array</code> object's <code>shift()</code> method:</p>
       
   513 
       
   514 <div id="syntax5" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="me1">testShift</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//shortcut variables</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//do whatever data manipulation is necessary</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> value <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">shift</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//array shouldn't be empty</span></div></li><li class="li2"><div class="de2">        ArrayAssert.<span class="me1">isNotEmpty</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should not be empty.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span></div></li><li class="li1"><div class="de1">        Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 6 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> value<span class="sy0">,</span> <span class="st0">&quot;Value should be 0.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    ...</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   515 &nbsp;
       
   516     ...
       
   517 &nbsp;
       
   518     <span class="me1">testShift</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   519 &nbsp;
       
   520         <span class="co1">//shortcut variables</span>
       
   521         <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span>
       
   522         <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span>
       
   523 &nbsp;
       
   524         <span class="co1">//do whatever data manipulation is necessary</span>
       
   525         <span class="kw2">var</span> value <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">shift</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   526 &nbsp;
       
   527         <span class="co1">//array shouldn't be empty</span>
       
   528         ArrayAssert.<span class="me1">isNotEmpty</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Array should not be empty.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   529 &nbsp;
       
   530         <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span>
       
   531         Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 6 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   532         Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> value<span class="sy0">,</span> <span class="st0">&quot;Value should be 0.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   533 &nbsp;
       
   534         ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   535 &nbsp;
       
   536     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   537 &nbsp;
       
   538     ...
       
   539 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax5-plain">Y.example.test.ArrayTestCase = new Y.Test.Case({
       
   540 
       
   541     ...
       
   542 
       
   543     testShift : function() {
       
   544 
       
   545         //shortcut variables
       
   546         var Assert = Y.Assert;
       
   547         var ArrayAssert = Y.ArrayAssert;
       
   548 
       
   549         //do whatever data manipulation is necessary
       
   550         var value = this.data.shift();
       
   551 
       
   552         //array shouldn't be empty
       
   553         ArrayAssert.isNotEmpty(this.data, "Array should not be empty.");
       
   554 
       
   555         //basic equality assertion - expected value, actual value, optional error message
       
   556         Assert.areEqual(5, this.data.length, "Array should have 6 items.");
       
   557         Assert.areEqual(0, value, "Value should be 0.");
       
   558 
       
   559         ArrayAssert.itemsAreEqual([1,2,3,4,5], this.data, "Arrays should be equal.");
       
   560 
       
   561     },
       
   562 
       
   563     ...
       
   564 });</textarea></div><p>The <code>shift()</code> method removes the first item in the array and returns it (similar to <code>pop()</code>, which removes the item
       
   565   from the end). In the <code>testShift()</code> method, <code>shift()</code> is called and the item is stored in <code>value</code>. To ensure
       
   566   that the rest of the array is still there, <code>Y.ArrayAssert.isNotEmpty()</code> is called. After that, <code>Array.areEqual()</code> is
       
   567   called twice, once to test the length of the array and once to test the value that was returned from <code>shift()</code> (which should be
       
   568   0). As a last test, the entire array is tested using <code>Y.ArrayAssert.itemsAreEqual()</code> to ensure that all of the items have shifted
       
   569   into the appropriate positions in the array.</p>
       
   570 
       
   571 <h3>Testing <code>splice()</code></h3>
       
   572 <p>The next test is <code>testSplice()</code>, which tests the functionality of the <code>Array</code> object's <code>splice()</code> method:</p>
       
   573 
       
   574 <div id="syntax6" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="me1">testSplice</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//shortcut variables</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//do whatever data manipulation is necessary</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> removed <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">splice</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">99</span><span class="sy0">,</span> <span class="nu0">100</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span></div></li><li class="li2"><div class="de2">        Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 6 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//the new items should be there</span></div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="nu0">99</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="st0">&quot;Value at index 1 should be 99.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="st0">&quot;Value at index 2 should be 100.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">99</span><span class="sy0">,</span><span class="nu0">100</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">,</span> removed<span class="sy0">,</span> <span class="st0">&quot;Removed values should be an array containing 1 and 2.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   575 &nbsp;
       
   576     ...
       
   577 &nbsp;
       
   578     <span class="me1">testSplice</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   579 &nbsp;
       
   580         <span class="co1">//shortcut variables</span>
       
   581         <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span>
       
   582         <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span>
       
   583 &nbsp;
       
   584         <span class="co1">//do whatever data manipulation is necessary</span>
       
   585         <span class="kw2">var</span> removed <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">splice</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">99</span><span class="sy0">,</span> <span class="nu0">100</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   586 &nbsp;
       
   587         <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span>
       
   588         Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 6 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   589 &nbsp;
       
   590         <span class="co1">//the new items should be there</span>
       
   591         ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="nu0">99</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="st0">&quot;Value at index 1 should be 99.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   592         ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="nu0">100</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="st0">&quot;Value at index 2 should be 100.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   593 &nbsp;
       
   594         ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">99</span><span class="sy0">,</span><span class="nu0">100</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   595         ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">,</span> removed<span class="sy0">,</span> <span class="st0">&quot;Removed values should be an array containing 1 and 2.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   596 &nbsp;
       
   597     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   598 &nbsp;
       
   599     ...
       
   600 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax6-plain">Y.example.test.ArrayTestCase = new Y.Test.Case({
       
   601 
       
   602     ...
       
   603 
       
   604     testSplice : function() {
       
   605 
       
   606         //shortcut variables
       
   607         var Assert = Y.Assert;
       
   608         var ArrayAssert = Y.ArrayAssert;
       
   609 
       
   610         //do whatever data manipulation is necessary
       
   611         var removed = this.data.splice(1, 2, 99, 100);
       
   612 
       
   613         //basic equality assertion - expected value, actual value, optional error message
       
   614         Assert.areEqual(6, this.data.length, "Array should have 6 items.");
       
   615 
       
   616         //the new items should be there
       
   617         ArrayAssert.indexOf(99, this.data, 1, "Value at index 1 should be 99.");
       
   618         ArrayAssert.indexOf(100, this.data, 2, "Value at index 2 should be 100.");
       
   619 
       
   620         ArrayAssert.itemsAreEqual([0,99,100,3,4,5], this.data, "Arrays should be equal.");
       
   621         ArrayAssert.itemsAreEqual([1,2], removed, "Removed values should be an array containing 1 and 2.");
       
   622 
       
   623     },
       
   624 
       
   625     ...
       
   626 });</textarea></div><p>The <code>splice()</code> method is one of the most powerful <code>Array</code> manipulations. It can both remove and add any number of items
       
   627   from an array at the same time. This test begins by splicing some values into the array. When calling <code>splice()</code>, the first argument
       
   628   is 1, indicating that values should be inserted at index 1 of the array; the second argument is 2, indicating that two values should be
       
   629   removed from the array (the value in index 1 and the value in index 2); the third and fourth arguments are values that should be inserted
       
   630   into the array at the position given by the first argument. Essentially, values 1 and 2 should end up being replaced by values 99 and 100 in
       
   631   the array.</p>
       
   632 <p>The first test is to determine that the length of the array is still 6 (since the previous step removed two items and then inserted two, the
       
   633   length should still be 6). After that, <code>Y.Assert.indexOf()</code> is called to determine that the values of 99 and 100 are in positions
       
   634   1 and 2, respectively. To ensure the integrity of the entire array, <code>Y.ArrayAssert.itemsAreEqual()</code> is called on the array, comparing
       
   635   it to an array with the same values. The very last step is to test the value returned from <code>splice()</code>, which is an array containing
       
   636   the removed values, 1 and 2. <code>Y.ArrayAssert.itemsAreEqual()</code> is appropriate for this task as well.</p>
       
   637 
       
   638 <h3>Testing <code>unshift()</code></h3>
       
   639 <p>The next test is <code>testUnshift()</code>, which tests the functionality of the <code>Array</code> object's <code>unshift()</code> method:</p>
       
   640 
       
   641 <div id="syntax7" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="me1">testUnshift</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//shortcut variables</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//do whatever data manipulation is necessary</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">unshift</span><span class="br0">&#40;</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span></div></li><li class="li2"><div class="de2">        Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">7</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 7 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//the new item should be there</span></div></li><li class="li1"><div class="de1">        ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="sy0">-</span><span class="nu0">1</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="st0">&quot;First item should be -1.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="sy0">-</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    ...</div></li><li class="li2"><div class="de2"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span> <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Test</span>.<span class="kw1">Case</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   642 &nbsp;
       
   643     ...
       
   644 &nbsp;
       
   645     <span class="me1">testUnshift</span> <span class="sy0">:</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   646 &nbsp;
       
   647         <span class="co1">//shortcut variables</span>
       
   648         <span class="kw2">var</span> Assert <span class="sy0">=</span> Y.<span class="me1">Assert</span><span class="sy0">;</span>
       
   649         <span class="kw2">var</span> ArrayAssert <span class="sy0">=</span> Y.<span class="me1">ArrayAssert</span><span class="sy0">;</span>
       
   650 &nbsp;
       
   651         <span class="co1">//do whatever data manipulation is necessary</span>
       
   652         <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">unshift</span><span class="br0">&#40;</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   653 &nbsp;
       
   654         <span class="co1">//basic equality assertion - expected value, actual value, optional error message</span>
       
   655         Assert.<span class="me1">areEqual</span><span class="br0">&#40;</span><span class="nu0">7</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span>.<span class="me1">length</span><span class="sy0">,</span> <span class="st0">&quot;Array should have 7 items.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   656 &nbsp;
       
   657         <span class="co1">//the new item should be there</span>
       
   658         ArrayAssert.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="sy0">-</span><span class="nu0">1</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="st0">&quot;First item should be -1.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   659 &nbsp;
       
   660         ArrayAssert.<span class="me1">itemsAreEqual</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="sy0">-</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw1">this</span>.<span class="me1">data</span><span class="sy0">,</span> <span class="st0">&quot;Arrays should be equal.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   661 &nbsp;
       
   662     <span class="br0">&#125;</span><span class="sy0">,</span>
       
   663 &nbsp;
       
   664     ...
       
   665 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax7-plain">Y.example.test.ArrayTestCase = new Y.Test.Case({
       
   666 
       
   667     ...
       
   668 
       
   669     testUnshift : function() {
       
   670 
       
   671         //shortcut variables
       
   672         var Assert = Y.Assert;
       
   673         var ArrayAssert = Y.ArrayAssert;
       
   674 
       
   675         //do whatever data manipulation is necessary
       
   676         this.data.unshift(-1);
       
   677 
       
   678         //basic equality assertion - expected value, actual value, optional error message
       
   679         Assert.areEqual(7, this.data.length, "Array should have 7 items.");
       
   680 
       
   681         //the new item should be there
       
   682         ArrayAssert.indexOf(-1, this.data, 0, "First item should be -1.");
       
   683 
       
   684         ArrayAssert.itemsAreEqual([-1,0,1,2,3,4,5], this.data, "Arrays should be equal.");
       
   685 
       
   686     },
       
   687 
       
   688     ...
       
   689 });</textarea></div><p>Working similar to <code>push()</code>, <code>unshift()</code> adds a value to the array, but the item is added to the front (index 0) instead of
       
   690   the back. This test begins by adding the value -1 to the array. The first assertion determines if the length of the array has been incremented
       
   691   to 7 to account for the new value. After that, <code>Y.ArrayAssert.indexOf()</code> is used to determine if the value has been placed in the
       
   692   correct location. The final assertions tests that the entire array is expected by using <code>Y.ArrayAssert.itemsAreEqual()</code>.</p>
       
   693 
       
   694 <h3>Running the tests</h3>
       
   695 
       
   696 <p>With all of the tests defined, the last step is to run them:</p>
       
   697 
       
   698 <div id="syntax8" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co1">//create the console</span></div></li><li class="li1"><div class="de1"><span class="kw2">var</span> r <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Console</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    verbose <span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">    newestOnTop <span class="sy0">:</span> <span class="kw2">false</span></div></li><li class="li2"><div class="de2"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">r.<span class="me1">render</span><span class="br0">&#40;</span><span class="st0">'#testLogger'</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">Y.<span class="me1">Test</span>.<span class="me1">Runner</span>.<span class="me1">add</span><span class="br0">&#40;</span>Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1">//run the tests</span></div></li><li class="li1"><div class="de1">Y.<span class="me1">Test</span>.<span class="me1">Runner</span>.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;"><span class="co1">//create the console</span>
       
   699 <span class="kw2">var</span> r <span class="sy0">=</span> <span class="kw2">new</span> Y.<span class="me1">Console</span><span class="br0">&#40;</span><span class="br0">&#123;</span>
       
   700     verbose <span class="sy0">:</span> <span class="kw2">true</span><span class="sy0">,</span>
       
   701     newestOnTop <span class="sy0">:</span> <span class="kw2">false</span>
       
   702 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   703 &nbsp;
       
   704 r.<span class="me1">render</span><span class="br0">&#40;</span><span class="st0">'#testLogger'</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   705 &nbsp;
       
   706 Y.<span class="me1">Test</span>.<span class="me1">Runner</span>.<span class="me1">add</span><span class="br0">&#40;</span>Y.<span class="me1">example</span>.<span class="me1">test</span>.<span class="me1">ArrayTestCase</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   707 &nbsp;
       
   708 <span class="co1">//run the tests</span>
       
   709 Y.<span class="me1">Test</span>.<span class="me1">Runner</span>.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax8-plain">//create the console
       
   710 var r = new Y.Console({
       
   711     verbose : true,
       
   712     newestOnTop : false
       
   713 });
       
   714 
       
   715 r.render('#testLogger');
       
   716 
       
   717 Y.Test.Runner.add(Y.example.test.ArrayTestCase);
       
   718 
       
   719 //run the tests
       
   720 Y.Test.Runner.run();</textarea></div>
       
   721 <p>Before running the tests, it's necessary to create a <code>Y.Console</code> object to display the results (otherwise the tests would run
       
   722   but you wouldn't see the results). After that, the <code>Y.Test.Runner</code> is loaded with the <code>Y.Test.Case</code> object by calling
       
   723   <code>add()</code> (any number of <code>Y.Test.Case</code> and <code>TestSuite</code> objects can be added to a <code>Y.Test.Runner</code>,
       
   724   this example only adds one for simplicity). The very last step is to call <code>run()</code>, which begins executing the tests in its
       
   725   queue and displays the results in the <code>Y.Console</code>.</p>				</div>
       
   726 				<div class="yui-u sidebar">
       
   727 					
       
   728 				
       
   729 					<div id="examples" class="mod box4">
       
   730                         <div class="hd">
       
   731 						<h4>
       
   732     Test Examples:</h4>
       
   733                         </div>
       
   734 						<div class="bd">
       
   735 							<ul>
       
   736 								<li><a href='../test/test-simple-example.html'>Simple Testing Example</a></li><li><a href='../test/test-advanced-test-options.html'>Advanced Test Options</a></li><li class='selected'><a href='../test/test-array-tests.html'>Array Processing</a></li><li><a href='../test/test-async-test.html'>Asynchronous Testing</a></li><li><a href='../test/test-async-event-tests.html'>Asynchronous Event Testing</a></li>							</ul>
       
   737 						</div>
       
   738 					</div>
       
   739 					
       
   740 					<div class="mod box4">
       
   741                         <div class="hd">
       
   742 						<h4>More Test Resources:</h4>
       
   743                         </div>
       
   744                         <div class="bd">
       
   745 						<ul>
       
   746 							<!-- <li><a href="http://developer.yahoo.com/yui/test/">User's Guide</a> (external)</li> -->
       
   747 <li><a href="../../api/module_test.html">API Documentation</a></li></ul>
       
   748                         </div>
       
   749 					</div>
       
   750 			  </div>
       
   751 		</div>
       
   752 		
       
   753 		</div>
       
   754 	</div>
       
   755 
       
   756 
       
   757 <div class="yui-b toc3" id="tocWrapper">
       
   758 <!-- TABLE OF CONTENTS -->
       
   759 <div id="toc">
       
   760 	
       
   761 <ul>
       
   762 <li class="sect first">YUI 3 Resources</li><li class="item"><a title="YUI 3 -- Yahoo! User Interface (YUI) Library" href="http://developer.yahoo.com/yui/3/">YUI 3 Web Site</a></li><li class="item"><a title="Examples of every YUI utility and control in action" href="../../examples/">YUI 3 Examples</a></li><li class="item"><a title="Instantly searchable API documentation for the entire YUI library." href="../../api/">YUI 3 API Docs</a></li><li class="item"><a title="YUI 3 Dependency Configurator -- configure your custom YUI implementation" href="http://developer.yahoo.com/yui/3/configurator">YUI 3 Dependency Configurator</a></li><li class="item"><a title="The YUI 3 Forum on YUILibrary.com" href="http://yuilibrary.com/forum/viewforum.php?f=15">YUI 3 Forums (external)</a></li><li class="item"><a title="Found a bug or a missing feature? Let us know on YUILibrary.com." href="http://developer.yahoo.com/yui/articles/reportingbugs/">Bug Reports/Feature Requests</a></li><li class="item"><a title="YUI is free and open, offered under a BSD license." href="http://developer.yahoo.com/yui/license.html">YUI License</a></li><li class="item"><a title="Download and fork the YUI project on GitHub" href="http://github.com/yui">YUI on Github</a></li><li class="item"><a title="The Yahoo! User Interface Blog" href="http://yuiblog.com">YUI Blog (external)</a></li><li class="sect">YUI 3 Core - Examples</li><li class="item"><a title="YUI Global Object - Functional Examples" href="../../examples/yui/index.html">YUI Global Object</a></li><li class="item"><a title="Event - Functional Examples" href="../../examples/event/index.html">Event</a></li><li class="item"><a title="Node - Functional Examples" href="../../examples/node/index.html">Node</a></li><li class="sect">YUI 3 Component Infrastructure - Examples</li><li class="item"><a title="Attribute - Functional Examples" href="../../examples/attribute/index.html">Attribute</a></li><li class="item"><a title="Plugin - Functional Examples" href="../../examples/plugin/index.html">Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Widget - Functional Examples" href="../../examples/widget/index.html">Widget <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 Utilities - Examples</li><li class="item"><a title="Animation - Functional Examples" href="../../examples/anim/index.html">Animation</a></li><li class="item"><a title="AsyncQueue - Functional Examples" href="../../examples/async-queue/index.html">AsyncQueue</a></li><li class="item"><a title="Browser History - Functional Examples" href="../../examples/history/index.html">Browser History</a></li><li class="item"><a title="Cache - Functional Examples" href="../../examples/cache/index.html">Cache</a></li><li class="item"><a title="Cookie - Functional Examples" href="../../examples/cookie/index.html">Cookie</a></li><li class="item"><a title="DataSchema - Functional Examples" href="../../examples/dataschema/index.html">DataSchema <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="DataSource - Functional Examples" href="../../examples/datasource/index.html">DataSource <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="DataType - Functional Examples" href="../../examples/datatype/index.html">DataType <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Drag &amp; Drop - Functional Examples" href="../../examples/dd/index.html">Drag &amp; Drop</a></li><li class="item"><a title="Get - Functional Examples" href="../../examples/get/index.html">Get</a></li><li class="item"><a title="ImageLoader - Functional Examples" href="../../examples/imageloader/index.html">ImageLoader</a></li><li class="item"><a title="IO - Functional Examples" href="../../examples/io/index.html">IO</a></li><li class="item"><a title="JSON (JavaScript Object Notation) - Functional Examples" href="../../examples/json/index.html">JSON</a></li><li class="item"><a title="Stylesheet - Functional Examples" href="../../examples/stylesheet/index.html">Stylesheet</a></li><li class="sect">YUI 3 Widgets - Examples</li><li class="item"><a title="Overlay - Functional Examples" href="../../examples/overlay/index.html">Overlay <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Slider - Functional Examples" href="../../examples/slider/index.html">Slider <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 Node Plugins - Examples</li><li class="item"><a title="FocusManager Node Plugin - Functional Examples" href="../../examples/node-focusmanager/index.html">FocusManager Node Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="MenuNav Node Plugin - Functional Examples" href="../../examples/node-menunav/index.html">MenuNav Node Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 CSS - Examples</li><li class="item"><a title="YUI CSS Reset - Functional Examples" href="../../examples/cssreset/index.html">CSS Reset</a></li><li class="item"><a title="YUI Fonts - Functional Examples" href="../../examples/cssfonts/index.html">CSS Fonts</a></li><li class="item"><a title="YUI Base - Functional Examples" href="../../examples/cssbase/index.html">CSS Base</a></li><li class="sect">YUI 3 Developer Tools - Examples</li><li class="item"><a title="Console - Functional Examples" href="../../examples/console/index.html">Console <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Console Filters Plugin- Functional Examples" href="../../examples/console-filters/index.html">Plugin.ConsoleFilters <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Profiler - Functional Examples" href="../../examples/profiler/index.html">Profiler</a></li><li class="selected "><a title="Test - Functional Examples" href="../../examples/test/index.html">Test</a></li><li class="sect">Other Useful YUI 3 Resources</li><li class="item"><a title="Answers to Frequently Asked Questions about the YUI Library" href="http://developer.yahoo.com/yui/articles/faq/">YUI FAQ (external)</a></li><li class="item"><a title="Yahoo!'s philosophy of Graded Browser Support" href="http://developer.yahoo.com/yui/articles/gbs/">Graded Browser Support (external)</a></li><li class="item"><a title="Videos and podcasts from the YUI Team and from the Yahoo! frontend engineering community." href="http://developer.yahoo.com/yui/theater/">YUI Theater (external)</a></li></ul>
       
   763 </div>
       
   764 </div>
       
   765 	</div><!--closes bd-->
       
   766 
       
   767 	<div id="ft">
       
   768         <p class="first">Copyright &copy; 2009 Yahoo! Inc. All rights reserved.</p>
       
   769         <p><a href="http://privacy.yahoo.com/privacy/us/devel/index.html">Privacy Policy</a> - 
       
   770             <a href="http://docs.yahoo.com/info/terms/">Terms of Service</a> - 
       
   771             <a href="http://docs.yahoo.com/info/copyright/copyright.html">Copyright Policy</a> - 
       
   772             <a href="http://careers.yahoo.com/">Job Openings</a></p>
       
   773 	</div>
       
   774 </div>
       
   775 <script language="javascript"> 
       
   776 var yuiConfig = {base:"../../build/", timeout: 10000};
       
   777 </script>
       
   778 <script src="../../assets/syntax.js"></script>
       
   779 <script src="../../assets/dpSyntaxHighlighter.js"></script>
       
   780 <script language="javascript"> 
       
   781 dp.SyntaxHighlighter.HighlightAll('code'); 
       
   782 </script>
       
   783 </body>
       
   784 </html>