github
Advanced Search
  • Home
  • Pricing and Signup
  • Explore GitHub
  • Blog
  • Login

yui / yui2

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 173
    • 85
  • Source
  • Commits
  • Network (85)
  • Downloads (1,268)
  • Graphs
  • Tree: 20e996b

click here to add a description

click here to add a homepage

  • Switch Branches (2)
    • master
    • yui-2.8.0+
  • Switch Tags (1,268)
    • yui2-2605
    • yui2-2604
    • yui2-2603
    • yui2-2602
    • yui2-2601
    • yui2-2600
    • yui2-2599
    • yui2-2598
    • yui2-2597
    • yui2-2596
    • yui2-2595
    • yui2-2594
    • yui2-2593
    • yui2-2592
    • yui2-2591
    • yui2-2590
    • yui2-2589
    • yui2-2588
    • yui2-2587
    • yui2-2586
    • yui2-2585
    • yui2-2584
    • yui2-2583
    • yui2-2582
    • yui2-2581
    • yui2-2580
    • yui2-2579
    • yui2-2578
    • yui2-2577
    • yui2-2576
    • yui2-2575
    • yui2-2574
    • yui2-2573
    • yui2-2572
    • yui2-2571
    • yui2-2570
    • yui2-2569
    • yui2-2568
    • yui2-2567
    • yui2-2566
    • yui2-2565
    • yui2-2564
    • yui2-2563
    • yui2-2562
    • yui2-2561
    • yui2-2560
    • yui2-2559
    • yui2-2558
    • yui2-2557
    • yui2-2556
    • yui2-2555
    • yui2-2554
    • yui2-2553
    • yui2-2552
    • yui2-2551
    • yui2-2550
    • yui2-2549
    • yui2-2548
    • yui2-2547
    • yui2-2546
    • yui2-2545
    • yui2-2544
    • yui2-2543
    • yui2-2542
    • yui2-2541
    • yui2-2540
    • yui2-2539
    • yui2-2538
    • yui2-2537
    • yui2-2536
    • yui2-2535
    • yui2-2534
    • yui2-2533
    • yui2-2532
    • yui2-2531
    • yui2-2530
    • yui2-2529
    • yui2-2528
    • yui2-2527
    • yui2-2526
    • yui2-2525
    • yui2-2524
    • yui2-2523
    • yui2-2522
    • yui2-2521
    • yui2-2520
    • yui2-2519
    • yui2-2518
    • yui2-2517
    • yui2-2516
    • yui2-2515
    • yui2-2514
    • yui2-2513
    • yui2-2512
    • yui2-2511
    • yui2-2510
    • yui2-2509
    • yui2-2508
    • yui2-2507
    • yui2-2506
    • yui2-2505
    • yui2-2504
    • yui2-2503
    • yui2-2502
    • yui2-2501
    • yui2-2500
    • yui2-2499
    • yui2-2498
    • yui2-2497
    • yui2-2496
    • yui2-2495
    • yui2-2494
    • yui2-2493
    • yui2-2492
    • yui2-2491
    • yui2-2490
    • yui2-2489
    • yui2-2488
    • yui2-2487
    • yui2-2486
    • yui2-2485
    • yui2-2484
    • yui2-2483
    • yui2-2482
    • yui2-2481
    • yui2-2480
    • yui2-2479
    • yui2-2478
    • yui2-2477
    • yui2-2476
    • yui2-2475
    • yui2-2474
    • yui2-2473
    • yui2-2472
    • yui2-2471
    • yui2-2470
    • yui2-2469
    • yui2-2468
    • yui2-2467
    • yui2-2466
    • yui2-2465
    • yui2-2464
    • yui2-2463
    • yui2-2462
    • yui2-2461
    • yui2-2460
    • yui2-2459
    • yui2-2458
    • yui2-2457
    • yui2-2456
    • yui2-2455
    • yui2-2454
    • yui2-2453
    • yui2-2452
    • yui2-2451
    • yui2-2450
    • yui2-2449
    • yui2-2448
    • yui2-2447
    • yui2-2446
    • yui2-2445
    • yui2-2444
    • yui2-2443
    • yui2-2442
    • yui2-2441
    • yui2-2440
    • yui2-2439
    • yui2-2438
    • yui2-2437
    • yui2-2436
    • yui2-2435
    • yui2-2434
    • yui2-2433
    • yui2-2432
    • yui2-2431
    • yui2-2430
    • yui2-2429
    • yui2-2428
    • yui2-2427
    • yui2-2426
    • yui2-2425
    • yui2-2424
    • yui2-2423
    • yui2-2422
    • yui2-2421
    • yui2-2420
    • yui2-2419
    • yui2-2418
    • yui2-2417
    • yui2-2416
    • yui2-2415
    • yui2-2414
    • yui2-2413
    • yui2-2412
    • yui2-2411
    • yui2-2410
    • yui2-2409
    • yui2-2408
    • yui2-2407
    • yui2-2406
    • yui2-2405
    • yui2-2404
    • yui2-2403
    • yui2-2402
    • yui2-2401
    • yui2-2400
    • yui2-2399
    • yui2-2398
    • yui2-2397
    • yui2-2396
    • yui2-2395
    • yui2-2394
    • yui2-2393
    • yui2-2392
    • yui2-2391
    • yui2-2390
    • yui2-2389
    • yui2-2388
    • yui2-2387
    • yui2-2386
    • yui2-2385
    • yui2-2384
    • yui2-2383
    • yui2-2382
    • yui2-2381
    • yui2-2380
    • yui2-2379
    • yui2-2378
    • yui2-2377
    • yui2-2376
    • yui2-2375
    • yui2-2374
    • yui2-2373
    • yui2-2372
    • yui2-2371
    • yui2-2370
    • yui2-2369
    • yui2-2368
    • yui2-2367
    • yui2-2366
    • yui2-2365
    • yui2-2364
    • yui2-2363
    • yui2-2362
    • yui2-2361
    • yui2-2360
    • yui2-2359
    • yui2-2358
    • yui2-2357
    • yui2-2356
    • yui2-2355
    • yui2-2354
    • yui2-2353
    • yui2-2352
    • yui2-2351
    • yui2-2350
    • yui2-2349
    • yui2-2348
    • yui2-2347
    • yui2-2346
    • yui2-2345
    • yui2-2344
    • yui2-2343
    • yui2-2342
    • yui2-2341
    • yui2-2340
    • yui2-2339
    • yui2-2338
    • yui2-2337
    • yui2-2336
    • yui2-2335
    • yui2-2334
    • yui2-2333
    • yui2-2332
    • yui2-2331
    • yui2-2330
    • yui2-2329
    • yui2-2328
    • yui2-2327
    • yui2-2326
    • yui2-2325
    • yui2-2324
    • yui2-2323
    • yui2-2322
    • yui2-2321
    • yui2-2320
    • yui2-2319
    • yui2-2318
    • yui2-2317
    • yui2-2316
    • yui2-2315
    • yui2-2314
    • yui2-2313
    • yui2-2312
    • yui2-2311
    • yui2-2310
    • yui2-2309
    • yui2-2308
    • yui2-2307
    • yui2-2306
    • yui2-2305
    • yui2-2304
    • yui2-2303
    • yui2-2302
    • yui2-2301
    • yui2-2300
    • yui2-2299
    • yui2-2298
    • yui2-2297
    • yui2-2296
    • yui2-2295
    • yui2-2294
    • yui2-2293
    • yui2-2292
    • yui2-2291
    • yui2-2290
    • yui2-2289
    • yui2-2288
    • yui2-2287
    • yui2-2286
    • yui2-2285
    • yui2-2284
    • yui2-2283
    • yui2-2282
    • yui2-2281
    • yui2-2280
    • yui2-2279
    • yui2-2278
    • yui2-2277
    • yui2-2276
    • yui2-2275
    • yui2-2274
    • yui2-2273
    • yui2-2272
    • yui2-2271
    • yui2-2270
    • yui2-2269
    • yui2-2268
    • yui2-2267
    • yui2-2266
    • yui2-2265
    • yui2-2264
    • yui2-2263
    • yui2-2262
    • yui2-2261
    • yui2-2260
    • yui2-2259
    • yui2-2258
    • yui2-2257
    • yui2-2256
    • yui2-2255
    • yui2-2254
    • yui2-2253
    • yui2-2252
    • yui2-2251
    • yui2-2250
    • yui2-2249
    • yui2-2248
    • yui2-2247
    • yui2-2246
    • yui2-2245
    • yui2-2244
    • yui2-2243
    • yui2-2242
    • yui2-2241
    • yui2-2240
    • yui2-2239
    • yui2-2238
    • yui2-2237
    • yui2-2236
    • yui2-2235
    • yui2-2234
    • yui2-2233
    • yui2-2232
    • yui2-2231
    • yui2-2230
    • yui2-2229
    • yui2-2228
    • yui2-2227
    • yui2-2226
    • yui2-2225
    • yui2-2224
    • yui2-2223
    • yui2-2222
    • yui2-2221
    • yui2-2220
    • yui2-2219
    • yui2-2218
    • yui2-2217
    • yui2-2216
    • yui2-2215
    • yui2-2214
    • yui2-2213
    • yui2-2212
    • yui2-2211
    • yui2-2210
    • yui2-2209
    • yui2-2208
    • yui2-2207
    • yui2-2206
    • yui2-2205
    • yui2-2204
    • yui2-2203
    • yui2-2202
    • yui2-2201
    • yui2-2200
    • yui2-2199
    • yui2-2198
    • yui2-2197
    • yui2-2196
    • yui2-2195
    • yui2-2194
    • yui2-2193
    • yui2-2192
    • yui2-2191
    • yui2-2190
    • yui2-2189
    • yui2-2188
    • yui2-2187
    • yui2-2186
    • yui2-2185
    • yui2-2184
    • yui2-2183
    • yui2-2182
    • yui2-2181
    • yui2-2180
    • yui2-2179
    • yui2-2178
    • yui2-2177
    • yui2-2176
    • yui2-2175
    • yui2-2174
    • yui2-2173
    • yui2-2172
    • yui2-2171
    • yui2-2170
    • yui2-2169
    • yui2-2168
    • yui2-2167
    • yui2-2166
    • yui2-2165
    • yui2-2164
    • yui2-2163
    • yui2-2162
    • yui2-2161
    • yui2-2160
    • yui2-2159
    • yui2-2158
    • yui2-2157
    • yui2-2156
    • yui2-2155
    • yui2-2154
    • yui2-2153
    • yui2-2152
    • yui2-2151
    • yui2-2150
    • yui2-2149
    • yui2-2148
    • yui2-2147
    • yui2-2146
    • yui2-2145
    • yui2-2144
    • yui2-2143
    • yui2-2142
    • yui2-2141
    • yui2-2140
    • yui2-2139
    • yui2-2138
    • yui2-2137
    • yui2-2136
    • yui2-2135
    • yui2-2134
    • yui2-2133
    • yui2-2132
    • yui2-2131
    • yui2-2130
    • yui2-2129
    • yui2-2128
    • yui2-2127
    • yui2-2126
    • yui2-2125
    • yui2-2124
    • yui2-2123
    • yui2-2122
    • yui2-2121
    • yui2-2120
    • yui2-2119
    • yui2-2118
    • yui2-2117
    • yui2-2116
    • yui2-2115
    • yui2-2114
    • yui2-2113
    • yui2-2112
    • yui2-2111
    • yui2-2110
    • yui2-2109
    • yui2-2108
    • yui2-2107
    • yui2-2106
    • yui2-2105
    • yui2-2104
    • yui2-2103
    • yui2-2102
    • yui2-2101
    • yui2-2100
    • yui2-2099
    • yui2-2098
    • yui2-2097
    • yui2-2096
    • yui2-2095
    • yui2-2094
    • yui2-2093
    • yui2-2092
    • yui2-2091
    • yui2-2090
    • yui2-2089
    • yui2-2088
    • yui2-2087
    • yui2-2086
    • yui2-2085
    • yui2-2084
    • yui2-2083
    • yui2-2082
    • yui2-2081
    • yui2-2080
    • yui2-2079
    • yui2-2078
    • yui2-2077
    • yui2-2076
    • yui2-2075
    • yui2-2074
    • yui2-2073
    • yui2-2072
    • yui2-2071
    • yui2-2070
    • yui2-2069
    • yui2-2068
    • yui2-2067
    • yui2-2066
    • yui2-2065
    • yui2-2064
    • yui2-2063
    • yui2-2062
    • yui2-2061
    • yui2-2060
    • yui2-2059
    • yui2-2058
    • yui2-2057
    • yui2-2056
    • yui2-2055
    • yui2-2054
    • yui2-2053
    • yui2-2052
    • yui2-2051
    • yui2-2050
    • yui2-2049
    • yui2-2048
    • yui2-2047
    • yui2-2046
    • yui2-2045
    • yui2-2044
    • yui2-2043
    • yui2-2042
    • yui2-2041
    • yui2-2040
    • yui2-2039
    • yui2-2038
    • yui2-2037
    • yui2-2036
    • yui2-2035
    • yui2-2034
    • yui2-2033
    • yui2-2032
    • yui2-2031
    • yui2-2030
    • yui2-2029
    • yui2-2028
    • yui2-2027
    • yui2-2026
    • yui2-2025
    • yui2-2024
    • yui2-2023
    • yui2-2022
    • yui2-2021
    • yui2-2020
    • yui2-2019
    • yui2-2018
    • yui2-2017
    • yui2-2016
    • yui2-2015
    • yui2-2014
    • yui2-2013
    • yui2-2012
    • yui2-2011
    • yui2-2010
    • yui2-2009
    • yui2-2008
    • yui2-2007
    • yui2-2006
    • yui2-2005
    • yui2-2004
    • yui2-2003
    • yui2-2002
    • yui2-2001
    • yui2-2000
    • yui2-1999
    • yui2-1998
    • yui2-1997
    • yui2-1996
    • yui2-1995
    • yui2-1994
    • yui2-1993
    • yui2-1992
    • yui2-1991
    • yui2-1990
    • yui2-1989
    • yui2-1988
    • yui2-1987
    • yui2-1986
    • yui2-1985
    • yui2-1984
    • yui2-1983
    • yui2-1982
    • yui2-1981
    • yui2-1980
    • yui2-1979
    • yui2-1978
    • yui2-1977
    • yui2-1976
    • yui2-1975
    • yui2-1974
    • yui2-1973
    • yui2-1972
    • yui2-1971
    • yui2-1970
    • yui2-1969
    • yui2-1968
    • yui2-1967
    • yui2-1966
    • yui2-1965
    • yui2-1964
    • yui2-1963
    • yui2-1962
    • yui2-1961
    • yui2-1960
    • yui2-1959
    • yui2-1958
    • yui2-1957
    • yui2-1956
    • yui2-1955
    • yui2-1954
    • yui2-1953
    • yui2-1952
    • yui2-1951
    • yui2-1950
    • yui2-1949
    • yui2-1948
    • yui2-1947
    • yui2-1946
    • yui2-1945
    • yui2-1944
    • yui2-1943
    • yui2-1942
    • yui2-1941
    • yui2-1940
    • yui2-1939
    • yui2-1938
    • yui2-1937
    • yui2-1936
    • yui2-1935
    • yui2-1934
    • yui2-1933
    • yui2-1932
    • yui2-1931
    • yui2-1930
    • yui2-1929
    • yui2-1928
    • yui2-1927
    • yui2-1926
    • yui2-1925
    • yui2-1924
    • yui2-1923
    • yui2-1922
    • yui2-1921
    • yui2-1920
    • yui2-1919
    • yui2-1918
    • yui2-1917
    • yui2-1916
    • yui2-1915
    • yui2-1914
    • yui2-1913
    • yui2-1912
    • yui2-1911
    • yui2-1909
    • yui2-1908
    • yui2-1907
    • yui2-1906
    • yui2-1905
    • yui2-1904
    • yui2-1903
    • yui2-1902
    • yui2-1901
    • yui2-1900
    • yui2-1899
    • yui2-1898
    • yui2-1897
    • yui2-1896
    • yui2-1895
    • yui2-1894
    • yui2-1893
    • yui2-1892
    • yui2-1891
    • yui2-1890
    • yui2-1889
    • yui2-1888
    • yui2-1887
    • yui2-1886
    • yui2-1885
    • yui2-1884
    • yui2-1883
    • yui2-1882
    • yui2-1881
    • yui2-1880
    • yui2-1879
    • yui2-1878
    • yui2-1877
    • yui2-1876
    • yui2-1875
    • yui2-1874
    • yui2-1873
    • yui2-1872
    • yui2-1871
    • yui2-1870
    • yui2-1869
    • yui2-1868
    • yui2-1867
    • yui2-1866
    • yui2-1865
    • yui2-1864
    • yui2-1863
    • yui2-1862
    • yui2-1861
    • yui2-1860
    • yui2-1859
    • yui2-1858
    • yui2-1857
    • yui2-1856
    • yui2-1855
    • yui2-1854
    • yui2-1853
    • yui2-1852
    • yui2-1851
    • yui2-1850
    • yui2-1849
    • yui2-1848
    • yui2-1847
    • yui2-1846
    • yui2-1845
    • yui2-1844
    • yui2-1843
    • yui2-1842
    • yui2-1841
    • yui2-1840
    • yui2-1839
    • yui2-1838
    • yui2-1837
    • yui2-1836
    • yui2-1835
    • yui2-1834
    • yui2-1833
    • yui2-1832
    • yui2-1831
    • yui2-1830
    • yui2-1829
    • yui2-1828
    • yui2-1827
    • yui2-1826
    • yui2-1825
    • yui2-1824
    • yui2-1823
    • yui2-1822
    • yui2-1821
    • yui2-1820
    • yui2-1819
    • yui2-1818
    • yui2-1817
    • yui2-1816
    • yui2-1815
    • yui2-1814
    • yui2-1813
    • yui2-1812
    • yui2-1811
    • yui2-1810
    • yui2-1809
    • yui2-1808
    • yui2-1807
    • yui2-1806
    • yui2-1805
    • yui2-1804
    • yui2-1803
    • yui2-1802
    • yui2-1801
    • yui2-1800
    • yui2-1799
    • yui2-1798
    • yui2-1797
    • yui2-1796
    • yui2-1795
    • yui2-1794
    • yui2-1793
    • yui2-1792
    • yui2-1791
    • yui2-1790
    • yui2-1789
    • yui2-1788
    • yui2-1787
    • yui2-1786
    • yui2-1785
    • yui2-1784
    • yui2-1783
    • yui2-1782
    • yui2-1781
    • yui2-1780
    • yui2-1779
    • yui2-1778
    • yui2-1777
    • yui2-1776
    • yui2-1775
    • yui2-1774
    • yui2-1773
    • yui2-1772
    • yui2-1771
    • yui2-1770
    • yui2-1769
    • yui2-1768
    • yui2-1767
    • yui2-1766
    • yui2-1765
    • yui2-1764
    • yui2-1763
    • yui2-1762
    • yui2-1761
    • yui2-1760
    • yui2-1759
    • yui2-1758
    • yui2-1757
    • yui2-1756
    • yui2-1755
    • yui2-1754
    • yui2-1753
    • yui2-1752
    • yui2-1751
    • yui2-1750
    • yui2-1749
    • yui2-1748
    • yui2-1747
    • yui2-1746
    • yui2-1745
    • yui2-1744
    • yui2-1743
    • yui2-1742
    • yui2-1741
    • yui2-1740
    • yui2-1739
    • yui2-1738
    • yui2-1737
    • yui2-1736
    • yui2-1735
    • yui2-1734
    • yui2-1733
    • yui2-1732
    • yui2-1731
    • yui2-1730
    • yui2-1729
    • yui2-1728
    • yui2-1727
    • yui2-1726
    • yui2-1725
    • yui2-1724
    • yui2-1723
    • yui2-1722
    • yui2-1721
    • yui2-1720
    • yui2-1719
    • yui2-1718
    • yui2-1717
    • yui2-1716
    • yui2-1715
    • yui2-1714
    • yui2-1713
    • yui2-1712
    • yui2-1711
    • yui2-1710
    • yui2-1709
    • yui2-1708
    • yui2-1707
    • yui2-1706
    • yui2-1705
    • yui2-1704
    • yui2-1703
    • yui2-1702
    • yui2-1701
    • yui2-1700
    • yui2-1699
    • yui2-1698
    • yui2-1697
    • yui2-1696
    • yui2-1695
    • yui2-1694
    • yui2-1693
    • yui2-1692
    • yui2-1691
    • yui2-1690
    • yui2-1689
    • yui2-1688
    • yui2-1687
    • yui2-1686
    • yui2-1685
    • yui2-1684
    • yui2-1683
    • yui2-1682
    • yui2-1681
    • yui2-1680
    • yui2-1679
    • yui2-1678
    • yui2-1677
    • yui2-1676
    • yui2-1675
    • yui2-1674
    • yui2-1673
    • yui2-1672
    • yui2-1671
    • yui2-1670
    • yui2-1669
    • yui2-1668
    • yui2-1667
    • yui2-1666
    • yui2-1665
    • yui2-1664
    • yui2-1663
    • yui2-1662
    • yui2-1661
    • yui2-1660
    • yui2-1659
    • yui2-1658
    • yui2-1657
    • yui2-1656
    • yui2-1655
    • yui2-1654
    • yui2-1653
    • yui2-1652
    • yui2-1651
    • yui2-1650
    • yui2-1649
    • yui2-1648
    • yui2-1647
    • yui2-1646
    • yui2-1645
    • yui2-1644
    • yui2-1643
    • yui2-1642
    • yui2-1641
    • yui2-1640
    • yui2-1639
    • yui2-1638
    • yui2-1637
    • yui2-1636
    • yui2-1635
    • yui2-1634
    • yui2-1633
    • yui2-1632
    • yui2-1631
    • yui2-1630
    • yui2-1629
    • yui2-1628
    • yui2-1627
    • yui2-1626
    • yui2-1625
    • yui2-1624
    • yui2-1623
    • yui2-1622
    • yui2-1621
    • yui2-1620
    • yui2-1619
    • yui2-1618
    • yui2-1617
    • yui2-1616
    • yui2-1615
    • yui2-1614
    • yui2-1613
    • yui2-1612
    • yui2-1611
    • yui2-1610
    • yui2-1609
    • yui2-1608
    • yui2-1607
    • yui2-1606
    • yui2-1605
    • yui2-1604
    • yui2-1603
    • yui2-1602
    • yui2-1601
    • yui2-1600
    • yui2-1599
    • yui2-1598
    • yui2-1597
    • yui2-1596
    • yui2-1595
    • yui2-1594
    • yui2-1593
    • yui2-1592
    • yui2-1591
    • yui2-1590
    • yui2-1589
    • yui2-1588
    • yui2-1587
    • yui2-1586
    • yui2-1585
    • yui2-1584
    • yui2-1583
    • yui2-1582
    • yui2-1581
    • yui2-1580
    • yui2-1579
    • yui2-1578
    • yui2-1577
    • yui2-1576
    • yui2-1575
    • yui2-1574
    • yui2-1573
    • yui2-1572
    • yui2-1571
    • yui2-1570
    • yui2-1569
    • yui2-1568
    • yui2-1567
    • yui2-1566
    • yui2-1565
    • yui2-1564
    • yui2-1563
    • yui2-1562
    • yui2-1561
    • yui2-1560
    • yui2-1559
    • yui2-1558
    • yui2-1557
    • yui2-1556
    • yui2-1555
    • yui2-1554
    • yui2-1553
    • yui2-1552
    • yui2-1551
    • yui2-1550
    • yui2-1549
    • yui2-1548
    • yui2-1547
    • yui2-1546
    • yui2-1545
    • yui2-1544
    • yui2-1543
    • yui2-1542
    • yui2-1541
    • yui2-1540
    • yui2-1539
    • yui2-1538
    • yui2-1537
    • yui2-1536
    • yui2-1535
    • yui2-1534
    • yui2-1533
    • yui2-1532
    • yui2-1531
    • yui2-1530
    • yui2-1529
    • yui2-1528
    • yui2-1527
    • yui2-1526
    • yui2-1525
    • yui2-1524
    • yui2-1523
    • yui2-1522
    • yui2-1521
    • yui2-1520
    • yui2-1519
    • yui2-1518
    • yui2-1517
    • yui2-1516
    • yui2-1515
    • yui2-1514
    • yui2-1513
    • yui2-1512
    • yui2-1511
    • yui2-1510
    • yui2-1509
    • yui2-1508
    • yui2-1507
    • yui2-1506
    • yui2-1505
    • yui2-1504
    • yui2-1503
    • yui2-1502
    • yui2-1501
    • yui2-1500
    • yui2-1499
    • yui2-1498
    • yui2-1497
    • yui2-1496
    • yui2-1495
    • yui2-1494
    • yui2-1493
    • yui2-1492
    • yui2-1491
    • yui2-1490
    • yui2-1489
    • yui2-1488
    • yui2-1487
    • yui2-1486
    • yui2-1485
    • yui2-1484
    • yui2-1483
    • yui2-1482
    • yui2-1481
    • yui2-1480
    • yui2-1479
    • yui2-1478
    • yui2-1477
    • yui2-1476
    • yui2-1475
    • yui2-1474
    • yui2-1473
    • yui2-1472
    • yui2-1471
    • yui2-1470
    • yui2-1469
    • yui2-1468
    • yui2-1467
    • yui2-1466
    • yui2-1465
    • yui2-1464
    • yui2-1463
    • yui2-1462
    • yui2-1461
    • yui2-1460
    • yui2-1459
    • yui2-1458
    • yui2-1457
    • yui2-1456
    • yui2-1455
    • yui2-1454
    • yui2-1453
    • yui2-1452
    • yui2-1451
    • yui2-1450
    • yui2-1449
    • yui2-1448
    • yui2-1447
    • yui2-1446
    • yui2-1445
    • yui2-1444
    • yui2-1443
    • yui2-1442
    • yui2-1441
    • yui2-1440
    • yui2-1439
    • yui2-1438
    • yui2-1437
    • yui2-1436
    • yui2-1435
    • yui2-1434
    • yui2-1433
    • yui2-1432
    • yui2-1431
    • yui2-1430
    • yui2-1429
    • yui2-1428
    • yui2-1427
    • yui2-1426
    • yui2-1425
    • yui2-1424
    • yui2-1423
    • yui2-1422
    • yui2-1421
    • yui2-1420
    • yui2-1419
    • yui2-1418
    • yui2-1417
    • yui2-1416
    • yui2-1415
    • yui2-1414
    • yui2-1413
    • yui2-1412
    • yui2-1411
    • yui2-1410
    • yui2-1409
    • yui2-1408
    • yui2-1407
    • yui2-1406
    • yui2-1405
    • yui2-1404
    • yui2-1403
    • yui2-1402
    • yui2-1401
    • yui2-1400
    • yui2-1399
    • yui2-1398
    • yui2-1397
    • yui2-1396
    • yui2-1395
    • yui2-1394
    • yui2-1393
    • yui2-1392
    • yui2-1391
    • yui2-1390
    • yui2-1389
    • yui2-1388
    • yui2-1387
    • yui2-1386
    • yui2-1385
    • yui2-1384
    • yui2-1383
    • yui2-1382
    • yui2-1381
    • yui2-1380
    • yui2-1379
    • yui2-1378
    • yui2-1377
    • yui2-1376
    • yui2-1375
    • yui2-1374
    • yui2-1373
    • yui2-1372
    • yui2-1371
    • yui2-1370
    • yui2-1369
    • yui2-1368
    • yui2-1367
    • yui2-1366
    • yui2-1365
    • yui2-1364
    • yui2-1363
    • yui2-1362
    • yui2-1361
    • yui2-1360
    • yui2-1359
    • yui2-1358
    • yui2-1357
    • yui2-2.8.1-19
    • yui2-2.8.1-18
    • yui2-2.8.1-17
    • yui2-2.8.1-16
    • yui2-2.8.1-15
    • yui2-2.8.1-14
    • yui2-2.8.1-13
    • yui2-2.8.1-12
    • yui2-2.8.1-11
    • yui2-2.8.1-10
    • yui2-2.8.1-9
    • yui2-2.8.1-8
    • yui2-2.8.1-7
    • yui2-2.8.1-6
    • yui2-2.8.1-5
    • yui2-2.8.1-1
    • test
    • ${label}
    • 2.8.0
    • 2.7.0
  • Comments
  • Contributors
Sending Request…

YUI 2.x Source Tree — Read more

  Cancel

http://developer.yahoo.com/yui/

  Cancel
  • HTTP
  • Git Read-Only

This URL has Read+Write access

Rearranged internal testsuite handling
nzakas (author)
Thu Nov 19 12:17:48 -0800 2009
commit  20e996b6ca880ea48f81
tree    b5263587bd6f3b957148
parent  6aa497fcf567f7fc69e6
M build/yuitest/yuitest-debug.js 12 ••••
M build/yuitest/yuitest-min.js 8 ••••
M build/yuitest/yuitest.js 12 ••••
M build/yuitest/yuitest_core-debug.js 12 ••••
M build/yuitest/yuitest_core-min.js 4 ••••
M build/yuitest/yuitest_core.js 12 ••••
M src/yuitest/README 7 ••••
M src/yuitest/js/TestRunner.js 12 ••••
Txt build/yuitest/yuitest-debug.js
  • View file @ 20e996b
... ...
@@ -997,8 +997,7 @@ YAHOO.tool.TestRunner = (function(){
997 997
          * @static
998 998
          */
999 999
         clear : function () /*:Void*/ {
1000  
-            this.masterSuite.items = [];
1001  
-            this.masterSuite.name = "yuitests" + (new Date()).getTime();
  1000
+            this.masterSuite = new YAHOO.tool.TestSuite("yuitests" + (new Date()).getTime());
1002 1001
         },
1003 1002
         
1004 1003
         /**
... ...
@@ -1015,14 +1014,21 @@ YAHOO.tool.TestRunner = (function(){
1015 1014
     
1016 1015
         /**
1017 1016
          * Runs the test suite.
  1017
+         * @param {Boolean} oldMode (Optional) Specifies that the <= 2.8 way of
  1018
+         *      internally managing test suites should be used.
1018 1019
          * @return {Void}
1019 1020
          * @method run
1020 1021
          * @static
1021 1022
          */
1022  
-        run : function (testObject /*:Object*/) /*:Void*/ {
  1023
+        run : function (oldMode) {
1023 1024
             
1024 1025
             //pointer to runner to avoid scope issues 
1025 1026
             var runner = YAHOO.tool.TestRunner;
  1027
+            
  1028
+            //if there's only one suite on the masterSuite, move it up
  1029
+            if (!oldMode && this.masterSuite.items.length == 1 && this.masterSuite.items[0] instanceof YAHOO.tool.TestSuite){
  1030
+                this.masterSuite = this.masterSuite.items[0];
  1031
+            }
1026 1032
 
1027 1033
             //build the test tree
1028 1034
             runner._buildTestTree();
Txt build/yuitest/yuitest-min.js
  • View file @ 20e996b
... ...
@@ -1,5 +1,5 @@
1 1
 YAHOO.namespace("tool");(function(){var A=0;YAHOO.tool.TestCase=function(B){this._should={};for(var C in B){this[C]=B[C];}if(!YAHOO.lang.isString(this.name)){this.name="testCase"+(A++);}};YAHOO.tool.TestCase.prototype={resume:function(B){YAHOO.tool.TestRunner.resume(B);},wait:function(D,C){var B=arguments;if(YAHOO.lang.isFunction(B[0])){throw new YAHOO.tool.TestCase.Wait(B[0],B[1]);}else{throw new YAHOO.tool.TestCase.Wait(function(){YAHOO.util.Assert.fail("Timeout: wait() called but resume() never called.");},(YAHOO.lang.isNumber(B[0])?B[0]:10000));}},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(C,B){this.segment=(YAHOO.lang.isFunction(C)?C:null);this.delay=(YAHOO.lang.isNumber(B)?B:0);};})();YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0,duration:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("yuitests"+(new Date()).getTime());this._cur=null;this._root=null;this._running=false;this._lastResults=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST_CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUITE_COMPLETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",getName:function(){return this.masterSuite.name;},setName:function(C){this.masterSuite.name=C;},isRunning:function(){return this._running;},getResults:function(C){if(!this._running&&this._lastResults){if(YAHOO.lang.isFunction(C)){return C(this._lastResults);}else{return this._lastResults;}}else{return null;}},getCoverage:function(C){if(!this._running&&typeof _yuitest_coverage=="object"){if(YAHOO.lang.isFunction(C)){return C(_yuitest_coverage);}else{return _yuitest_coverage;}}else{return null;}},getName:function(){return this.masterSuite.name;},setName:function(C){this.masterSuite.name=C;},_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();C.results.duration=(new Date())-C._start;this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){C.results.duration=(new Date())-C._start;this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.firstChild){this._cur=this._cur.firstChild;}else{if(this._cur.next){this._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this._cur.results.duration=(new Date())-this._cur._start;this._lastResults=this._cur.results;this._running=false;this.fireEvent(this.COMPLETE_EVENT,{results:this._lastResults});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){this._running=true;this._lastResult=null;var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});D._start=new Date();C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});D._start=new Date();}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(H){var C=this._cur;var I=C.testObject;var F=C.parent.testObject;
2  
-if(F.__yui_wait){clearTimeout(F.__yui_wait);delete F.__yui_wait;}var L=(F._should.fail||{})[I];var D=(F._should.error||{})[I];var G=false;var J=null;try{H.apply(F);if(L){J=new YAHOO.util.ShouldFail();G=true;}else{if(D){J=new YAHOO.util.ShouldError();G=true;}}}catch(K){if(K instanceof YAHOO.util.AssertionError){if(!L){J=K;G=true;}}else{if(K instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(K.segment)){if(YAHOO.lang.isNumber(K.delay)){if(typeof setTimeout!="undefined"){F.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(K.segment);},K.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return;}else{if(!D){J=new YAHOO.util.UnexpectedError(K);G=true;}else{if(YAHOO.lang.isString(D)){if(K.message!=D){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(K instanceof D)){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isObject(D)){if(!(K instanceof D.constructor)||K.message!=D.message){J=new YAHOO.util.UnexpectedError(K);G=true;}}}}}}}}if(G){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:F,testName:I,error:J});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:F,testName:I});}F.tearDown();var E=(new Date())-C._start;C.parent.results[I]={result:G?"fail":"pass",message:J?J.getMessage():"Test passed",type:"test",name:I,duration:E};if(G){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{F._start=new Date();D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];this.masterSuite.name="yuitests"+(new Date()).getTime();},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D._root._start=new Date();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be equal."),A);}},areNotSame:function(A,C,B){if(A===C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(B,C,A){if(typeof C!=B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be of type "+B+"."),B,typeof C);}}};YAHOO.util.AssertionError=function(A){this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Object,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();}});YAHOO.util.ComparisonFailure=function(B,A,C){YAHOO.util.AssertionError.call(this,B);this.expected=A;this.actual=C;this.name="ComparisonFailure";
3  
-};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")"+"\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){YAHOO.util.AssertionError.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){YAHOO.util.AssertionError.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){YAHOO.util.AssertionError.call(this,A||"This test should have thrown an error but didn't.");this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){YAHOO.util.AssertionError.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContain:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not equal."));}},itemsAreEquivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length||0);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));return;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of month should be equal."));}else{throw new TypeError("DateAssert.datesAreEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.namespace("tool");YAHOO.tool.TestManager={TEST_PAGE_BEGIN_EVENT:"testpagebegin",TEST_PAGE_COMPLETE_EVENT:"testpagecomplete",TEST_MANAGER_BEGIN_EVENT:"testmanagerbegin",TEST_MANAGER_COMPLETE_EVENT:"testmanagercomplete",_curPage:null,_frame:null,_logger:null,_timeoutId:0,_pages:[],_results:null,_handleTestRunnerComplete:function(A){this.fireEvent(this.TEST_PAGE_COMPLETE_EVENT,{page:this._curPage,results:A.results});this._processResults(this._curPage,A.results);this._logger.clearTestRunner();if(this._pages.length){this._timeoutId=setTimeout(function(){YAHOO.tool.TestManager._run();
4  
-},1000);}else{this.fireEvent(this.TEST_MANAGER_COMPLETE_EVENT,this._results);}},_processResults:function(C,A){var B=this._results;B.passed+=A.passed;B.failed+=A.failed;B.ignored+=A.ignored;B.total+=A.total;B.duration+=A.duration;if(A.failed){B.failedPages.push(C);}else{B.passedPages.push(C);}A.name=C;A.type="page";B[C]=A;},_run:function(){this._curPage=this._pages.shift();this.fireEvent(this.TEST_PAGE_BEGIN_EVENT,this._curPage);this._frame.location.replace(this._curPage);},load:function(){if(parent.YAHOO.tool.TestManager!==this){parent.YAHOO.tool.TestManager.load();}else{if(this._frame){var A=this._frame.YAHOO.tool.TestRunner;this._logger.setTestRunner(A);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerComplete,this,true);A.run();}}},setPages:function(A){this._pages=A;},start:function(){if(!this._initialized){this.createEvent(this.TEST_PAGE_BEGIN_EVENT);this.createEvent(this.TEST_PAGE_COMPLETE_EVENT);this.createEvent(this.TEST_MANAGER_BEGIN_EVENT);this.createEvent(this.TEST_MANAGER_COMPLETE_EVENT);if(!this._frame){var A=document.createElement("iframe");A.style.visibility="hidden";A.style.position="absolute";document.body.appendChild(A);this._frame=A.contentWindow||A.contentDocument.parentWindow;}if(!this._logger){this._logger=new YAHOO.tool.TestLogger();}this._initialized=true;}this._results={passed:0,failed:0,ignored:0,total:0,type:"report",name:"YUI Test Results",duration:0,failedPages:[],passedPages:[]};this.fireEvent(this.TEST_MANAGER_BEGIN_EVENT,null);this._run();},stop:function(){clearTimeout(this._timeoutId);}};YAHOO.lang.augmentObject(YAHOO.tool.TestManager,YAHOO.util.EventProvider.prototype);YAHOO.namespace("tool");YAHOO.tool.TestLogger=function(B,A){YAHOO.tool.TestLogger.superclass.constructor.call(this,B,A);this.init();};YAHOO.lang.extend(YAHOO.tool.TestLogger,YAHOO.widget.LogReader,{footerEnabled:true,newestOnTop:false,formatMsg:function(B){var A=B.category;var C=this.html2Text(B.msg);return'<pre><p><span class="'+A+'">'+A.toUpperCase()+"</span> "+C+"</p></pre>";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);}this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(A){if(this._runner){this.clearTestRunner();}this._runner=A;A.subscribe(A.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(D){var A=YAHOO.tool.TestRunner;var C="";var B="";switch(D.type){case A.BEGIN_EVENT:C="Testing began at "+(new Date()).toString()+".";B="info";break;case A.COMPLETE_EVENT:C="Testing completed at "+(new Date()).toString()+".\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_FAIL_EVENT:C=D.testName+": "+D.error.getMessage();B="fail";break;case A.TEST_IGNORE_EVENT:C=D.testName+": ignored.";B="ignore";break;case A.TEST_PASS_EVENT:C=D.testName+": passed.";B="pass";break;case A.TEST_SUITE_BEGIN_EVENT:C='Test suite "'+D.testSuite.name+'" started.';B="info";break;case A.TEST_SUITE_COMPLETE_EVENT:C='Test suite "'+D.testSuite.name+'" completed.\nPassed:'+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_CASE_BEGIN_EVENT:C='Test case "'+D.testCase.name+'" started.';B="info";break;case A.TEST_CASE_COMPLETE_EVENT:C='Test case "'+D.testCase.name+'" completed.\nPassed:'+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;default:C="Unexpected event "+D.type;C="info";}YAHOO.log(C,B,"TestRunner");}});YAHOO.namespace("tool.TestFormat");(function(){YAHOO.tool.TestFormat.JSON=function(B){return YAHOO.lang.JSON.stringify(B);};function A(B){return B.replace(/["'<>&]/g,function(C){switch(C){case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"'":return"&apos;";case"&":return"&amp;";}});}YAHOO.tool.TestFormat.XML=function(C){function B(F){var D=YAHOO.lang,E="<"+F.type+' name="'+A(F.name)+'"';if(D.isNumber(F.duration)){E+=' duration="'+F.duration+'"';}if(F.type=="test"){E+=' result="'+F.result+'" message="'+A(F.message)+'">';}else{E+=' passed="'+F.passed+'" failed="'+F.failed+'" ignored="'+F.ignored+'" total="'+F.total+'">';for(var G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=B(F[G]);}}}E+="</"+F.type+">";return E;}return'<?xml version="1.0" encoding="UTF-8"?>'+B(C);};YAHOO.tool.TestFormat.JUnitXML=function(B){function C(F){var D=YAHOO.lang,E="",G;switch(F.type){case"test":if(F.result!="ignore"){E='<testcase name="'+A(F.name)+'">';if(F.result=="fail"){E+='<failure message="'+A(F.message)+'"><![CDATA['+F.message+"]]></failure>";}E+="</testcase>";}break;case"testcase":E='<testsuite name="'+A(F.name)+'" tests="'+F.total+'" failures="'+F.failed+'">';for(G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=C(F[G]);}}E+="</testsuite>";break;case"testsuite":for(G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=C(F[G]);}}break;case"report":E="<testsuites>";for(G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=C(F[G]);}}E+="</testsuites>";}return E;}return'<?xml version="1.0" encoding="UTF-8"?>'+C(B);};YAHOO.tool.TestFormat.TAP=function(C){var D=1;function B(F){var E=YAHOO.lang,G="";switch(F.type){case"test":if(F.result!="ignore"){G="ok "+(D++)+" - "+F.name;
5  
-if(F.result=="fail"){G="not "+G+" - "+F.message;}G+="\n";}else{G="#Ignored test "+F.name+"\n";}break;case"testcase":G="#Begin testcase "+F.name+"("+F.failed+" failed of "+F.total+")\n";for(prop in F){if(E.hasOwnProperty(F,prop)&&E.isObject(F[prop])&&!E.isArray(F[prop])){G+=B(F[prop]);}}G+="#End testcase "+F.name+"\n";break;case"testsuite":G="#Begin testsuite "+F.name+"("+F.failed+" failed of "+F.total+")\n";for(prop in F){if(E.hasOwnProperty(F,prop)&&E.isObject(F[prop])&&!E.isArray(F[prop])){G+=B(F[prop]);}}G+="#End testsuite "+F.name+"\n";break;case"report":for(prop in F){if(E.hasOwnProperty(F,prop)&&E.isObject(F[prop])&&!E.isArray(F[prop])){G+=B(F[prop]);}}}return G;}return"1.."+C.total+"\n"+B(C);};})();YAHOO.namespace("tool.CoverageFormat");YAHOO.tool.CoverageFormat.JSON=function(A){return YAHOO.lang.JSON.stringify(A);};YAHOO.tool.CoverageFormat.XdebugJSON=function(B){var A={},C;for(C in B){if(B.hasOwnProperty(C)){A[C]=B[C].lines;}}return YAHOO.lang.JSON.stringify(A);};YAHOO.namespace("tool");YAHOO.tool.TestReporter=function(A,B){this.url=A;this.format=B||YAHOO.tool.TestFormat.XML;this._fields=new Object();this._form=null;this._iframe=null;};YAHOO.tool.TestReporter.prototype={constructor:YAHOO.tool.TestReporter,_convertToISOString:function(A){function B(C){return C<10?"0"+C:C;}return A.getUTCFullYear()+"-"+B(A.getUTCMonth()+1)+"-"+B(A.getUTCDate())+"T"+B(A.getUTCHours())+":"+B(A.getUTCMinutes())+":"+B(A.getUTCSeconds())+"Z";},addField:function(A,B){this._fields[A]=B;},clearFields:function(){this._fields=new Object();},destroy:function(){if(this._form){this._form.parentNode.removeChild(this._form);this._form=null;}if(this._iframe){this._iframe.parentNode.removeChild(this._iframe);this._iframe=null;}this._fields=null;},report:function(A){if(!this._form){this._form=document.createElement("form");this._form.method="post";this._form.style.visibility="hidden";this._form.style.position="absolute";this._form.style.top=0;document.body.appendChild(this._form);if(YAHOO.env.ua.ie){this._iframe=document.createElement('<iframe name="yuiTestTarget" />');}else{this._iframe=document.createElement("iframe");this._iframe.name="yuiTestTarget";}this._iframe.src="javascript:false";this._iframe.style.visibility="hidden";this._iframe.style.position="absolute";this._iframe.style.top=0;document.body.appendChild(this._iframe);this._form.target="yuiTestTarget";}this._form.action=this.url;while(this._form.hasChildNodes()){this._form.removeChild(this._form.lastChild);}this._fields.results=this.format(A);this._fields.useragent=navigator.userAgent;this._fields.timestamp=this._convertToISOString(new Date());for(var B in this._fields){if(YAHOO.lang.hasOwnProperty(this._fields,B)&&typeof this._fields[B]!="function"){if(YAHOO.env.ua.ie){input=document.createElement('<input name="'+B+'" >');}else{input=document.createElement("input");input.name=B;}input.type="hidden";input.value=this._fields[B];this._form.appendChild(input);}}delete this._fields.results;delete this._fields.useragent;delete this._fields.timestamp;if(arguments[1]!==false){this._form.submit();}}};YUITest={Runner:YAHOO.tool.TestRunner,ResultsFormat:YAHOO.tool.TestFormat,CoverageFormat:YAHOO.tool.CoverageFormat};YAHOO.register("yuitest",YAHOO.tool.TestRunner,{version:"@VERSION@",build:"@BUILD@"});
6 2
\ No newline at end of file
  3
+if(F.__yui_wait){clearTimeout(F.__yui_wait);delete F.__yui_wait;}var L=(F._should.fail||{})[I];var D=(F._should.error||{})[I];var G=false;var J=null;try{H.apply(F);if(L){J=new YAHOO.util.ShouldFail();G=true;}else{if(D){J=new YAHOO.util.ShouldError();G=true;}}}catch(K){if(K instanceof YAHOO.util.AssertionError){if(!L){J=K;G=true;}}else{if(K instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(K.segment)){if(YAHOO.lang.isNumber(K.delay)){if(typeof setTimeout!="undefined"){F.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(K.segment);},K.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return;}else{if(!D){J=new YAHOO.util.UnexpectedError(K);G=true;}else{if(YAHOO.lang.isString(D)){if(K.message!=D){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(K instanceof D)){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isObject(D)){if(!(K instanceof D.constructor)||K.message!=D.message){J=new YAHOO.util.UnexpectedError(K);G=true;}}}}}}}}if(G){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:F,testName:I,error:J});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:F,testName:I});}F.tearDown();var E=(new Date())-C._start;C.parent.results[I]={result:G?"fail":"pass",message:J?J.getMessage():"Test passed",type:"test",name:I,duration:E};if(G){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{F._start=new Date();D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite=new YAHOO.tool.TestSuite("yuitests"+(new Date()).getTime());},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;if(!C&&this.masterSuite.items.length==1&&this.masterSuite.items[0] instanceof YAHOO.tool.TestSuite){this.masterSuite=this.masterSuite.items[0];}D._buildTestTree();D._root._start=new Date();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be equal."),A);}},areNotSame:function(A,C,B){if(A===C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(B,C,A){if(typeof C!=B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be of type "+B+"."),B,typeof C);}}};YAHOO.util.AssertionError=function(A){this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Object,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();}});YAHOO.util.ComparisonFailure=function(B,A,C){YAHOO.util.AssertionError.call(this,B);
  4
+this.expected=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")"+"\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){YAHOO.util.AssertionError.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){YAHOO.util.AssertionError.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){YAHOO.util.AssertionError.call(this,A||"This test should have thrown an error but didn't.");this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){YAHOO.util.AssertionError.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContain:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not equal."));}},itemsAreEquivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length||0);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));return;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of month should be equal."));}else{throw new TypeError("DateAssert.datesAreEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.namespace("tool");YAHOO.tool.TestManager={TEST_PAGE_BEGIN_EVENT:"testpagebegin",TEST_PAGE_COMPLETE_EVENT:"testpagecomplete",TEST_MANAGER_BEGIN_EVENT:"testmanagerbegin",TEST_MANAGER_COMPLETE_EVENT:"testmanagercomplete",_curPage:null,_frame:null,_logger:null,_timeoutId:0,_pages:[],_results:null,_handleTestRunnerComplete:function(A){this.fireEvent(this.TEST_PAGE_COMPLETE_EVENT,{page:this._curPage,results:A.results});this._processResults(this._curPage,A.results);
  5
+this._logger.clearTestRunner();if(this._pages.length){this._timeoutId=setTimeout(function(){YAHOO.tool.TestManager._run();},1000);}else{this.fireEvent(this.TEST_MANAGER_COMPLETE_EVENT,this._results);}},_processResults:function(C,A){var B=this._results;B.passed+=A.passed;B.failed+=A.failed;B.ignored+=A.ignored;B.total+=A.total;B.duration+=A.duration;if(A.failed){B.failedPages.push(C);}else{B.passedPages.push(C);}A.name=C;A.type="page";B[C]=A;},_run:function(){this._curPage=this._pages.shift();this.fireEvent(this.TEST_PAGE_BEGIN_EVENT,this._curPage);this._frame.location.replace(this._curPage);},load:function(){if(parent.YAHOO.tool.TestManager!==this){parent.YAHOO.tool.TestManager.load();}else{if(this._frame){var A=this._frame.YAHOO.tool.TestRunner;this._logger.setTestRunner(A);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerComplete,this,true);A.run();}}},setPages:function(A){this._pages=A;},start:function(){if(!this._initialized){this.createEvent(this.TEST_PAGE_BEGIN_EVENT);this.createEvent(this.TEST_PAGE_COMPLETE_EVENT);this.createEvent(this.TEST_MANAGER_BEGIN_EVENT);this.createEvent(this.TEST_MANAGER_COMPLETE_EVENT);if(!this._frame){var A=document.createElement("iframe");A.style.visibility="hidden";A.style.position="absolute";document.body.appendChild(A);this._frame=A.contentWindow||A.contentDocument.parentWindow;}if(!this._logger){this._logger=new YAHOO.tool.TestLogger();}this._initialized=true;}this._results={passed:0,failed:0,ignored:0,total:0,type:"report",name:"YUI Test Results",duration:0,failedPages:[],passedPages:[]};this.fireEvent(this.TEST_MANAGER_BEGIN_EVENT,null);this._run();},stop:function(){clearTimeout(this._timeoutId);}};YAHOO.lang.augmentObject(YAHOO.tool.TestManager,YAHOO.util.EventProvider.prototype);YAHOO.namespace("tool");YAHOO.tool.TestLogger=function(B,A){YAHOO.tool.TestLogger.superclass.constructor.call(this,B,A);this.init();};YAHOO.lang.extend(YAHOO.tool.TestLogger,YAHOO.widget.LogReader,{footerEnabled:true,newestOnTop:false,formatMsg:function(B){var A=B.category;var C=this.html2Text(B.msg);return'<pre><p><span class="'+A+'">'+A.toUpperCase()+"</span> "+C+"</p></pre>";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);}this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(A){if(this._runner){this.clearTestRunner();}this._runner=A;A.subscribe(A.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(D){var A=YAHOO.tool.TestRunner;var C="";var B="";switch(D.type){case A.BEGIN_EVENT:C="Testing began at "+(new Date()).toString()+".";B="info";break;case A.COMPLETE_EVENT:C="Testing completed at "+(new Date()).toString()+".\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_FAIL_EVENT:C=D.testName+": "+D.error.getMessage();B="fail";break;case A.TEST_IGNORE_EVENT:C=D.testName+": ignored.";B="ignore";break;case A.TEST_PASS_EVENT:C=D.testName+": passed.";B="pass";break;case A.TEST_SUITE_BEGIN_EVENT:C='Test suite "'+D.testSuite.name+'" started.';B="info";break;case A.TEST_SUITE_COMPLETE_EVENT:C='Test suite "'+D.testSuite.name+'" completed.\nPassed:'+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_CASE_BEGIN_EVENT:C='Test case "'+D.testCase.name+'" started.';B="info";break;case A.TEST_CASE_COMPLETE_EVENT:C='Test case "'+D.testCase.name+'" completed.\nPassed:'+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;default:C="Unexpected event "+D.type;C="info";}YAHOO.log(C,B,"TestRunner");}});YAHOO.namespace("tool.TestFormat");(function(){YAHOO.tool.TestFormat.JSON=function(B){return YAHOO.lang.JSON.stringify(B);};function A(B){return B.replace(/["'<>&]/g,function(C){switch(C){case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"'":return"&apos;";case"&":return"&amp;";}});}YAHOO.tool.TestFormat.XML=function(C){function B(F){var D=YAHOO.lang,E="<"+F.type+' name="'+A(F.name)+'"';if(D.isNumber(F.duration)){E+=' duration="'+F.duration+'"';}if(F.type=="test"){E+=' result="'+F.result+'" message="'+A(F.message)+'">';}else{E+=' passed="'+F.passed+'" failed="'+F.failed+'" ignored="'+F.ignored+'" total="'+F.total+'">';for(var G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=B(F[G]);}}}E+="</"+F.type+">";return E;}return'<?xml version="1.0" encoding="UTF-8"?>'+B(C);};YAHOO.tool.TestFormat.JUnitXML=function(B){function C(F){var D=YAHOO.lang,E="",G;switch(F.type){case"test":if(F.result!="ignore"){E='<testcase name="'+A(F.name)+'">';if(F.result=="fail"){E+='<failure message="'+A(F.message)+'"><![CDATA['+F.message+"]]></failure>";}E+="</testcase>";}break;case"testcase":E='<testsuite name="'+A(F.name)+'" tests="'+F.total+'" failures="'+F.failed+'">';for(G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=C(F[G]);}}E+="</testsuite>";break;case"testsuite":for(G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=C(F[G]);}}break;case"report":E="<testsuites>";for(G in F){if(D.hasOwnProperty(F,G)&&D.isObject(F[G])&&!D.isArray(F[G])){E+=C(F[G]);}}E+="</testsuites>";}return E;}return'<?xml version="1.0" encoding="UTF-8"?>'+C(B);
  6
+};YAHOO.tool.TestFormat.TAP=function(C){var D=1;function B(F){var E=YAHOO.lang,G="";switch(F.type){case"test":if(F.result!="ignore"){G="ok "+(D++)+" - "+F.name;if(F.result=="fail"){G="not "+G+" - "+F.message;}G+="\n";}else{G="#Ignored test "+F.name+"\n";}break;case"testcase":G="#Begin testcase "+F.name+"("+F.failed+" failed of "+F.total+")\n";for(prop in F){if(E.hasOwnProperty(F,prop)&&E.isObject(F[prop])&&!E.isArray(F[prop])){G+=B(F[prop]);}}G+="#End testcase "+F.name+"\n";break;case"testsuite":G="#Begin testsuite "+F.name+"("+F.failed+" failed of "+F.total+")\n";for(prop in F){if(E.hasOwnProperty(F,prop)&&E.isObject(F[prop])&&!E.isArray(F[prop])){G+=B(F[prop]);}}G+="#End testsuite "+F.name+"\n";break;case"report":for(prop in F){if(E.hasOwnProperty(F,prop)&&E.isObject(F[prop])&&!E.isArray(F[prop])){G+=B(F[prop]);}}}return G;}return"1.."+C.total+"\n"+B(C);};})();YAHOO.namespace("tool.CoverageFormat");YAHOO.tool.CoverageFormat.JSON=function(A){return YAHOO.lang.JSON.stringify(A);};YAHOO.tool.CoverageFormat.XdebugJSON=function(B){var A={},C;for(C in B){if(B.hasOwnProperty(C)){A[C]=B[C].lines;}}return YAHOO.lang.JSON.stringify(A);};YAHOO.namespace("tool");YAHOO.tool.TestReporter=function(A,B){this.url=A;this.format=B||YAHOO.tool.TestFormat.XML;this._fields=new Object();this._form=null;this._iframe=null;};YAHOO.tool.TestReporter.prototype={constructor:YAHOO.tool.TestReporter,_convertToISOString:function(A){function B(C){return C<10?"0"+C:C;}return A.getUTCFullYear()+"-"+B(A.getUTCMonth()+1)+"-"+B(A.getUTCDate())+"T"+B(A.getUTCHours())+":"+B(A.getUTCMinutes())+":"+B(A.getUTCSeconds())+"Z";},addField:function(A,B){this._fields[A]=B;},clearFields:function(){this._fields=new Object();},destroy:function(){if(this._form){this._form.parentNode.removeChild(this._form);this._form=null;}if(this._iframe){this._iframe.parentNode.removeChild(this._iframe);this._iframe=null;}this._fields=null;},report:function(A){if(!this._form){this._form=document.createElement("form");this._form.method="post";this._form.style.visibility="hidden";this._form.style.position="absolute";this._form.style.top=0;document.body.appendChild(this._form);if(YAHOO.env.ua.ie){this._iframe=document.createElement('<iframe name="yuiTestTarget" />');}else{this._iframe=document.createElement("iframe");this._iframe.name="yuiTestTarget";}this._iframe.src="javascript:false";this._iframe.style.visibility="hidden";this._iframe.style.position="absolute";this._iframe.style.top=0;document.body.appendChild(this._iframe);this._form.target="yuiTestTarget";}this._form.action=this.url;while(this._form.hasChildNodes()){this._form.removeChild(this._form.lastChild);}this._fields.results=this.format(A);this._fields.useragent=navigator.userAgent;this._fields.timestamp=this._convertToISOString(new Date());for(var B in this._fields){if(YAHOO.lang.hasOwnProperty(this._fields,B)&&typeof this._fields[B]!="function"){if(YAHOO.env.ua.ie){input=document.createElement('<input name="'+B+'" >');}else{input=document.createElement("input");input.name=B;}input.type="hidden";input.value=this._fields[B];this._form.appendChild(input);}}delete this._fields.results;delete this._fields.useragent;delete this._fields.timestamp;if(arguments[1]!==false){this._form.submit();}}};YUITest={Runner:YAHOO.tool.TestRunner,ResultsFormat:YAHOO.tool.TestFormat,CoverageFormat:YAHOO.tool.CoverageFormat};YAHOO.register("yuitest",YAHOO.tool.TestRunner,{version:"@VERSION@",build:"@BUILD@"});
7 7
\ No newline at end of file
Txt build/yuitest/yuitest.js
  • View file @ 20e996b
... ...
@@ -997,8 +997,7 @@ YAHOO.tool.TestRunner = (function(){
997 997
          * @static
998 998
          */
999 999
         clear : function () /*:Void*/ {
1000  
-            this.masterSuite.items = [];
1001  
-            this.masterSuite.name = "yuitests" + (new Date()).getTime();
  1000
+            this.masterSuite = new YAHOO.tool.TestSuite("yuitests" + (new Date()).getTime());
1002 1001
         },
1003 1002
         
1004 1003
         /**
... ...
@@ -1015,14 +1014,21 @@ YAHOO.tool.TestRunner = (function(){
1015 1014
     
1016 1015
         /**
1017 1016
          * Runs the test suite.
  1017
+         * @param {Boolean} oldMode (Optional) Specifies that the <= 2.8 way of
  1018
+         *      internally managing test suites should be used.
1018 1019
          * @return {Void}
1019 1020
          * @method run
1020 1021
          * @static
1021 1022
          */
1022  
-        run : function (testObject /*:Object*/) /*:Void*/ {
  1023
+        run : function (oldMode) {
1023 1024
             
1024 1025
             //pointer to runner to avoid scope issues 
1025 1026
             var runner = YAHOO.tool.TestRunner;
  1027
+            
  1028
+            //if there's only one suite on the masterSuite, move it up
  1029
+            if (!oldMode && this.masterSuite.items.length == 1 && this.masterSuite.items[0] instanceof YAHOO.tool.TestSuite){
  1030
+                this.masterSuite = this.masterSuite.items[0];
  1031
+            }
1026 1032
 
1027 1033
             //build the test tree
1028 1034
             runner._buildTestTree();
Txt build/yuitest/yuitest_core-debug.js
  • View file @ 20e996b
... ...
@@ -997,8 +997,7 @@ YAHOO.tool.TestRunner = (function(){
997 997
          * @static
998 998
          */
999 999
         clear : function () /*:Void*/ {
1000  
-            this.masterSuite.items = [];
1001  
-            this.masterSuite.name = "yuitests" + (new Date()).getTime();
  1000
+            this.masterSuite = new YAHOO.tool.TestSuite("yuitests" + (new Date()).getTime());
1002 1001
         },
1003 1002
         
1004 1003
         /**
... ...
@@ -1015,14 +1014,21 @@ YAHOO.tool.TestRunner = (function(){
1015 1014
     
1016 1015
         /**
1017 1016
          * Runs the test suite.
  1017
+         * @param {Boolean} oldMode (Optional) Specifies that the <= 2.8 way of
  1018
+         *      internally managing test suites should be used.
1018 1019
          * @return {Void}
1019 1020
          * @method run
1020 1021
          * @static
1021 1022
          */
1022  
-        run : function (testObject /*:Object*/) /*:Void*/ {
  1023
+        run : function (oldMode) {
1023 1024
             
1024 1025
             //pointer to runner to avoid scope issues 
1025 1026
             var runner = YAHOO.tool.TestRunner;
  1027
+            
  1028
+            //if there's only one suite on the masterSuite, move it up
  1029
+            if (!oldMode && this.masterSuite.items.length == 1 && this.masterSuite.items[0] instanceof YAHOO.tool.TestSuite){
  1030
+                this.masterSuite = this.masterSuite.items[0];
  1031
+            }
1026 1032
 
1027 1033
             //build the test tree
1028 1034
             runner._buildTestTree();
Txt build/yuitest/yuitest_core-min.js
  • View file @ 20e996b
... ...
@@ -1,3 +1,3 @@
1 1
 YAHOO.namespace("tool");(function(){var A=0;YAHOO.tool.TestCase=function(B){this._should={};for(var C in B){this[C]=B[C];}if(!YAHOO.lang.isString(this.name)){this.name="testCase"+(A++);}};YAHOO.tool.TestCase.prototype={resume:function(B){YAHOO.tool.TestRunner.resume(B);},wait:function(D,C){var B=arguments;if(YAHOO.lang.isFunction(B[0])){throw new YAHOO.tool.TestCase.Wait(B[0],B[1]);}else{throw new YAHOO.tool.TestCase.Wait(function(){YAHOO.util.Assert.fail("Timeout: wait() called but resume() never called.");},(YAHOO.lang.isNumber(B[0])?B[0]:10000));}},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(C,B){this.segment=(YAHOO.lang.isFunction(C)?C:null);this.delay=(YAHOO.lang.isNumber(B)?B:0);};})();YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0,duration:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("yuitests"+(new Date()).getTime());this._cur=null;this._root=null;this._running=false;this._lastResults=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST_CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUITE_COMPLETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",getName:function(){return this.masterSuite.name;},setName:function(C){this.masterSuite.name=C;},isRunning:function(){return this._running;},getResults:function(C){if(!this._running&&this._lastResults){if(YAHOO.lang.isFunction(C)){return C(this._lastResults);}else{return this._lastResults;}}else{return null;}},getCoverage:function(C){if(!this._running&&typeof _yuitest_coverage=="object"){if(YAHOO.lang.isFunction(C)){return C(_yuitest_coverage);}else{return _yuitest_coverage;}}else{return null;}},getName:function(){return this.masterSuite.name;},setName:function(C){this.masterSuite.name=C;},_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();C.results.duration=(new Date())-C._start;this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){C.results.duration=(new Date())-C._start;this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.firstChild){this._cur=this._cur.firstChild;}else{if(this._cur.next){this._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this._cur.results.duration=(new Date())-this._cur._start;this._lastResults=this._cur.results;this._running=false;this.fireEvent(this.COMPLETE_EVENT,{results:this._lastResults});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){this._running=true;this._lastResult=null;var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});D._start=new Date();C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});D._start=new Date();}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(H){var C=this._cur;var I=C.testObject;var F=C.parent.testObject;
2  
-if(F.__yui_wait){clearTimeout(F.__yui_wait);delete F.__yui_wait;}var L=(F._should.fail||{})[I];var D=(F._should.error||{})[I];var G=false;var J=null;try{H.apply(F);if(L){J=new YAHOO.util.ShouldFail();G=true;}else{if(D){J=new YAHOO.util.ShouldError();G=true;}}}catch(K){if(K instanceof YAHOO.util.AssertionError){if(!L){J=K;G=true;}}else{if(K instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(K.segment)){if(YAHOO.lang.isNumber(K.delay)){if(typeof setTimeout!="undefined"){F.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(K.segment);},K.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return;}else{if(!D){J=new YAHOO.util.UnexpectedError(K);G=true;}else{if(YAHOO.lang.isString(D)){if(K.message!=D){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(K instanceof D)){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isObject(D)){if(!(K instanceof D.constructor)||K.message!=D.message){J=new YAHOO.util.UnexpectedError(K);G=true;}}}}}}}}if(G){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:F,testName:I,error:J});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:F,testName:I});}F.tearDown();var E=(new Date())-C._start;C.parent.results[I]={result:G?"fail":"pass",message:J?J.getMessage():"Test passed",type:"test",name:I,duration:E};if(G){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{F._start=new Date();D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];this.masterSuite.name="yuitests"+(new Date()).getTime();},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D._root._start=new Date();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be equal."),A);}},areNotSame:function(A,C,B){if(A===C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(B,C,A){if(typeof C!=B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be of type "+B+"."),B,typeof C);}}};YAHOO.util.AssertionError=function(A){this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Object,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();}});YAHOO.util.ComparisonFailure=function(B,A,C){YAHOO.util.AssertionError.call(this,B);this.expected=A;this.actual=C;this.name="ComparisonFailure";
3  
-};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")"+"\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){YAHOO.util.AssertionError.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){YAHOO.util.AssertionError.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){YAHOO.util.AssertionError.call(this,A||"This test should have thrown an error but didn't.");this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){YAHOO.util.AssertionError.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContain:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not equal."));}},itemsAreEquivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length||0);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));return;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of month should be equal."));}else{throw new TypeError("DateAssert.datesAreEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.register("yuitest_core",YAHOO.tool.TestRunner,{version:"@VERSION@",build:"@BUILD@"});
4 2
\ No newline at end of file
  3
+if(F.__yui_wait){clearTimeout(F.__yui_wait);delete F.__yui_wait;}var L=(F._should.fail||{})[I];var D=(F._should.error||{})[I];var G=false;var J=null;try{H.apply(F);if(L){J=new YAHOO.util.ShouldFail();G=true;}else{if(D){J=new YAHOO.util.ShouldError();G=true;}}}catch(K){if(K instanceof YAHOO.util.AssertionError){if(!L){J=K;G=true;}}else{if(K instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(K.segment)){if(YAHOO.lang.isNumber(K.delay)){if(typeof setTimeout!="undefined"){F.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(K.segment);},K.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return;}else{if(!D){J=new YAHOO.util.UnexpectedError(K);G=true;}else{if(YAHOO.lang.isString(D)){if(K.message!=D){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(K instanceof D)){J=new YAHOO.util.UnexpectedError(K);G=true;}}else{if(YAHOO.lang.isObject(D)){if(!(K instanceof D.constructor)||K.message!=D.message){J=new YAHOO.util.UnexpectedError(K);G=true;}}}}}}}}if(G){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:F,testName:I,error:J});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:F,testName:I});}F.tearDown();var E=(new Date())-C._start;C.parent.results[I]={result:G?"fail":"pass",message:J?J.getMessage():"Test passed",type:"test",name:I,duration:E};if(G){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{F._start=new Date();D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite=new YAHOO.tool.TestSuite("yuitests"+(new Date()).getTime());},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;if(!C&&this.masterSuite.items.length==1&&this.masterSuite.items[0] instanceof YAHOO.tool.TestSuite){this.masterSuite=this.masterSuite.items[0];}D._buildTestTree();D._root._start=new Date();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be equal."),A);}},areNotSame:function(A,C,B){if(A===C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(B,C,A){if(typeof C!=B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be of type "+B+"."),B,typeof C);}}};YAHOO.util.AssertionError=function(A){this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Object,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();}});YAHOO.util.ComparisonFailure=function(B,A,C){YAHOO.util.AssertionError.call(this,B);
  4
+this.expected=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")"+"\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){YAHOO.util.AssertionError.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){YAHOO.util.AssertionError.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){YAHOO.util.AssertionError.call(this,A||"This test should have thrown an error but didn't.");this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){YAHOO.util.AssertionError.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContain:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not equal."));}},itemsAreEquivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length||0);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length||0);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));return;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of month should be equal."));}else{throw new TypeError("DateAssert.datesAreEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.register("yuitest_core",YAHOO.tool.TestRunner,{version:"@VERSION@",build:"@BUILD@"});
5 5
\ No newline at end of file
Txt build/yuitest/yuitest_core.js
  • View file @ 20e996b
... ...
@@ -997,8 +997,7 @@ YAHOO.tool.TestRunner = (function(){
997 997
          * @static
998 998
          */
999 999
         clear : function () /*:Void*/ {
1000  
-            this.masterSuite.items = [];
1001  
-            this.masterSuite.name = "yuitests" + (new Date()).getTime();
  1000
+            this.masterSuite = new YAHOO.tool.TestSuite("yuitests" + (new Date()).getTime());
1002 1001
         },
1003 1002
         
1004 1003
         /**
... ...
@@ -1015,14 +1014,21 @@ YAHOO.tool.TestRunner = (function(){
1015 1014
     
1016 1015
         /**
1017 1016
          * Runs the test suite.
  1017
+         * @param {Boolean} oldMode (Optional) Specifies that the <= 2.8 way of
  1018
+         *      internally managing test suites should be used.
1018 1019
          * @return {Void}
1019 1020
          * @method run
1020 1021
          * @static
1021 1022
          */
1022  
-        run : function (testObject /*:Object*/) /*:Void*/ {
  1023
+        run : function (oldMode) {
1023 1024
             
1024 1025
             //pointer to runner to avoid scope issues 
1025 1026
             var runner = YAHOO.tool.TestRunner;
  1027
+            
  1028
+            //if there's only one suite on the masterSuite, move it up
  1029
+            if (!oldMode && this.masterSuite.items.length == 1 && this.masterSuite.items[0] instanceof YAHOO.tool.TestSuite){
  1030
+                this.masterSuite = this.masterSuite.items[0];
  1031
+            }
1026 1032
 
1027 1033
             //build the test tree
1028 1034
             runner._buildTestTree();
Txt src/yuitest/README
  • View file @ 20e996b
... ...
@@ -8,7 +8,12 @@ YUI Library - YUITest - Release Notes
8 8
   * Added isRunning() method on YAHOO.tool.TestRunner.
9 9
   * Added coverage support, including getCoverage() on YAHOO.tool.TestRunner and YAHOO.tool.CoverageFormat.
10 10
   * Added getName()/setName() method to allow setting overall results name.
11  
-  * Changed master suite default name to be "yuitests" plus a timestampl
  11
+  * Changed master suite default name to be "yuitests" plus a timestamp.
  12
+  * Changed functionality of TestRunner when there's only one suite to run. Internally, the TestRunner uses
  13
+    a TestSuite to manage everything added via add(). Previously, this test suite was always represented
  14
+    in the results. Now, if you've only added one TestSuite to the TestRunner via add(), the specified
  15
+    TestSuite becomes the root. This may affect the reporting of test results if you're using TestReporter.
  16
+    To run tests in the old way, call TestRunner.run(true).
12 17
 
13 18
 2.8.0
14 19
 
Txt src/yuitest/js/TestRunner.js
  • View file @ 20e996b
... ...
@@ -789,8 +789,7 @@ YAHOO.tool.TestRunner = (function(){
789 789
          * @static
790 790
          */
791 791
         clear : function () /*:Void*/ {
792  
-            this.masterSuite.items = [];
793  
-            this.masterSuite.name = "yuitests" + (new Date()).getTime();
  792
+            this.masterSuite = new YAHOO.tool.TestSuite("yuitests" + (new Date()).getTime());
794 793
         },
795 794
         
796 795
         /**
... ...
@@ -807,14 +806,21 @@ YAHOO.tool.TestRunner = (function(){
807 806
     
808 807
         /**
809 808
          * Runs the test suite.
  809
+         * @param {Boolean} oldMode (Optional) Specifies that the <= 2.8 way of
  810
+         *      internally managing test suites should be used.
810 811
          * @return {Void}
811 812
          * @method run
812 813
          * @static
813 814
          */
814  
-        run : function (testObject /*:Object*/) /*:Void*/ {
  815
+        run : function (oldMode) {
815 816
             
816 817
             //pointer to runner to avoid scope issues 
817 818
             var runner = YAHOO.tool.TestRunner;
  819
+            
  820
+            //if there's only one suite on the masterSuite, move it up
  821
+            if (!oldMode && this.masterSuite.items.length == 1 && this.masterSuite.items[0] instanceof YAHOO.tool.TestSuite){
  822
+                this.masterSuite = this.masterSuite.items[0];
  823
+            }
818 824
 
819 825
             //build the test tree
820 826
             runner._buildTestTree();

0 notes on commit 20e996b

Please log in to comment.
Blog | Support | Training | Contact | API | Status | Twitter | Help | Security
© 2010 GitHub Inc. All rights reserved. | Terms of Service | Privacy Policy
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server
  • English
  • Català
  • Čeština
  • Deutsch
  • Español
  • Français
  • Hrvatski
  • Indonesia
  • Italiano
  • 日本語
  • Nederlands
  • Norsk
  • Polski
  • Português (BR)
  • Српски
  • Svenska
  • 中文