Merge commit 'v7.10.24' into WebGUI8

This commit is contained in:
Colin Kuskie 2012-01-17 15:03:45 -08:00
commit 3b418ede3c
139 changed files with 699 additions and 32133 deletions

View file

@ -1,4 +1,6 @@
7.10.24
- fixed #12318: asset error causes asset manager to fail
- fixed #12308: error message used scalar as reference
- fixed #12256: Calendar Search doesn't show admin controls
- fixed #12268: Point of sale form missing from cart screen.
- fixed #12201: AssetReport - no selects.
@ -7,6 +9,10 @@
- fixed Passive Analytics, UI, Progress Bar, server load.
- fixed #12303: Survey custom multiple choice question types
- fixed #12304: Surven packages do not include custom question types
- fixed #12309: Some child assets ignore visitor cache timeouts
- fixed possible values and default values on EMS submission.
- fixed #12312: Shop account plugin has unrendered macro
- fixed #12315: Remove yui tests from git repo.
7.10.23
- fixed #12225: Stock asset, multiple instances on a page

View file

@ -38,6 +38,12 @@ save you many hours of grief.
* Support for server-side spell checking in the Rich Editor TinyMCE has been removed.
7.10.24
--------------------------------------------------------------------
* WebGUI now depends on Business::OnlinePayment::AuthorizeNet. This version
should install automatically via the testEnvironment.pl script, or the
perl-standard CPAN module.
7.10.23
--------------------------------------------------------------------
* The default_search2 template had a bad template attachment pointing to

View file

@ -0,0 +1,183 @@
#!/usr/bin/env perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
our ($webguiRoot);
BEGIN {
$webguiRoot = "../..";
unshift (@INC, $webguiRoot."/lib");
}
use strict;
use Getopt::Long;
use WebGUI::Session;
use WebGUI::Storage;
use WebGUI::Asset;
my $toVersion = '7.10.24';
my $quiet; # this line required
my $session = start(); # this line required
# upgrade functions go here
addPALastLogTable($session);
addForkRedirect($session);
extendBucketName($session);
fixSurveyQuestionTypes($session);
finish($session); # this line required
#----------------------------------------------------------------------------
# Describe what our function does
sub addPALastLogTable {
my $session = shift;
print "\tAdd a table to keep track of additional Passive Analytics data... " unless $quiet;
# and here's our code
$session->db->write(<<EOSQL);
CREATE TABLE IF NOT EXISTS `PA_lastLog` (
`userId` char(22) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`assetId` char(22) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`sessionId` char(22) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`timeStamp` bigint(20) DEFAULT NULL,
`url` char(255) NOT NULL,
PRIMARY KEY (userId, sessionId)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
EOSQL
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
# Describe what our function does
sub addForkRedirect {
my $session = shift;
print "\tAdd a column to Fork to keep track of late generated redirect URLs... " unless $quiet;
# and here's our code
$session->db->write(<<EOSQL);
ALTER TABLE Fork add column redirect CHAR(255);
EOSQL
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
# Describe what our function does
sub extendBucketName {
my $session = shift;
print "\tExtend the size of the bucket name in the bucketLog table for Passive Analytics... " unless $quiet;
# and here's our code
$session->db->write(<<EOSQL);
ALTER TABLE bucketLog CHANGE COLUMN Bucket Bucket CHAR(255)
EOSQL
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
# Describe what our function does
sub fixSurveyQuestionTypes {
my $session = shift;
print "\tFix bad custom Question Types in the Survey... " unless $quiet;
# and here's our code
$session->db->write(<<EOSQL);
update Survey_questionTypes set answers="{}" where answers like 'HASH%';
EOSQL
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
# Describe what our function does
#sub exampleFunction {
# my $session = shift;
# print "\tWe're doing some stuff here that you should know about... " unless $quiet;
# # and here's our code
# print "DONE!\n" unless $quiet;
#}
# -------------- DO NOT EDIT BELOW THIS LINE --------------------------------
#----------------------------------------------------------------------------
# Add a package to the import node
sub addPackage {
my $session = shift;
my $file = shift;
print "\tUpgrading package $file\n" unless $quiet;
# Make a storage location for the package
my $storage = WebGUI::Storage->createTemp( $session );
$storage->addFileFromFilesystem( $file );
# Import the package into the import node
my $package = eval {
my $node = WebGUI::Asset->getImportNode($session);
$node->importPackage( $storage, {
overwriteLatest => 1,
clearPackageFlag => 1,
setDefaultTemplate => 1,
} );
};
if ($package eq 'corrupt') {
die "Corrupt package found in $file. Stopping upgrade.\n";
}
if ($@ || !defined $package) {
die "Error during package import on $file: $@\nStopping upgrade\n.";
}
return;
}
#-------------------------------------------------
sub start {
my $configFile;
$|=1; #disable output buffering
GetOptions(
'configFile=s'=>\$configFile,
'quiet'=>\$quiet
);
my $session = WebGUI::Session->open($webguiRoot,$configFile);
$session->user({userId=>3});
my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->set({name=>"Upgrade to ".$toVersion});
return $session;
}
#-------------------------------------------------
sub finish {
my $session = shift;
updateTemplates($session);
my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->commit;
$session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")");
$session->close();
}
#-------------------------------------------------
sub updateTemplates {
my $session = shift;
return undef unless (-d "packages-".$toVersion);
print "\tUpdating packages.\n" unless ($quiet);
opendir(DIR,"packages-".$toVersion);
my @files = readdir(DIR);
closedir(DIR);
my $newFolder = undef;
foreach my $file (@files) {
next unless ($file =~ /\.wgpkg$/);
# Fix the filename to include a path
$file = "packages-" . $toVersion . "/" . $file;
addPackage( $session, $file );
}
}
#vim:ft=perl

View file

@ -391,6 +391,8 @@ sub www_editSubmission {
$fields->{$fieldId}{fieldType} = $metaField->{dataType};
$fields->{$fieldId}{name} = $fieldId;
$fields->{$fieldId}{value} = $self->get($fieldId) if $self;
$fields->{$fieldId}{options} = $metaField->{possibleValues};
$fields->{$fieldId}{defaultValue} = $metaField->{defaultValues};
}
}

View file

@ -731,9 +731,10 @@ sub process {
my $output;
eval { $output = $parser->process($template, $self->param); };
if (my $e = Exception::Class->caught) {
$session->log->error(sprintf "Error processing template: %s, %s, %s", $self->getUrl, $self->getId, $e->error);
my $message = ref $e ? $e->error : $e;
$session->log->error(sprintf "Error processing template: %s, %s, %s", $self->getUrl, $self->getId, $message);
my $i18n = WebGUI::International->new($session, 'Asset_Template');
$output = sprintf $i18n->get('template error').$e->error, $self->getUrl, $self->getId;
$output = sprintf $i18n->get('template error').$message, $self->getUrl, $self->getId;
}
# Process the style template

View file

@ -1126,7 +1126,7 @@ sub viewList {
);
### Build the event vars
my $dtLast = $dtStart; # The DateTime of the last event
my $dtLast = WebGUI::DateTime->new(0); # The DateTime of the last event
EVENT: for my $event (@events) {
next EVENT unless $event && $event->canView();
my ( %eventVar, %eventDate )
@ -1135,12 +1135,15 @@ sub viewList {
# Add the change flags
my $dt = $event->getDateTimeStart;
if ( $dt->year > $dtLast->year ) {
$eventVar{ new_year } = 1;
}
if ( $dt->month > $dtLast->month ) {
$eventVar{ new_year } = 1;
$eventVar{ new_month } = 1;
$eventVar{ new_day } = 1;
}
if ( $dt->day > $dtLast->day ) {
elsif ( $dt->month > $dtLast->month ) {
$eventVar{ new_month } = 1;
$eventVar{ new_day } = 1;
}
elsif ( $dt->day > $dtLast->day ) {
$eventVar{ new_day } = 1;
}

View file

@ -2430,6 +2430,53 @@ sub export {
#-------------------------------------------------------------------
=head2 exportAssetData ()
Extend the base method to include custom question types added to this Survey.
=cut
sub exportAssetData {
my $self = shift;
my $asset_data = $self->SUPER::exportAssetData();
my $questions = $self->surveyJSON->questions();
my $multiple_choice = $self->surveyJSON->multipleChoiceTypes();
my %question_types = ();
my $get_question = $self->session->db->prepare('select answers from Survey_questionTypes where questionType=?');
foreach my $question (@{ $questions }) {
my $type = $question->{questionType};
next unless $multiple_choice->{$type};
next if $question_types{$type};
$get_question->execute([$type]);
my ($answers) = $get_question->array();
$question_types{$type} = $answers;
}
#my $question_types = $self->db->buildArrayRefOfHashRefs('select * from Survey_questionTypes');
$get_question->finish;
$asset_data->{question_types} = \%question_types;
return $asset_data;
}
#-------------------------------------------------------------------
=head2 importAssetCollateralData ($data)
Extend the base method to include custom question types added to this Survey.
=cut
sub importAssetCollateralData {
my $self = shift;
my $data = shift;
$self->SUPER::importAssetCollateralData($data);
my $custom_types = $data->{question_types};
while (my ($question, $answer) = each %{ $custom_types }) {
$self->session->db->write("INSERT INTO Survey_questionTypes VALUES(?,?) ON DUPLICATE KEY UPDATE answers = ?",[$question,$answer,$answer]);
}
}
#-------------------------------------------------------------------
=head2 www_exportSimpleResults ()
Exports transposed results as CSV (or tabbed depending on the C<format> form param)

View file

@ -169,7 +169,7 @@ sub addType {
my $questionType = shift;
my $address = shift;
my $question = $self->question($address);
my $ansString = $question->{answers} ? to_json $question->{answers} : {};
my $ansString = $question->{answers} ? to_json $question->{answers} : '{}';
$self->session->db->write("INSERT INTO Survey_questionTypes VALUES(?,?) ON DUPLICATE KEY UPDATE answers = ?",[$questionType,$ansString,$ansString]);
$question->{questionType} = $questionType;
}

View file

@ -157,6 +157,10 @@ This scratch variable is used by the Widget Macro.
Takes a hashref of arguments, containing the following keys:
=head3 depth
How many levels deep to export.
=head3 quiet
Boolean. To be or not to be quiet with our output. Defaults to false.

View file

@ -1169,8 +1169,10 @@ sub www_displayLogin {
$vars->{title} = $i18n->get(66);
my $action;
if ($self->session->setting->get("encryptLogin")) {
$action = $self->session->url->page(undef,1);
$action =~ s/http:/https:/;
my $uri = URI->new($self->session->url->page(undef,1));
$uri->scheme('https');
$uri->host_port($uri->host);
$action = $uri->as_string;
}
use WebGUI::Form::Password;
use WebGUI::Form::Hidden;
@ -1241,9 +1243,10 @@ sub www_login {
$self->session->scratch->delete("redirectAfterLogin");
}
elsif ($self->session->setting->get('encryptLogin')) {
my $currentUrl = $self->session->url->page(undef,1);
$currentUrl =~ s/^https:/http:/;
$self->session->response->setRedirect($currentUrl);
my $currentUrl = URI->new($self->session->url->page(undef,1));
$currentUrl->scheme('http');
$currentUrl->port($self->session->config->get('webServerPort') || 80);
$self->session->response->setRedirect($currentUrl->canonical->as_string);
}
# Get open version tag. This is needed if we want

View file

@ -293,6 +293,7 @@ sub finish {
$props{latch} = 0;
}
$props{endTime} = time();
$props{redirect} = $self->{redirect};
$self->set( \%props );
}
@ -529,6 +530,20 @@ sub setGroup {
#-----------------------------------------------------------------
=head2 setRedirect($url)
Allows a redirect to be set for the process after the initial fork. This happens
in the case when a file is to be downloaded after the fork finishes.
=cut
sub setRedirect {
my ( $self, $url ) = @_;
$self->{redirect} = $url;
}
#-----------------------------------------------------------------
=head2 request ($module, $subname, $data)
Internal method. Generates a hashref suitable for passing to runRequest.

View file

@ -98,7 +98,7 @@ my $template = <<'TEMPLATE';
url : params.statusUrl,
draw : function (data) {
var status = YAHOO.lang.JSON.parse(data.status);
bar.update(status.finished, status.total);
bar.update(status.current, status.total);
document.getElementById('message').innerHTML = status.message;
document.getElementById('elapsed').innerHTML = data.elapsed;
},
@ -106,8 +106,8 @@ my $template = <<'TEMPLATE';
document.getElementById('loading').style.display = 'none';
document.getElementById('ui').style.display = 'block';
},
finish : function() {
YAHOO.WebGUI.Fork.redirect(params);
finish : function(data) {
YAHOO.WebGUI.Fork.redirect(data.redirect || params.redirect);
},
error : function (msg) {
alert(msg);

View file

@ -67,7 +67,7 @@ See the synopsis for what kind of response this generates.
sub handler {
my $process = shift;
my $status = $process->getStatus;
my ( $finished, $startTime, $endTime, $error ) = $process->get( 'finished', 'startTime', 'endTime', 'error' );
my ( $finished, $startTime, $endTime, $error, $redirect ) = $process->get( qw/finished startTime endTime error redirect/ );
$endTime = time() unless $finished;
@ -76,7 +76,8 @@ sub handler {
elapsed => ( $endTime - $startTime ),
finished => ( $finished ? \1 : \0 ),
);
$status{error} = $error if $finished;
$status{error} = $error if $finished;
$status{redirect} = $redirect if $finished;
$process->session->response->content_type('text/plain');
JSON::encode_json( \%status );
} ## end sub handler

View file

@ -265,6 +265,7 @@ sub toHtml {
$style->setRawHeadTags(qq|<script type="text/javascript">var classValues = $jsonStr; </script>|);
my $jsonData = $self->get("value") || q|{ "isNew" : "true" }|;
$style->setRawHeadTags(qq|<script type="text/javascript">var dataValues = $jsonData; var first_row_error_msg = '$first_row_error_msg';</script>|);
$self->headTags();
#Decode JSON data for filling in some of the fields
my $jsonDataHash = JSON->new->decode($jsonData);

View file

@ -241,15 +241,15 @@ our $HELP = {
],
variables => [
{
name => 'newYear',
name => 'new_year',
description => 'helpvar newYear',
},
{
name => 'newMonth',
name => 'new_month',
description => 'helpvar newMonth',
},
{
name => 'newDay',
name => 'new_day',
description => 'helpvar newDay',
},
{

View file

@ -35,8 +35,8 @@ This package contains utility methods for WebGUI's ldap link system.
%ldapLink = WebGUI::LDAPLink->new($self->session,$ldapLinkId)->get;
$ldapLink = WebGUI::LDAPLink->new($self->session,$ldapLinkId);
$connection = $ldapLink->authenticate();
$ldapLink->disconnect;
$connection = $ldapLink->connectToLDAP();
$ldapLink->unbind;
=head1 METHODS

View file

@ -14,6 +14,7 @@ use strict;
use WebGUI::Form;
use WebGUI::International;
use WebGUI::Asset::Template;
use URI;
=head1 NAME
@ -97,8 +98,10 @@ sub process {
my $action;
if ($session->setting->get("encryptLogin")) {
$action = $session->url->page(undef,1);
$action =~ s/http:/https:/;
my $uri = URI->new($session->url->page(undef,1));
$uri->scheme('https');
$uri->host_port($uri->host);
$action = $uri->canonical->as_string;
}
use WebGUI::Form::Text;
use WebGUI::Form::Password;

View file

@ -154,7 +154,7 @@ sub rollbackInFork {
my $session = $process->session;
my $tag = WebGUI::VersionTag->new( $session, $tagId );
my %status = (
finished => 0,
current => 0,
total => $process->session->db->quickScalar( 'SELECT count(*) FROM assetData WHERE tagId = ?', [$tagId] ),
message => '',
);
@ -168,7 +168,7 @@ sub rollbackInFork {
my $purgeRevision = shift;
my $self = shift;
$self->$purgeRevision(@_);
$status{finished}++;
$status{current}++;
$update->();
}
);

View file

@ -11,6 +11,7 @@ use WebGUI::Workflow;
use WebGUI::Workflow::Instance;
use WebGUI::User;
use WebGUI::Text;
use WebGUI::Fork;
=head1 NAME
@ -57,7 +58,7 @@ sub canView {
#----------------------------------------------------------------------------
=head2 exportSomething ( session, sth, filename )
=head2 exportSomething ( $process, $data )
Generates CSV data from the supplied statement handle and generates
a temporary WebGUI::Storage object containing that data in the requested
@ -66,31 +67,53 @@ filename.
This subroutine also does a setRedirect to the URL of the file in
the storage object.
=head3 session
=head3 $process
Session variable, to set the http redirect correctly.
A WebGUI::Fork object, to let the user know what's going on.
=head3 sth
=head3 $data
Statement handle for reading data and getting column names
Hash ref of data.
=head3 tableName
The name of the table where data will be pulled and translated into CSV.
=head3 filename
The name of the file to create inside the storage object.
The name of the file to generate
=cut
sub exportSomething {
my ($session, $sth, $filename) = @_;
my ($process, $data) = @_;
my $session = $process->session;
my $i18n = WebGUI::International->new($session, 'Asset_Thingy');
my $storage = WebGUI::Storage->createTemp($session);
open my $CSV, '>', $storage->getPath($data->{filename});
my $sth = $session->db->read('select SQL_CALC_FOUND_ROWS * from '.$data->{tableName});
my %status = (
current => 0,
message => '',
total => $session->db->quickScalar('select found_rows()') + 0,
);
my $update = sub {
$process->update( sub { JSON::to_json(\%status) } );
};
$update->();
my @columns = $sth->getColumnNames;
my $csvData = WebGUI::Text::joinCSV( @columns ). "\n";
print $CSV WebGUI::Text::joinCSV( @columns ). "\n";
my $rowCounter = 0;
$status{message} = $i18n->get('Writing data');
$update->();
while (my $row = $sth->hashRef()) {
my @row = @{ $row }{@columns};
$csvData .= WebGUI::Text::joinCSV(@row) . "\n";
print $CSV WebGUI::Text::joinCSV(@row) . "\n";
++$status{current };
$update->();
}
$storage->addFileFromScalar($filename, $csvData);
$session->response->setRedirect($storage->getUrl($filename));
close $CSV;
$sth->finish;
}
#-------------------------------------------------------------------
@ -334,8 +357,24 @@ Dump the contents of the bucket log.
sub www_exportBucketData {
my ($session) = @_;
my $bucket = $session->db->read('select * from bucketLog order by userId, Bucket, timeStamp');
exportSomething($session, $bucket, 'bucketData.csv');
my $process = WebGUI::Fork->start(
$session,
__PACKAGE__, 'exportSomething',
{ tableName => 'bucketLog', filename => 'bucketData.csv', },
);
my $i18n = WebGUI::International->new($session, 'PassiveAnalytics');
$session->http->setRedirect(
$session->url->page(
$process->contentPairs(
'ProgressBar', {
icon => 'passiveAnalytics',
title => $i18n->get('Export bucket data'),
proceed => $session->url->page('op=passiveAnalytics;func=editRuleflow'),
},
),
),
);
return "redirect";
}
@ -349,8 +388,23 @@ Dump the contents of the delta log.
sub www_exportDeltaData {
my ($session) = @_;
my $delta = $session->db->read('select * from deltaLog order by userId, timeStamp');
exportSomething($session, $delta, 'deltaData.csv');
my $process = WebGUI::Fork->start(
$session,
__PACKAGE__, 'exportSomething',
{ tableName => 'deltaLog', filename => 'deltaData.csv', },
);
my $i18n = WebGUI::International->new($session, 'PassiveAnalytics');
$session->http->setRedirect(
$session->url->page(
$process->contentPairs(
'ProgressBar', {
icon => 'passiveAnalytics',
title => $i18n->get('Export delta data'),
proceed => $session->url->page('op=passiveAnalytics;func=editRuleflow'),
},
),
),
);
return "redirect";
}
@ -364,8 +418,23 @@ Dump the contents of the raw log.
sub www_exportLogs {
my ($session) = @_;
my $raw = $session->db->read('select * from passiveLog order by userId, timeStamp');
exportSomething($session, $raw, 'passiveData.csv');
my $process = WebGUI::Fork->start(
$session,
__PACKAGE__, 'exportSomething',
{ tableName => 'passiveLog', filename => 'passiveData.csv', },
);
my $i18n = WebGUI::International->new($session, 'PassiveAnalytics');
$session->http->setRedirect(
$session->url->page(
$process->contentPairs(
'ProgressBar', {
icon => 'passiveAnalytics',
title => $i18n->get('Export raw logs'),
proceed => $session->url->page('op=passiveAnalytics;func=editRuleflow'),
},
),
),
);
return "redirect";
}

View file

@ -51,6 +51,20 @@ sub definition {
return $class->SUPER::definition($session,$definition);
}
#-------------------------------------------------------------------
=head2 get_statement( session, counter )
Return a statement handle at the desired offset.
=cut
sub get_statement {
my ($session, $logIndex) = @_;
my $deltaSql = q{select SQL_CALC_FOUND_ROWS userId, assetId, url, delta, from_unixtime(timeStamp) as stamp from deltaLog limit ?, 500000};
my $sth = $session->db->read($deltaSql, [$logIndex+0]);
return $sth;
}
#-------------------------------------------------------------------
@ -85,47 +99,49 @@ sub execute {
my %bucketCache = ();
##Configure all the SQL
my $deltaSql = <<"EOSQL1";
select userId, assetId, url, delta, from_unixtime(timeStamp) as stamp
from deltaLog order by timestamp limit $logIndex, 1234567890
EOSQL1
my $deltaSth = $session->db->read($deltaSql);
my $bucketSth = $session->db->prepare('insert into bucketLog (userId, Bucket, duration, timeStamp) VALUES (?,?,?,?)');
my $deltaSth = get_statement($session, $logIndex);
my $total_rows = $session->db->quickScalar('select found_rows()');
my $bucketSth = $session->db->prepare('insert into bucketLog (userId, Bucket, duration, timeStamp) VALUES (?,?,?,?)');
##Walk through the log file entries, one by one. Run each entry against
##all the rules until 1 matches. If it doesn't match any rule, then bin it
##into the "Other" bucket.
DELTA_ENTRY: while (my $entry = $deltaSth->hashRef()) {
++$logIndex;
my $bucketFound = 0;
my $url = $entry->{url};
if (exists $bucketCache{$url}) {
$bucketSth->execute([$entry->{userId}, $bucketCache{$url}, $entry->{delta}, $entry->{stamp}]);
}
else {
RULE: foreach my $rule (@rules) {
next RULE unless $url =~ $rule->[1];
# Into the bucket she goes..
$bucketCache{$url} = $rule->[0];
$bucketSth->execute([$entry->{userId}, $rule->[0], $entry->{delta}, $entry->{stamp}]);
$bucketFound = 1;
last RULE;
DELTA_CHUNK: while (1) {
DELTA_ENTRY: while (my $entry = $deltaSth->hashRef()) {
++$logIndex;
my $bucketFound = 0;
my $url = $entry->{url};
if (exists $bucketCache{$url}) {
$bucketSth->execute([$entry->{userId}, $bucketCache{$url}, $entry->{delta}, $entry->{stamp}]);
}
if (!$bucketFound) {
$bucketCache{$url} = 'Other';
$bucketSth->execute([$entry->{userId}, 'Other', $entry->{delta}, $entry->{stamp}]);
}
}
if (time() > $endTime) {
$expired = 1;
last DELTA_ENTRY;
}
}
else {
RULE: foreach my $rule (@rules) {
next RULE unless $url =~ $rule->[1];
if ($expired) {
$instance->setScratch('logIndex', $logIndex);
return $self->WAITING(1);
# Into the bucket she goes..
$bucketCache{$url} = $rule->[0];
$bucketSth->execute([$entry->{userId}, $rule->[0], $entry->{delta}, $entry->{stamp}]);
$bucketFound = 1;
last RULE;
}
if (!$bucketFound) {
$bucketCache{$url} = 'Other';
$bucketSth->execute([$entry->{userId}, 'Other', $entry->{delta}, $entry->{stamp}]);
}
}
if (time() > $endTime) {
$expired = 1;
last DELTA_ENTRY;
}
}
if ($expired) {
$instance->setScratch('lastPassiveLogIndex', $logIndex);
return $self->WAITING(1);
}
last DELTA_CHUNK if $logIndex >= $total_rows;
$deltaSth = get_statement($session, $logIndex);
}
my $message = 'Passive analytics is done.';
if ($session->setting->get('passiveAnalyticsDeleteDelta')) {

View file

@ -49,6 +49,20 @@ sub definition {
return $class->SUPER::definition($session,$definition);
}
#-------------------------------------------------------------------
=head2 get_statement( session, counter )
Return a statement handle at the desired offset.
=cut
sub get_statement {
my ($session, $counter) = @_;
my $passive = q{select SQL_CALC_FOUND_ROWS * from passiveLog where userId <> '1' limit ?, 500000};
my $sth = $session->db->read($passive, [$counter+0]);
return $sth;
}
#-------------------------------------------------------------------
@ -72,72 +86,61 @@ sub execute {
my $endTime = time() + $self->getTTL;
my $deltaInterval = $self->get('deltaInterval');
my $passive = q{select * from passiveLog where userId <> '1' order by userId, sessionId, timeStamp};
my $sth;
my $lastUserId;
my $lastSessionId;
my $lastTimeStamp;
my $lastAssetId;
my $lastUrl;
my $counter = $instance->getScratch('counter');
if ($counter) {
$passive .= ' limit '. $counter .', 1234567890';
$sth = $session->db->read($passive);
$lastUserId = $instance->getScratch('lastUserId');
$lastSessionId = $instance->getScratch('lastSessionId');
$lastTimeStamp = $instance->getScratch('lastTimeStamp');
$lastAssetId = $instance->getScratch('lastAssetId');
$lastUrl = $instance->getScratch('lastUrl');
}
else {
$sth = $session->db->read($passive);
my $logLine = $sth->hashRef();
$lastUserId = $logLine->{userId};
$lastSessionId = $logLine->{sessionId};
$lastTimeStamp = $logLine->{timeStamp};
$lastAssetId = $logLine->{assetId};
$lastUrl = $logLine->{url};
my $sth = get_statement($session, $counter);
if (! $counter) { #Clean up from last time, just in case
$session->db->write('delete from deltaLog');
$session->db->write('delete from PA_lastLog');
}
$session->db->write('delete from deltaLog'); ##Only if we're starting out
my $deltaLog = $session->db->prepare('insert into deltaLog (userId, assetId, delta, timeStamp, url) VALUES (?,?,?,?,?)');
my $total_rows = $session->db->quickScalar('select found_rows()');
my $deltaLog = $session->db->prepare('insert into deltaLog (userId, assetId, timeStamp, url, delta) VALUES (?,?,?,?,?)');
my $recordLast = $session->db->prepare('REPLACE INTO PA_lastLog (userId, sessionId, timeStamp, url) VALUES (?,?,?,?)');
my $fetchLast = $session->db->prepare('select * from PA_lastLog where sessionId=? and userId=?');
my $expired = 0;
LOG_ENTRY: while (my $logLine = $sth->hashRef()) {
$counter++;
my $delta = $logLine->{timeStamp} - $lastTimeStamp;
if ( $logLine->{userId} eq $lastUserId
&& $logLine->{sessionId} eq $lastSessionId
&& $delta < $deltaInterval ) {
$deltaLog->execute([$lastUserId, $lastAssetId, $delta, $lastTimeStamp, $lastUrl]);
LOG_CHUNK: while (1) {
LOG_ENTRY: while (my $logLine = $sth->hashRef()) {
$counter++;
$fetchLast->execute([@{$logLine}{qw/sessionId userId/}]);
my $lastLine = $fetchLast->hashRef();
$recordLast->execute([ (@{ $logLine }{qw/userId sessionId timeStamp url/}) ]);
if ($lastLine->{timeStamp}) {
my $delta = $logLine->{timeStamp} - $lastLine->{timeStamp};
if ($delta <= $deltaInterval) {
$deltaLog->execute([ (@{ $lastLine }{qw/userId assetId timeStamp url/}), $delta]);
}
}
if (time() > $endTime) {
$expired = 1;
last LOG_ENTRY;
}
}
$lastUserId = $logLine->{userId};
$lastSessionId = $logLine->{sessionId};
$lastTimeStamp = $logLine->{timeStamp};
$lastAssetId = $logLine->{assetId};
$lastUrl = $logLine->{url};
if (time() > $endTime) {
$instance->setScratch('lastUserId', $lastUserId);
$instance->setScratch('lastSessionId', $lastSessionId);
$instance->setScratch('lastTimeStamp', $lastTimeStamp);
$instance->setScratch('lastAssetId', $lastAssetId);
$instance->setScratch('lastUrl', $lastUrl);
$instance->setScratch('counter', $counter);
$expired = 1;
last LOG_ENTRY;
if ($expired) {
$deltaLog->finish;
$recordLast->finish;
$fetchLast->finish;
$sth->finish;
$instance->setScratch('counter', $counter);
return $self->WAITING(1);
}
}
if ($expired) {
return $self->WAITING(1);
last LOG_CHUNK if $counter >= $total_rows;
$sth = get_statement($session, $counter);
}
$instance->deleteScratch('lastUserId');
$instance->deleteScratch('lastSessionId');
$instance->deleteScratch('lastTimeStamp');
$instance->deleteScratch('lastAssetId');
$instance->deleteScratch('lastUrl');
$instance->deleteScratch('counter');
$deltaLog->finish;
$recordLast->finish;
$fetchLast->finish;
$sth->finish;
$session->db->write('delete from PA_lastLog');
return $self->COMPLETE;
}

View file

@ -0,0 +1,15 @@
package WebGUI::i18n::English::Form_TimeField;
use strict;
our $I18N = {
'invalid time' => {
message => q|Invalid time|,
lastUpdated => 0,
context => q|Flag for when a time cannot be parsed.|
},
};
1;

View file

@ -201,6 +201,12 @@ home\?func=match<br />
context => q|Error message|,
},
'error creating workflow' => {
message => q|Error creating the workflow instance.|,
lastUpdated => 0,
context => q|Error message|,
},
};
1;

View file

@ -156,7 +156,7 @@ checkModule("MooseX::Storage::Format::JSON","0.27" );
checkModule("namespace::autoclean", "0.09" );
checkModule("Business::PayPal::API", "0.62" );
checkModule("Business::OnlinePayment", "3.01" );
checkModule("Business::OnlinePayment::AuthorizeNet", "3.21" );
checkModule("Business::OnlinePayment::AuthorizeNet", "3.22" );
checkModule("Locales", "0.10" );
checkModule("Test::Harness", "3.17" );
checkModule("DateTime::Event::ICal", "0.10" );

View file

@ -284,15 +284,22 @@ names are:
=over
=item B<username>
=item B<password>
=item B<authMethod>
=item B<status>
=item B<ldapUrl>
=item B<connectDN>
=item B<groups>
=item B<expireOffset>
=item Any valid User Profile field name available in WebGUI's database,
e.g. B<firstName>, B<lastName>, B<mail>, etc.
=item Any valid User Profile field name available in WebGUI's database, e.g. B<firstName>, B<lastName>, B<mail>, etc.
=back

File diff suppressed because one or more lines are too long

View file

@ -428,7 +428,7 @@ my $expected = {
},
'description' => undef,
'_isValid' => 1,
'deleteCreatedItems' => '0',
'deleteCreatedItems' => 0,
'canSubmitGroupId' => '2',
'assetId' => 'new',
'url' => '',

View file

@ -14,8 +14,6 @@ use WebGUI::Test;
use WebGUI::Session;
use WebGUI::Asset::Template;
use Exception::Class;
use Test::More tests => 62; # increment this value for each test you create
use Test::Deep;
use Data::Dumper;
use Test::Exception;
@ -344,4 +342,16 @@ throws_ok
'Parser not in config dies';
isa_ok $class->getParser( $session, 'WebGUI::Asset::Template::HTMLTemplateExpr'), 'WebGUI::Asset::Template::HTMLTemplateExpr', 'parser in config is created';
{
use Test::MockObject::Extends;
my $mockparser = Test::MockObject->new->mock( process => sub { $@ = "failed" } );
my $mockTemplate = Test::MockObject::Extends->new( $class )
->mock( get => sub { return '' } )
->mock( session => sub { return $session } )
->mock( getParser => sub { return $mockparser } )
;
is $mockTemplate->process, 'failed', 'handle non-reference exceeption';
}
done_testing;

View file

@ -55,8 +55,6 @@ use Data::Dumper;
use WebGUI::Asset::Wobject::Calendar;
use WebGUI::Asset::Event;
plan tests => 14 + scalar @icalWrapTests;
my $session = WebGUI::Test->session;
# Do our work in the import node
@ -553,6 +551,9 @@ cmp_deeply(
'... correct set of events in list view'
);
ok(exists $listVars->{events}->[0]->{new_year} && $listVars->{events}->[0]->{new_year}, 'first event has new_year set');
ok(exists $listVars->{events}->[0]->{new_month} && $listVars->{events}->[0]->{new_month}, 'first event has new_month set');
ok(exists $listVars->{events}->[0]->{new_day} && $listVars->{events}->[0]->{new_day}, 'first event has new_day set');
######################################################################
#
@ -580,3 +581,5 @@ cmp_deeply(
[],
'but getFeeds still returns a data structure.'
);
done_testing;

View file

@ -0,0 +1,67 @@
# Tests WebGUI::Asset::Wobject::Survey Reporting
#
#
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin/../../../lib";
use Test::More;
use Test::Deep;
use Data::Dumper;
use Clone qw/clone/;
use WebGUI::Test; # Must use this before any other WebGUI modules
use WebGUI::Session;
WebGUI::Error->Trace(1); # Turn on tracing of uncaught Exception::Class exceptions
#----------------------------------------------------------------------------
# Init
my $session = WebGUI::Test->session;
#----------------------------------------------------------------------------
# put your tests here
my $import_node = WebGUI::Asset->getImportNode($session);
# Create a Survey
my $survey = $import_node->addChild( { className => 'WebGUI::Asset::Wobject::Survey', } );
WebGUI::Test->addToCleanup($survey);
my $sJSON = $survey->surveyJSON;
# Load bare-bones survey, containing a single section (S0)
$sJSON->update([0], { variable => 'S0' });
# Add 1 question to S0
$sJSON->newObject([0]); # S0Q0
$sJSON->update([0,0], { variable => 'toes', questionType => 'Multiple Choice' });
$sJSON->update([0,0,0], { text => 'one',});
$sJSON->update([0,0,1], { text => 'two',});
$sJSON->update([0,0,2], { text => 'more than two',});
$sJSON->update([0,1], { variable => 'name', questionType => 'Text' });
$survey->addType('toes', [0,0]);
$survey->persistSurveyJSON; ##This does not update the SurveyJSON object cacched in the Survey object
$survey=$survey->cloneFromDb;
my $asset_data = $survey->exportAssetData();
ok exists $asset_data->{question_types}, 'question_types entry exists in asset data to package';
ok exists $asset_data->{question_types}->{toes}, 'the toes type in a question type' or
explain $asset_data;
ok !exists $asset_data->{question_types}->{name}, 'name question not in question types';
$asset_data->{question_types}->{fingers} = clone $asset_data->{question_types}->{toes};
$survey->importAssetCollateralData($asset_data);
$survey = $survey->cloneFromDb;
my $multipleChoiceTypes = $survey->surveyJSON->multipleChoiceTypes;
ok exists $multipleChoiceTypes->{fingers}, 'fingers type imported as package collateral data';
ok exists $multipleChoiceTypes->{toes}, 'still have toes, too';
done_testing();
#vim:ft=perl

View file

@ -33,7 +33,7 @@ $env->{'QUERY_STRING'} = 'func=search';
my $i18n = WebGUI::International->new($session,'Macro_L_loginBox');
plan tests => 30;
plan tests => 31;
my $output = WebGUI::Macro::L_loginBox::process($session,'','',$template->getId);
my %vars = simpleTextParser($output);
@ -150,6 +150,12 @@ $output = WebGUI::Macro::L_loginBox::process($session,'','',$template->getId);
%vars = simpleTextParser($output);
like($vars{'form.header'}, qr{https://}, 'form.header action set to use SSL by encryptLogin');
WebGUI::Test->originalConfig('webServerPort');
$session->config->set('webServerPort', 8081);
$output = WebGUI::Macro::L_loginBox::process($session,'','',$template->getId);
%vars = simpleTextParser($output);
unlike($vars{'form.header'}, qr{:8081}, '... when setting, remove the port');
##Finally, a test that the default Template exists
$output = WebGUI::Macro::L_loginBox::process($session,'','','');

View file

@ -3,20 +3,22 @@ use strict;
#use DB;
use WebGUI::Test;
use WebGUI::Asset;
use WebGUI::PassiveAnalytics::Rule;
use WebGUI::Workflow::Activity::BucketPassiveAnalytics;
use WebGUI::Text;
use Test::More;
use Test::Deep;
use Data::Dumper;
plan tests => 1; # increment this value for each test you create
plan tests => 2; # increment this value for each test you create
my $session = WebGUI::Test->session;
$session->user({userId => 3});
WebGUI::Test->addToCleanup(SQL => 'delete from passiveLog');
WebGUI::Test->addToCleanup(SQL => 'delete from deltaLog');
WebGUI::Test->addToCleanup(SQL => 'delete from bucketLog');
WebGUI::Test->addToCleanup(SQL => 'delete from analyticRule');
WebGUI::Test->addToCleanup(SQL => 'delete from PA_lastLog');
my $workflow = WebGUI::Workflow->new($session, 'PassiveAnalytics000001');
my $activities = $workflow->getActivities();
@ -63,7 +65,8 @@ while (my $spec = shift @url2) {
}
my @urls = map {$_->[1]} @ruleSets;
loadLogData($session, @urls);
#loadLogData($session, @urls);
repeatableLogData($session, 'passiveAnalyticsLog');
##Build rulesets
@ -76,7 +79,28 @@ PAUSE: while (my $retval = $instance->run()) {
}
#DB::disable_profile();
ok(1, 'One test');
cmp_ok $counter, '<', 16, 'Successful completion of PA';
my $get_line = $session->db->read('select userId, Bucket, duration from bucketLog');
my @database_dump = ();
ROW: while ( 1 ) {
my @datum = $get_line->array();
last ROW unless @datum;
push @database_dump, [ @datum ];
}
cmp_bag(
[ @database_dump ],
[
['user1', 'one', 10],
['user1', 'two', 15],
['user2', 'zero', 2],
['user2', 'uno', 3],
['user2', 'Other', 5],
],
'PA analysis completed, and calculated correctly'
) or diag Dumper(\@database_dump);
sub loadLogData {
my ($session, @urls) = @_;
@ -96,4 +120,24 @@ sub loadLogData {
}
}
sub repeatableLogData {
my ($session, $dataLogName) = @_;
$session->db->write('delete from passiveLog');
my $insert = $session->db->prepare(
q!insert into passiveLog (userId, sessionId, timeStamp, url, assetId) VALUES (?,?,?,?,'assetId')!
);
my $data_name = WebGUI::Test::collateral('passiveAnalyticsLog');
open my $log_data, '<', $data_name or
die "Unable to open $data_name for reading: $!";
local $_;
while (<$log_data>) {
next if /^\s*#/;
s/#\.*$//;
chomp;
my @data = split;
$insert->execute([@data]);
}
$insert->finish;
}
#vim:ft=perl

View file

@ -43,7 +43,7 @@ $retVal = $instance1->run();
is($retVal, 'complete', 'cleanup: activity complete');
$retVal = $instance1->run();
is($retVal, 'done', 'cleanup: activity is done');
$instance1->delete;
$instance1->delete('skipNotify');
my $origSessionTimeout = $session->setting->get('sessionTimeout');
@ -77,6 +77,7 @@ my $instance2 = WebGUI::Workflow::Instance->create($session,
skipSpectreNotification => 1,
}
);
WebGUI::Test->addToCleanup($instance2);
my $counter = 0;
PAUSE: while ($retVal = $instance2->run()) {

View file

@ -0,0 +1,9 @@
#user session timestamp url
user1 session11 100 /one
user1 session11 110 /two
user1 session11 125 /three
user2 session21 200 /yelnats
user2 session21 202 /one/uno
user2 session21 205 /whatever
user2 session21 210 /something_else
user2 session21 610 /something_else

View file

@ -1,111 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Animation Test Suite</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/animation/animation.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<style type="text/css">
#foo,
#bar {
background:#ccc;
height:100px;
width:100px;
overflow:hidden;
}
</style>
<script type="text/javascript">
(function() {
var Y = YAHOO.util,
tool = YAHOO.tool,
suite = new tool.TestSuite("yuisuite");
Y.Event.onDOMReady(function() {
var logger = new YAHOO.tool.TestLogger(null, { height: '80%' });
var animFoo = new Y.Anim('foo', { width: { to: 10 } });
var elFoo = document.getElementById('foo');
var animBar = new Y.Motion('bar', { width: { by: 50 } });
var elBar = document.getElementById('bar');
suite.add( new tool.TestCase({
name: 'YAHOO.util.Anim',
test_getEl: function() {
YAHOO.util.Assert.areEqual(elFoo, animFoo.getEl(), 'incorrect element');
},
test_isAnimated: function() {
YAHOO.util.Assert.isFalse(animFoo.isAnimated(), 'isAnimated() should be false');
animFoo.animate();
YAHOO.util.Assert.isTrue(animFoo.isAnimated(), 'isAnimated() should be true');
animFoo.stop();
},
test_stop: function() {
animFoo.animate();
animBar.animate();
animFoo.stop();
YAHOO.util.Assert.isFalse(animFoo.isAnimated(), 'isAnimated() should be false');
YAHOO.util.Assert.isTrue(animBar.isAnimated(), 'isAnimated() should be false');
animBar.stop();
},
test_onStart: function() {
var pass = false;
var handler = function() {
pass = true;
this.onStart.unsubscribe(handler);
};
animFoo.onStart.subscribe(handler);
animFoo.animate();
animFoo.stop();
YAHOO.util.Assert.isTrue(pass, 'onStart failed to fire');
},
test_endValue: function() {
var handler = function() {
YAHOO.util.Assert.areEqual(10, elFoo.offsetWidth, 'incorrect "to" end value set');
YAHOO.util.Assert.areEqual(150, elBar.offsetWidth, 'incorrect "by" end value set');
this.onComplete.unsubscribe(handler);
};
animBar.onComplete.subscribe(handler);
animFoo.animate();
animBar.animate();
}
}));
tool.TestRunner.add(suite);
if (parent && parent != window) {
tool.TestManager.load();
} else {
tool.TestRunner.run();
}
});
})();
</script>
<style type="text/css">
</style>
</head>
<body class="yui-skin-sam">
<div id="doc">
<div id="foo">foo</div>
<div id="bar">bar</div>
</div>
</body>
</html>

View file

@ -1,283 +0,0 @@
<html>
<head>
<title>YUI AutoComplete Tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/autocomplete/assets/autocomplete.css" />
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript" src="../../../build/datasource/datasource.js"></script>
<script type="text/javascript" src="../../../build/autocomplete/autocomplete.js"></script>
</head>
<body>
<h1>AutoComplete Tests</h1>
<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
<script type="text/javascript">
(function() {
var Dom=YAHOO.util.Dom,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert,
DateAssert=YAHOO.util.DateAssert,
UserAction=YAHOO.util.UserAction,
TestCase = YAHOO.tool.TestCase,
TestLogger = YAHOO.tool.TestLogger,
TestRunner = YAHOO.tool.TestRunner,
TestSuite = YAHOO.tool.TestSuite,
DS = YAHOO.util.DataSource,
AutoComplete = YAHOO.widget.AutoComplete;
var AutoCompleteTestCase = function (template) {
AutoCompleteTestCase.superclass.constructor.call(this, template);
};
YAHOO.lang.extend(AutoCompleteTestCase, TestCase);
AutoCompleteTestCase.prototype.setUp = function() {
this.count = 0;
this.wrappers = [];
this.inputs = [];
this.containers = [];
this.instances = [];
this.data = ["aaa","abc","axyz"];
};
AutoCompleteTestCase.prototype.tearDown = function() {
if (this.wrappers != null && (this.wrappers.length > 0)) {
for(var i=0; i<this.wrappers.length; i++) {
YAHOO.util.Event.purgeElement(this.wrappers[i], true);
document.body.removeChild(this.wrappers[i]);
}
}
delete this.datasource;
delete this.containers;
delete this.inputs;
delete this.wrappers;
delete this.instances;
};
AutoCompleteTestCase.prototype.createInstance = function(oConfig) {
this.datasource = new DS(this.data);
var nCount = this.count;
this.count++;
this.wrappers[nCount] = document.createElement("div");
this.wrappers[nCount].id = "acWrapper"+nCount;
document.body.appendChild(this.wrappers[nCount]);
this.inputs[nCount] = document.createElement("input");
this.inputs[nCount].id = "acInput"+nCount;
this.wrappers[nCount].appendChild(this.inputs[nCount]);
this.containers[nCount] = document.createElement("div");
this.containers[nCount].id = "acContainer"+nCount;
this.wrappers[nCount].appendChild(this.containers[nCount]);
this.instances[nCount] = new AutoComplete(this.inputs[nCount], this.containers[nCount], this.datasource, oConfig);
return this.instances[nCount];
};
var acApiTemplate = {
name: "AutoComplete API Test Case",
testConstruction: function() {
var ac = this.createInstance();
Assert.isObject(ac, "Failed to create basic instance");
Assert.isInstanceOf(AutoComplete, ac, "Failed to create basic instance");
},
testDestroy: function() {
var ac = this.createInstance();
ac.destroy();
Assert.isNull(ac.dataSource, "Expected datasource to be null");
Assert.isNull(ac._elContainer, "Expected container to be null");
Assert.isNull(ac._elTextbox, "Expected textbox to be null");
},
testSetHeader: function() {
var ac = this.createInstance();
ac.setHeader("header");
var el = YAHOO.util.Dom.getElementsByClassName("yui-ac-hd", "div", this.container)[0];
Assert.areSame("header", el.innerHTML, "Expected header content to be \"header\"");
},
testSetBody: function() {
var ac = this.createInstance();
ac.setBody("body");
var el = YAHOO.util.Dom.getElementsByClassName("yui-ac-bd", "div", this.container)[0];
Assert.areSame("body", el.innerHTML, "Expected body content to be \"body\"");
},
testSetFooter: function() {
var ac = this.createInstance();
ac.setFooter("footer");
var el = YAHOO.util.Dom.getElementsByClassName("yui-ac-ft", "div", this.container)[0];
Assert.areSame("footer", el.innerHTML, "Expected footer content to be \"footer\"");
},
testGetListEl: function() {
var ac = this.createInstance();
ac.sendQuery("a");
var el = ac.getListEl();
Assert.areSame(el.tagName.toLowerCase(), "ul", "Expected UL element");
},
testExpandCollapseContainer: function() {
var ac = this.createInstance();
ac.setBody("BODY");
Assert.areSame(ac._elContent.style.display, "none", "Expected container to be closed");
ac.expandContainer();
Assert.areNotSame(ac._elContent.style.display, "none", "Expected container to be open");
ac.collapseContainer();
Assert.areSame(ac._elContent.style.display, "none", "Expected container to be closed again");
},
testClearList: function() {
var ac = this.createInstance();
ac.sendQuery("a");
var els = ac.getListItems();
for(var i=0; i<3; i++) {
Assert.areNotSame(els[i].style.display, "none", "Expected suggestion items to be displayed");
}
for(i=3; i<els.length; i++) {
Assert.areSame(els[i].style.display, "none", "Expected rest of the list to not be displayed");
}
ac.clearList();
for(i=0; i<els.length; i++) {
Assert.areSame(els[i].style.display, "none", "Expected no items to be displayed");
}
},
testGetListItems: function() { // deprecated
var ac = this.createInstance();
ac.sendQuery("a");
var els = ac.getListItems();
ArrayAssert.itemsAreSame(els, ac.getListEl().childNodes, "Expected LI elements");
},
testGetListItemData: function() {
var ac = this.createInstance();
ac.sendQuery("a");
var data = ac.getListItemData(ac.getListItems()[0]); // deprecated
ArrayAssert.itemsAreSame(["aaa"], data, "Expected data");
ac.sendQuery("a");
data = ac.getListItemData(ac.getListEl().firstChild);
ArrayAssert.itemsAreSame(["aaa"], data, "Expected data");
ac.resultTypeList = false;
ac.sendQuery("a");
data = ac.getListItemData(ac.getListEl().firstChild);
ArrayAssert.itemsAreSame("aaa", data, "Expected data");
},
testGetListItemDataObject: function() {
this.data = [{name:"aaa",id:1},{name:"abc",id:2},{name:"axyz",id:3}]
var ac = this.createInstance();
ac.dataSource.responseSchema = {fields:["name", "id"]};
ac.resultTypeList = false;
ac.sendQuery("a");
var data = ac.getListItemData(ac.getListEl().firstChild);
Assert.areSame("aaa", data.name, "Expected data");
Assert.areSame(1, data.id, "Expected data");
ac.sendQuery("axyz");
data = ac.getListItemData(ac.getListEl().firstChild);
Assert.areSame("ax", data.name, "Expected data");
Assert.areSame(3, data.id, "Expected data");
},
testGetListItemIndex: function() {
var ac = this.createInstance();
ac.sendQuery("a");
var index = ac.getListItemIndex(ac.getListEl().firstChild);
Assert.areSame(0, index, "Expected index");
},
testGetListItemMatch: function() {
var ac = this.createInstance();
ac.sendQuery("a");
var data = ac.getListItemMatch(ac.getListEl().firstChild);
Assert.areSame("aaa", data, "Expected match");
},
testFormatResult: function() {
var ac = this.createInstance();
ac.formatResult = function(oResultData, sQuery, sResultMatch) {
ArrayAssert.itemsAreSame(["aaa"], oResultData);
Assert.areSame("aa", sQuery);
Assert.areSame("aaa", sResultMatch);
};
ac.sendQuery("aa"); // query for only one result
},
testGetListItemDataObject: function() {
this.data = [{name:"aaa",id:1},{name:"abc",id:2},{name:"axyz",id:3}]
var ac = this.createInstance();
ac.dataSource.responseSchema = {fields:["name", "id"]};
ac.resultTypeList = false;
ac.formatResult = function(oResultData, sQuery, sResultMatch) {
Assert.areSame("axyz", oResultData.name);
Assert.areSame(3, oResultData.id);
Assert.areSame("ax", sQuery);
Assert.areSame("axyz", sResultMatch);
};
ac.sendQuery("ax"); // query for only one result
},
testGenerateRequestXHR: function() {
this.data = "http://path/to/server";
var ac = this.createInstance();
var request = ac.generateRequest("abc");
Assert.areSame("?query=abc", request);
ac.dataSource.scriptQueryAppend = "foo=bar"; // backward compatibility
request = ac.generateRequest("abc");
Assert.areSame("?query=abc&foo=bar", request);
ac.dataSource.scriptQueryParam = "search"; // backward compatibility
request = ac.generateRequest("abc");
Assert.areSame("?search=abc&foo=bar", request);
ac.queryQuestionMark = false;
ac.dataSource.liveData = "http://path/to/server?";
request = ac.generateRequest("abc");
Assert.areSame("search=abc&foo=bar", request);
}
};
var acApiTest = new AutoCompleteTestCase(acApiTemplate);
YAHOO.util.Event.addListener(window, "load", function() {
var logger = new TestLogger();
var acsuite = new TestSuite("AutoComplete Test Suite");
acsuite.add(acApiTest);
TestRunner.add(acsuite);
YAHOO.util.Event.addListener("btnRun", "click", function(){TestRunner.run();});
YAHOO.util.Dom.get("btnRun").disabled = false;
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
}
TestRunner.run();
});
})();
</script>
</body>
</html>

View file

@ -1,163 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Button activeElement Test</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css" />
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css" />
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<style type="text/css">
#button-example-form fieldset {
border: 2px groove #ccc;
margin: .5em;
padding: .5em;
}
#menubutton3menu,
#menubutton4menu {
position: absolute;
visibility: hidden;
border: solid 1px #000;
padding: .5em;
background-color: #ccc;
}
#button-example-form-postdata {
border: dashed 1px #666;
background-color: #ccc;
padding: 1em;
}
#button-example-form-postdata h2 {
margin: 0 0 .5em 0;
padding: 0;
border: none;
}
</style>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event,
Dom = YAHOO.util.Dom;
Event.onDOMReady(function () {
var logReader = new YAHOO.widget.LogReader();
// Create a Button using an existing <input> and <select> element.
// Because the "type" attribute of the <input> element was set to
// "submit" - clicking on any MenuItem in the Button's Menu will
// automatically submit the Button's parent <form>.
var oMenuButton1 = new YAHOO.widget.Button("menubutton1",
{ type: "menu", menu: "menubutton1select" });
// "render" event handler for the Button's Menu
var onMenuRender = function (p_sType, p_aArgs) {
this.addItems([
{ text: "Four", value: 4 },
{ text: "Five", value: 5 }
]);
};
// Add some additional MenuItems to the Button's Menu once it has
// been rendered
oMenuButton1.getMenu().subscribe("render", onMenuRender);
// "submit" event handler for the <form>
var onExampleSubmit = function(p_oEvent) {
var bSubmit =
window.confirm("Are you sure you want to submit the form?");
if(!bSubmit) {
Event.preventDefault(p_oEvent);
}
};
// Add a "submit" event handler to the <form> to confirm that
// clicking on one of the MenuItems in the Button's Menu
// submits the <form>.
Event.on("button-example-form", "submit", onExampleSubmit);
Event.on("text-field-1", "keydown", function (event) {
YAHOO.log("keydown: " + Event.getCharCode(event));
});
});
}());
</script>
</head>
<body class=" yui-skin-sam">
<h1>Button activeElement Test</h1>
<p>Test case for <a href="http://yuilibrary.com/projects/yui2/ticket/2528245">bug 2528245</a>.</p>
<p>
Clicking on the text box when the Button's Menu is open should result in the Menu closing,
the Button blurring and the text box being focused and becoming the activeElement.
After mousing down on the text box, it should have a black outline and
should fire key events.
</p>
<form id="button-example-form" name="button-example-form" method="post">
<input type="submit" id="menubutton1" name="menubutton1_button" value="Menu Button 1">
<select id="menubutton1select" name="menubutton1select">
<option value="0">One</option>
<option value="1">Two</option>
<option value="2">Three</option>
</select>
<input type="text" id="text-field-1" name="text-field-1">
</form>
</body>
</html>

View file

@ -1,81 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Button Click Label Test</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css">
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var oButton1 = new YAHOO.widget.Button("checkbox-1");
var oButton2 = new YAHOO.widget.Button("checkbox-2");
var oButton3 = new YAHOO.widget.Button("checkbox-3");
var oButton4 = new YAHOO.widget.Button("radio-1");
var oButton5 = new YAHOO.widget.Button("radio-2");
var oButton6 = new YAHOO.widget.Button("radio-3");
var buttonGroup = new YAHOO.widget.ButtonGroup("buttongroup1");
});
</script>
</head>
<body class="yui-skin-sam">
<h1>Button Click Label Test</h1>
<p>Test case for <a href="http://yuilibrary.com/projects/yui2/ticket/2527640">bug 2527640</a>.</p>
<p>Clicking on the <code>&#60;label&#62;</code> for each Button instance should both focus and check or uncheck the Button.</p>
<form id="form-1" method="post">
<fieldset>
<legend>Checkboxes</legend>
<label for="checkbox-1">Checkbox 1</label>
<input type="checkbox" name="checkbox-1" id="checkbox-1" value="1">
<label for="checkbox-2">Checkbox 2</label>
<input type="checkbox" name="checkbox-2" id="checkbox-2" value="2">
<label for="checkbox-3">Checkbox 3</label>
<input type="checkbox" name="checkbox-3" id="checkbox-3" value="3">
</fieldset>
<fieldset>
<legend>Radio Buttons</legend>
<label for="radio-1">Radio 1</label>
<input type="radio" name="radio-field" id="radio-1" value="1">
<label for="radio-2">Radio 2</label>
<input type="radio" name="radio-field" id="radio-2" value="2">
<label for="radio-3">Radio 3</label>
<input type="radio" name="radio-field" id="radio-3" value="3">
<div id="buttongroup1" class="yui-buttongroup">
<label for="radio-4">Radio Group<label>
<input id="radio-4" type="radio" name="radiofield4" value="Radio 4">
<input id="radio-5" type="radio" name="radiofield5" value="Radio 5">
<input id="radio-6" type="radio" name="radiofield6" value="Radio 6">
<input id="radio-7" type="radio" name="radiofield6" value="Radio 7">
</div>
</fieldset>
</form>
</body>
</html>

View file

@ -1,82 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Button Label Replace Test</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css">
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css">
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var oButton1 = new YAHOO.widget.Button("checkbox-1", { replaceLabel: true });
var oButton2 = new YAHOO.widget.Button("checkbox-2", { replaceLabel: true });
var oButton3 = new YAHOO.widget.Button("checkbox-3", { replaceLabel: true });
var oButton4 = new YAHOO.widget.Button("radio-1", { replaceLabel: true });
var oButton5 = new YAHOO.widget.Button("radio-2", { replaceLabel: true });
var oButton6 = new YAHOO.widget.Button("radio-3", { replaceLabel: true });
YAHOO.util.Event.on("destroy-1", "click", function (event) {
oButton1.destroy();
oButton2.destroy();
oButton3.destroy();
oButton4.destroy();
oButton5.destroy();
oButton6.destroy();
});
});
</script>
</head>
<body class="yui-skin-sam">
<h1>Button Label Replace Test</h1>
<p>Test case for <a href="http://yuilibrary.com/projects/yui2/ticket/1897085">bug 1897085</a>.</p>
<p>The text label for each Button should be the text of its corresponding <code>&#60;label&#60;</code>.</p>
<form id="form-1" method="post">
<fieldset>
<legend>Checkboxes</legend>
<label for="checkbox-1">Checkbox 1</label>
<input type="checkbox" name="checkbox-1" id="checkbox-1" value="1">
<label for="checkbox-2">Checkbox 2</label>
<input type="checkbox" name="checkbox-2" id="checkbox-2" value="2">
<label for="checkbox-3">Checkbox 3</label>
<input type="checkbox" name="checkbox-3" id="checkbox-3" value="3">
</fieldset>
<fieldset>
<legend>Radio Buttons</legend>
<label for="radio-1">Radio 1</label>
<input type="radio" name="radio-field" id="radio-1" value="1">
<label for="radio-2">Radio 2</label>
<input type="radio" name="radio-field" id="radio-2" value="2">
<label for="radio-3">Radio 3</label>
<input type="radio" name="radio-field" id="radio-3" value="3">
</fieldset>
<input type="button" name="destroy-1" id="destroy-1" value="Destroy All">
</form>
</body>
</html>

View file

@ -1,144 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Button</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css">
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css">
<style type="text/css">
#buttons-container {
width: 1000px;
background-color: #fc3;
margin: 300px 100px;
}
#alignment-controls {
position: absolute;
top: 0;
left: 0;
background-color: #ccc;
padding: 10px;
}
</style>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<script type="text/javascript">
(function () {
var Dom = YAHOO.util.Dom,
Event = YAHOO.util.Event,
aMenuItems = [];
for (var i = 0; i < 25; i++) {
aMenuItems[i] = "Menu Item " + i;
}
Event.onDOMReady(function () {
var positionAlignmentControls = function () {
YAHOO.util.Dom.setXY("alignment-controls", [0, Dom.getDocumentScrollTop()]);
};
var setMenuAlignment = function () {
var menuCorner = Dom.get("menu-corner"),
buttonCorner = Dom.get("button-corner"),
alignment = [menuCorner.value, buttonCorner.value];
oButton1.set("menualignment", alignment);
oButton2.set("menualignment", alignment);
oButton3.set("menualignment", alignment);
oButton4.set("menualignment", alignment);
};
var oButton1 = new YAHOO.widget.Button({
label: "Button 1",
type: "menu",
menu: aMenuItems,
menumaxheight: 200,
container: "buttons-container"
});
var oButton2 = new YAHOO.widget.Button({
label: "Button 2",
type: "menu",
menu: aMenuItems,
container: "buttons-container"
});
var oButton3 = new YAHOO.widget.Button({
label: "Button 3",
type: "menu",
menu: aMenuItems,
menumaxheight: 200,
lazyloadmenu: false,
container: "buttons-container"
});
var oButton4 = new YAHOO.widget.Button({
label: "Button 4",
type: "menu",
menu: aMenuItems,
lazyloadmenu: false,
container: "buttons-container"
});
positionAlignmentControls();
setMenuAlignment();
YAHOO.widget.Overlay.windowScrollEvent.subscribe(positionAlignmentControls);
Event.on("set-menu-alignment", "click", setMenuAlignment);
});
}());
</script>
</head>
<body class="yui-skin-sam">
<div id="buttons-container"></div>
<fieldset id="alignment-controls">
<legend>Menu Alignment Controls</legend>
<label for="menu-corner">Menu Corner</label>
<select id="menu-corner">
<option value="tl">tl<option>
<option value="tr">tr<option>
<option selected value="bl">bl<option>
<option value="br">br<option>
</select>
<label for="button-corner">Button Corner</label>
<select id="button-corner">
<option selected value="tl">tl<option>
<option value="tr">tr<option>
<option value="bl">bl<option>
<option value="br">br<option>
</select>
<button id="set-menu-alignment">Set Menu Alignment</button>
</fieldset>
</body>
</html>

View file

@ -1,97 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<title>YUI Button Test Case</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts.css">
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css">
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css">
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
</head>
<body class="yui-skin-sam">
<h1>YUI Button Test Case</h1>
<p>Test case for <a href="http://yuilibrary.com/projects/yui2/ticket/2527968" title="#2527968 Opening a menu button menu fires a selectedMenuItemChange :: YUI 2.x :: YUI Library">Bug 2527968</a>. Clicking on the Menu Button below should NOT result in an alert popping up when the Menu is made visible.</p>
<input type="button" class="menuButton" id="state1" value="State 1">
<select id="state1Select">
<option value="04000US01">Alabama</option>
<option value="04000US02">Alaska</option>
<option value="04000US04">Arizona</option>
<option value="04000US05">Arkansas</option>
<option value="04000US06">California</option>
<option value="04000US08">Colorado</option>
<option value="04000US09">Connecticut</option>
<option value="04000US10">Delaware</option>
<option value="04000US11">DC</option>
<option value="04000US12">Florida</option>
<option value="04000US13">Georgia</option>
<option value="04000US15">Hawaii</option>
<option value="04000US16">Idaho</option>
<option value="04000US17">Illinois</option>
<option value="04000US18">Indiana</option>
<option value="04000US19">Iowa</option>
<option value="04000US20">Kansas</option>
<option value="04000US21">Kentucky</option>
<option value="04000US22">Louisiana</option>
<option value="04000US23">Maine</option>
<option value="04000US24">Maryland</option>
<option value="04000US25">Massachusetts</option>
<option value="04000US26">Michigan</option>
<option value="04000US27">Minnesota</option>
<option value="04000US28">Mississippi</option>
<option value="04000US29">Missouri</option>
<option value="04000US30">Montana</option>
<option value="04000US31">Nebraska</option>
<option value="04000US32">Nevada</option>
<option value="04000US33">New Hampshire</option>
<option value="04000US34">New Jersey</option>
<option value="04000US35">New Mexico</option>
<option value="04000US36">New York</option>
<option value="04000US37">North Carolina</option>
<option value="04000US38">North Dakota</option>
<option value="04000US39">Ohio</option>
<option value="04000US40">Oklahoma</option>
<option value="04000US41">Oregon</option>
<option value="04000US42">Pennsylvania</option>
<option value="04000US72">Puerto Rico</option>
<option value="04000US44">Rhode Island</option>
<option value="04000US45">South Carolina</option>
<option value="04000US46">South Dakota</option>
<option value="04000US47">Tennessee</option>
<option value="04000US48">Texas</option>
<option value="04000US49">Utah</option>
<option value="04000US50">Vermont</option>
<option value="04000US51">Virginia</option>
<option value="04000US53">Washington</option>
<option value="04000US54">West Virginia</option>
<option value="04000US55">Wisconsin</option>
<option value="04000US56">Wyoming</option>
</select>
<script type="text/javascript">
(function () {
var oButton = new YAHOO.widget.Button("state1", { type: "menu", menu: "state1Select" });
oButton.on("selectedMenuItemChange", function (event) {
alert(event.type);
});
}());
</script>
</body>
</html>

View file

@ -1,130 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>YUI Button + Connection Manager Test Page</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css">
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css">
<style type="text/css">
#logger {
position: absolute;
left: 0;
bottom: 0;
}
#log {
width: 600px;
height: 200px;
}
</style>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<!-- <script type="text/javascript" src="../js/button.js"></script>
<script type="text/javascript" src="../js/buttongroup.js"></script> -->
<script type="text/javascript" src="../../../build/connection/connection-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event,
Dom = YAHOO.util.Dom;
Event.onContentReady("form-1", function () {
var oButton1 = new YAHOO.widget.Button("menubutton1", { type: "menu", menu: "menubutton1select" });
var oButton2 = new YAHOO.widget.Button("menubutton2", { type: "menu", menu: "menubutton2select" });
});
var logData = function () {
YAHOO.widget.Button.addHiddenFieldsToForm();
var sFormData = YAHOO.util.Connect.setForm("form-1");
Dom.get("log").value = sFormData.split("&").join("\r");
};
Event.on("button-1", "click", function () {
var oForm = Dom.get("form-1");
console.log(oForm.elements.length);
logData();
console.log(oForm.elements.length);
});
Event.on("form-1", "submit", function (event) {
// Prevent the form from submitting since the data will be
// posted via Connection Manager
Event.preventDefault(event);
var oForm = Dom.get("form-1");
console.log(oForm.elements.length);
logData();
console.log(oForm.elements.length);
});
}());
</script>
</head>
<body class="yui-skin-sam">
<form name="form-1" id="form-1" method="post">
<input type="submit" id="menubutton1" name="menubutton1_button" value="Menu Button 1">
<select id="menubutton1select" name="menubutton1select">
<option value="0">One</option>
<option value="1">Two</option>
<option value="2">Three</option>
</select>
<input type="button" id="menubutton2" name="menubutton2_button" value="Menu Button 2">
<select id="menubutton2select" name="menubutton2select">
<option value="0">One</option>
<option value="1">Two</option>
<option value="2">Three</option>
</select>
<div>
<input id="button-2" type="submit" value="Log Data After Submit">
</div>
</form>
<button id="button-1" type="button">Log Data</button>
<div id="logger">
<h2>Form Data</h2>
<textarea id="log"></textarea>
</div>
</body>
</html>

View file

@ -1,114 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Button YUI Prefix Test</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css" />
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css" />
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<script type="text/javascript">
(function () {
var Button = YAHOO.widget.Button;
Button.prototype.CLASS_NAME_PREFIX = "pre-";
YAHOO.widget.ButtonGroup.prototype.CLASS_NAME_PREFIX = "pre-";
YAHOO.util.Event.onDOMReady(function () {
var pushButton = new Button("push-1");
var submitButton = new Button("submit-1");
var resetButton = new Button("reset-1");
var linkButton = new Button("link-1");
var check1 = new Button("checkbox-1");
var check2 = new Button("checkbox-2");
var radio1 = new Button("radio-1");
var radio2 = new Button("radio-2");
var buttonGroup = new YAHOO.widget.ButtonGroup("buttongroup-1");
var menuButton = new Button("menu-button-1", { type: "menu", menu: "menu-button-1-select" });
var splitButton = new Button("split-button-1", { type: "menu", menu: "split-button-1-select" });
});
}());
</script>
</head>
<body class="yui-skin-sam">
<input type="button" id="push-1" name="push-1" value="Add">
<input type="button" id="submit-1" name="submit-1" value="Submit">
<input type="button" id="reset-1" name="reset-1" value="Reset">
<a id="link-1" href="http://www.yahoo.com">Yahoo!</a>
<input id="checkbox-1" type="checkbox" name="checkbox-1" value="1" checked>
<input id="checkbox-2" type="checkbox" name="checkbox-1" value="2">
<input id="radio-1" type="radio" name="radio-1" value="1" checked>
<input id="radio-2" type="radio" name="radio-1" value="2">
<div id="buttongroup-1" class="pre-buttongroup">
<span id="radio5" class="pre-button pre-radio-button pre-button-checked">
<span class="first-child">
<button type="button" name="radiofield2" value="Radio 5">
Radio 5
</button>
</span>
</span>
<span id="radio6" class="pre-button pre-radio-button">
<span class="first-child">
<button type="button" name="radiofield2" value="Radio 6">
Radio 6
</button>
</span>
</span>
<span id="radio7" class="pre-button pre-radio-button">
<span class="first-child">
<button type="button" name="radiofield2" value="Radio 7">
Radio 7
</button>
</span>
</span>
<span id="radio8" class="pre-button pre-radio-button">
<span class="first-child">
<button type="button" name="radiofield2" value="Radio 8">
Radio 8
</button>
</span>
</span>
</div>
<input type="button" id="menu-button-1" name="menu-button-1" value="Menu Button">
<select id="menu-button-1-select" name="menu-button-1-select">
<option value="0">One</option>
<option value="1">Two</option>
<option value="2">Three</option>
</select>
<input type="button" id="split-button-1" name="split-button-1" value="Split Button">
<select id="split-button-1-select" name="split-button-1-select">
<option value="0">One</option>
<option value="1">Two</option>
<option value="2">Three</option>
</select>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,80 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>YUI Carousel Unit Tests</title>
<!-- Dependency CSS files -->
<link type="text/css" rel="stylesheet"
href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet"
href="../../../build/yuitest/assets/testlogger.css">
<style type="text/css">
#container, #container2 {
width: 400px;
}
.yui-carousel-element {
margin: 0;
padding: 0;
}
.yui-carousel-element li {
border: none;
margin: 0;
padding: 0;
width: 100px;
}
</style>
<!-- Dependency JS files -->
<script type="text/javascript"
src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript"
src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript"
src="../../../build/event/event-min.js"></script>
<script type="text/javascript"
src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript"
src="../../../build/element/element-min.js"></script>
<script type="text/javascript"
src="../../../build/carousel/carousel-min.js"></script>
<script type="text/javascript"
src="../../../build/yuitest/yuitest-min.js"></script>
<!-- Carousel Test Cases -->
<script type="text/javascript" src="markupTests.js"></script>
<script type="text/javascript" src="scriptTests.js"></script>
<script type="text/javascript" src="protectedMethodTests.js"></script>
<script type="text/javascript">
(function () {
YAHOO.util.Event.onDOMReady(function () {
var logger = new YAHOO.tool.TestLogger(),
tests = YAHOO.CarouselTests;
YAHOO.tool.TestRunner.add(tests.markupTests);
YAHOO.tool.TestRunner.add(tests.scriptTests);
YAHOO.tool.TestRunner.add(tests.protectedMethodTests);
YAHOO.tool.TestRunner.run();
});
})();
</script>
</head>
<body>
<div id="container">
<ol id="carousel">
<li id="item1">One</li>
<li id="item2">Two</li>
<li id="item3">Three</li>
<li id="item4">Four</li>
<li id="item5">Five</li>
</ol>
</div>
<div id="container2"></div>
<div id="container3">
<ul id="carousel3">
<li>Test</li>
</ul>
</div>
<div id="container4"></div>
<div id="container5"></div>
</body>
</html>

View file

@ -1,242 +0,0 @@
(function () {
var ArrayAssert = YAHOO.util.ArrayAssert,
Assert = YAHOO.util.Assert,
carousel, carousel3,
carouselEl, carouselEl3,
Dom = YAHOO.util.Dom,
initFromMarkupTest,
ObjectAssert = YAHOO.util.ObjectAssert;
YAHOO.namespace("CarouselTests");
initFromMarkupTest = new YAHOO.tool.TestCase({
name: "Initialize from markup test",
testCreation: function () {
return Assert.areEqual(true,
Dom.hasClass(carouselEl, "yui-carousel-element"));
},
testCreationFromUl: function () {
return Assert.areEqual(true,
Dom.hasClass(carouselEl3, "yui-carousel-element"));
},
testNumItems: function () {
return Assert.areEqual(5, carousel.get("numItems"));
},
testNumItemsInTable: function () {
return Assert.areEqual(5, carousel._itemsTable.numItems);
},
testitemsInTable: function () {
return Assert.areEqual(5, carousel._itemsTable.items.length);
},
testgetElementForItem: function () {
var actual = [], expected = [], i;
for (i = 0; i < 5; i++) {
expected.push(Dom.get("item" + (i+1)));
actual.push(carousel.getElementForItem(i));
}
return ArrayAssert.itemsAreEqual(expected, actual);
},
testgetElementForItems: function () {
var expected = [], i;
for (i = 0; i < 5; i++) {
expected.push(Dom.get("item" + (i+1)));
}
return ArrayAssert.itemsAreEqual(expected,
carousel.getElementForItems());
},
testgetVisibleItems: function () {
var expected = [], i;
for (i = 0; i < 3; i++) {
expected.push(Dom.get("item" + (i+1)));
}
return ArrayAssert.itemsAreEqual(expected,
carousel.getVisibleItems());
},
testClearItems: function () {
carousel.clearItems();
return Assert.areEqual(0, carousel.get("numItems")) &&
Assert.areEqual(0, carousel._itemsTable.numItems) &&
ArrayAssert.itemsAreEqual([],
carousel._itemsTable.items);
},
testAddItem: function () {
carousel.addItem("Six");
carousel.addItem("Seven", 0);
return Assert.areEqual("Six", carousel.getItem(1).item) &&
Assert.areEqual("Seven", carousel.getItem(0).item);
},
testAddItems: function () {
carousel.addItems([["Eight",0],["Nine",0]]);
return Assert.areEqual("Six", carousel.getItem(3).item) &&
Assert.areEqual("Seven", carousel.getItem(2).item) &&
Assert.areEqual("Eight", carousel.getItem(1).item) &&
Assert.areEqual("Nine", carousel.getItem(0).item);
},
testgetItem: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
}),
els = [], i;
for (i in children) {
els.push(children[i]);
}
return ObjectAssert.propertiesAreEqual({ className: "",
id: els[2].id,
item: "Seven" },
carousel.getItem(2));
},
testgetItems: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
}),
expected = [], i;
function compareItems(a, b) {
return a.className === b.className &&
a.id === b.id && a.item === b.item;
}
for (i in children) {
expected.push({ className: "", id: children[i].id,
item: children[i].innerHTML });
}
return ArrayAssert.itemsAreEquivalent(expected,
carousel.getItems(),
compareItems);
},
testgetItemPositionById: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
});
return Assert.areEqual(2,
carousel.getItemPositionById(children[2].id));
},
testremoveItem: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
}),
item;
item = children[2];
carousel.removeItem(2);
return Assert.areEqual(null, Dom.get(item.id)) &&
Assert.areEqual(3, carousel.get("numItems")) &&
Assert.areEqual(3, carousel._itemsTable.numItems);
},
testScrollForward: function () {
carousel.set("firstVisible", 0);
carousel.addItems([["Ten",0],["Eleven",0],["Twelve",0]]);
carousel.scrollForward();
Assert.areEqual("-100px", carouselEl.style.left);
},
testScrollPageForward: function () {
carousel.set("firstVisible", 0);
carousel.scrollPageForward();
Assert.areEqual("-300px", carouselEl.style.left);
},
testScrollBackward: function () {
carousel.set("firstVisible", 3);
carousel.scrollBackward();
Assert.areEqual("-200px", carouselEl.style.left);
},
testScrollPageBackward: function () {
carousel.set("firstVisible", 3);
carousel.scrollPageBackward();
Assert.areEqual("0px", carouselEl.style.left);
},
testScrollTo: function () {
Dom.setStyle(carouselEl, "left", "");
carousel.scrollTo(3);
Assert.areEqual("-300px", carouselEl.style.left);
},
testSetNumVisible: function () {
var contentEl = carouselEl.parentNode,
num = carousel.get("numItems");
function isSameWidth(el, w) {
return parseInt(el.offsetWidth, 10) == w;
}
if (carousel.get("numVisible") != 3 ||
!isSameWidth(contentEl, 300)) {
return Assert.fail("numVisible should be 3 by default");
}
carousel.set("numVisible", 1);
if (carousel.get("numVisible") != 1 ||
!isSameWidth(contentEl, 100)) {
return Assert.fail("numVisible should be 1 by default");
}
carousel.set("numVisible", num);
if (carousel.get("numVisible") != num ||
!isSameWidth(contentEl, num * 100)) {
return Assert.fail("numVisible should have been " + num);
}
carousel.set("numVisible", 1);
if (carousel.get("numVisible") != 1 ||
!isSameWidth(contentEl, 100)) {
return Assert.fail("numVisible should have been 1");
}
carousel.set("numVisible", 3);
return Assert.areEqual(3, carousel.get("numVisible")) &&
Assert.areEqual(true, areSameWidth(contentEl, 300));
}
});
YAHOO.CarouselTests.markupTests = new YAHOO.tool.TestSuite({
name: "Carousel (from Markup) Tests",
setUp: function () {
carousel = new YAHOO.widget.Carousel("container");
carouselEl = Dom.get("carousel");
carousel.render();
carousel3 = new YAHOO.widget.Carousel("container3", {
carouselEl: "UL" });
carouselEl3 = Dom.get("carousel3");
carousel3.render();
},
tearDown : function () {
delete carousel;
}
});
YAHOO.CarouselTests.markupTests.add(initFromMarkupTest);
})();
/*
;; Local variables: **
;; mode: js2 **
;; indent-tabs-mode: nil **
;; End: **
*/

View file

@ -1,63 +0,0 @@
(function () {
var ArrayAssert = YAHOO.util.ArrayAssert,
Assert = YAHOO.util.Assert,
carousel,
protectedMethods,
ObjectAssert = YAHOO.util.ObjectAssert;
YAHOO.namespace("CarouselTests");
protectedMethods = new YAHOO.tool.TestCase({
testGetValidIndex: function () {
carousel.set("numItems", 9);
Assert.areEqual(0, carousel._getValidIndex(0),
"_getValidIndex(0) should have returned 0");
Assert.areEqual(3, carousel._getValidIndex(3),
"_getValidIndex(3) should have returned 3");
Assert.areEqual(6, carousel._getValidIndex(6),
"_getValidIndex(6) should have returned 6");
Assert.areEqual(8, carousel._getValidIndex(9),
"_getValidIndex(9) should have returned 8");
Assert.areEqual(0, carousel._getValidIndex(-3),
"_getValidIndex(-3) should have returned 0");
carousel.set("numItems", 8);
carousel.set("isCircular", true);
},
testGetValidIndexForCircularCarousel: function () {
carousel.set("numItems", 8);
carousel.set("isCircular", true);
Assert.areEqual(0, carousel._getValidIndex(0),
"_getValidIndex(0) should have returned 0");
Assert.areEqual(3, carousel._getValidIndex(3),
"_getValidIndex(3) should have returned 3");
Assert.areEqual(6, carousel._getValidIndex(6),
"_getValidIndex(6) should have returned 6");
Assert.areEqual(0, carousel._getValidIndex(9),
"_getValidIndex(9) should have returned 0");
Assert.areEqual(6, carousel._getValidIndex(-3),
"_getValidIndex(-3) should have returned 6");
}
});
YAHOO.CarouselTests.protectedMethodTests = new YAHOO.tool.TestSuite({
name: "Carousel (protected methods) Tests",
setUp: function () {
carousel = new YAHOO.widget.Carousel("container5");
},
tearDown : function () {
delete carousel;
}
});
YAHOO.CarouselTests.protectedMethodTests.add(protectedMethods);
})();
/*
;; Local variables: **
;; mode: js2 **
;; indent-tabs-mode: nil **
;; End: **
*/

View file

@ -1,285 +0,0 @@
(function () {
var ArrayAssert = YAHOO.util.ArrayAssert,
Assert = YAHOO.util.Assert,
carousel, carousel4,
carouselEl, carouselEl4,
Dom = YAHOO.util.Dom,
initFromScriptTest,
ObjectAssert = YAHOO.util.ObjectAssert;
YAHOO.namespace("CarouselTests");
initFromScriptTest = new YAHOO.tool.TestCase({
name: "Initialize from script test",
testCreation: function () {
return Assert.areEqual(true,
Dom.hasClass(carouselEl, "yui-carousel-element"));
},
testCreationFromUl: function () {
return Assert.areEqual(true,
Dom.hasClass(carouselEl4, "yui-carousel-element"));
},
testNumItems: function () {
return Assert.areEqual(4, carousel.get("numItems"));
},
testNumItemsInTable: function () {
return Assert.areEqual(4, carousel._itemsTable.numItems);
},
testitemsInTable: function () {
return Assert.areEqual(4, carousel._itemsTable.items.length);
},
testgetElementForItem: function () {
var actual = [], expected = [], i, items;
items = Dom.getChildrenBy(carouselEl, function (node) {
return node.nodeName.toUpperCase() == "LI";
});
if (!items || items.length != 4) {
Assert.fail();
}
for (i = 0; i < items.length; i++) {
actual.push(carousel.getElementForItem(i));
expected.push(items[i]);
}
return ArrayAssert.itemsAreEqual(expected, actual);
},
testgetElementForItems: function () {
var expected = [], i, items;
items = Dom.getChildrenBy(carouselEl, function (node) {
return node.nodeName.toUpperCase() == "LI";
});
if (!items || items.length != 4) {
Assert.fail();
}
for (i in items) {
if (items.hasOwnProperty(i)) {
expected.push(items[i]);
}
}
return ArrayAssert.itemsAreEqual(expected,
carousel.getElementForItems());
},
testgetVisibleItems: function () {
var expected = [], i, j, items;
items = Dom.getChildrenBy(carouselEl, function (node) {
return node.nodeName.toUpperCase() == "LI";
});
if (!items || items.length != 4) {
Assert.fail();
}
j = 0;
for (i in items) {
j++;
if (j > 3) {
break;
}
if (items.hasOwnProperty(i)) {
expected.push(items[i]);
}
}
return ArrayAssert.itemsAreEqual(expected,
carousel.getVisibleItems());
},
testClearItems: function () {
carousel.clearItems();
return Assert.areEqual(0, carousel.get("numItems")) &&
Assert.areEqual(0, carousel._itemsTable.numItems) &&
ArrayAssert.itemsAreEqual([],
carousel._itemsTable.items);
},
testAddItem: function () {
carousel.addItem("Six");
carousel.addItem("Seven", 0);
return Assert.areEqual("Six", carousel.getItem(1).item) &&
Assert.areEqual("Seven", carousel.getItem(0).item);
},
testAddItems: function () {
carousel.addItems([["Eight",0],["Nine",0]]);
return Assert.areEqual("Six", carousel.getItem(3).item) &&
Assert.areEqual("Seven", carousel.getItem(2).item) &&
Assert.areEqual("Eight", carousel.getItem(1).item) &&
Assert.areEqual("Nine", carousel.getItem(0).item);
},
testgetItem: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
}),
els = [], i;
for (i in children) {
els.push(children[i]);
}
return ObjectAssert.propertiesAreEqual({ className: "",
id: els[2].id,
item: "Seven" },
carousel.getItem(2));
},
testgetItems: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
}),
expected = [], i;
function compareItems(a, b) {
return a.className === b.className &&
a.id === b.id && a.item === b.item;
}
for (i in children) {
expected.push({ className: "", id: children[i].id,
item: children[i].innerHTML });
}
return ArrayAssert.itemsAreEquivalent(expected,
carousel.getItems(),
compareItems);
},
testgetItemPositionById: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
});
return Assert.areEqual(2,
carousel.getItemPositionById(children[2].id));
},
testremoveItem: function () {
var children = Dom.getChildrenBy(carouselEl,
function (node) {
return node.nodeName.toUpperCase() == "LI";
}),
item;
item = children[2];
carousel.removeItem(2);
return Assert.areEqual(null, Dom.get(item.id)) &&
Assert.areEqual(3, carousel.get("numItems")) &&
Assert.areEqual(3, carousel._itemsTable.numItems);
},
testScrollForward: function () {
carousel.addItems([["Ten",0],["Eleven",0],["Twelve",0]]);
carousel.scrollForward();
Assert.areEqual("-100px", carouselEl.style.left);
},
testScrollPageForward: function () {
carousel.set("firstVisible", 0);
carousel.scrollPageForward();
Assert.areEqual("-300px", carouselEl.style.left);
},
testScrollBackward: function () {
carousel.set("firstVisible", 3);
carousel.scrollBackward();
Assert.areEqual("-200px", carouselEl.style.left);
},
testScrollPageBackward: function () {
carousel.set("firstVisible", 3);
carousel.scrollPageBackward();
Assert.areEqual("0px", carouselEl.style.left);
},
testScrollTo: function () {
Dom.setStyle(carouselEl, "left", "");
carousel.scrollTo(3);
Assert.areEqual("-300px", carouselEl.style.left);
},
testSetNumVisible: function () {
var contentEl = carouselEl.parentNode,
num = carousel.get("numItems");
function isSameWidth(el, w) {
return parseInt(Dom.getStyle(el, "width"), 10) == w;
}
if (carousel.get("numVisible") != 3 ||
!isSameWidth(contentEl, 300)) {
return Assert.fail("numVisible should be 3 by default");
}
carousel.set("numVisible", 1);
if (carousel.get("numVisible") != 1 ||
!isSameWidth(contentEl, 100)) {
return Assert.fail("numVisible should be 1 by default");
}
carousel.set("numVisible", num);
if (carousel.get("numVisible") != num ||
!isSameWidth(contentEl, num * 100)) {
return Assert.fail("numVisible should have been " + num);
}
carousel.set("numVisible", 1);
if (carousel.get("numVisible") != 1 ||
!isSameWidth(contentEl, 100)) {
return Assert.fail("numVisible should have been 1");
}
carousel.set("numVisible", 3);
return Assert.areEqual(3, carousel.get("numVisible")) &&
Assert.areEqual(true, areSameWidth(carouselEl, 300));
}
});
YAHOO.CarouselTests.scriptTests = new YAHOO.tool.TestSuite({
name: "Carousel (from Script) Tests",
setUp: function () {
var items;
carousel = new YAHOO.widget.Carousel("container2");
carousel.addItems([["One"], ["Two"], ["Three"], ["Four"]]);
carousel.render();
items = Dom.getElementsByClassName("yui-carousel-element",
"OL", carousel.get("element"));
if (YAHOO.lang.isArray(items) && items.length == 1) {
carouselEl = items[0];
}
carousel4 = new YAHOO.widget.Carousel("container4", {
carouselEl: "UL" });
carousel4.render();
items = Dom.getElementsByClassName("yui-carousel-element",
"UL", carousel4.get("element"));
if (YAHOO.lang.isArray(items) && items.length == 1) {
carouselEl4 = items[0];
}
},
tearDown : function () {
delete carousel;
}
});
YAHOO.CarouselTests.scriptTests.add(initFromScriptTest);
})();
/*
;; Local variables: **
;; mode: js2 **
;; indent-tabs-mode: nil **
;; End: **
*/

View file

@ -1,167 +0,0 @@
<!doctype html>
<html>
<head>
<title>Slider/ColorPicker Test Suite</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/colorpicker/assets/skins/sam/colorpicker.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<style type="text/css" class="highlight-ignore">
#picker-container {
background:#ccc;
height:100px;
width:100px;
}
.highlight-example {
margin-top: 100px;
}
</style>
</head>
<body class="yui-skin-sam">
<div id="doc">
<div id="picker-container">picker</div>
<div id="picker-container2">picker #2</div>
</div>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop-min.js"></script>
<script type="text/javascript" src="../../../build/slider/slider.js"></script>
<script type="text/javascript" src="../../../build/colorpicker/colorpicker-debug.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript">
(function() {
var Event = YAHOO.util.Event,
Dom = YAHOO.util.Dom,
tool = YAHOO.tool,
Assert = YAHOO.util.Assert,
ArrayAssert = YAHOO.util.ArrayAssert,
UserAction = YAHOO.util.UserAction,
suite = new tool.TestSuite("slider_and_picker_suite");
Event.onDOMReady(function() {
var logger = new tool.TestLogger();
picker = new YAHOO.widget.ColorPicker('picker-container', {
"showhsvcontrols": true,
"showhexcontrols": true,
images : {
PICKER_THUMB : '../../../build/colorpicker/assets/picker_thumb.png',
HUE_THUMB : '../../../build/colorpicker/assets/hue_thumb.png'
}
}),
elPicker = document.getElementById('picker-container');
var _verifyState = function(o) {
o.r && Assert.areEqual(o.r, picker.get('red'), 'incorrect R');
o.g && Assert.areEqual(o.g, picker.get('green'), 'incorrect G');
o.b && Assert.areEqual(o.b, picker.get('blue'), 'incorrect B');
o.h && Assert.areEqual(o.h, picker.get('hue'), 'incorrect H');
o.s && Assert.areEqual(o.s, picker.get('saturation'), 'incorrect S');
o.v && Assert.areEqual(o.v, picker.get('value'), 'incorrect V');
o.hex && Assert.areEqual(o.hex, picker.get('hex'), 'incorrect hex');
o.rgb && ArrayAssert.itemsAreEqual(o.rgb, picker.get('rgb'), 'incorrect rgb');
o.websafe && ArrayAssert.itemsAreEqual(o.websafe, picker.get('websafe'), 'incorrect websafe');
};
suite.add( new tool.TestCase({
name: 'slider_and_picker_test',
test_getElement: function() {
Assert.areEqual(elPicker, picker.get('element'), 'incorrect element');
},
test_setAttribute: function() {
picker.set("red", 10);
_verifyState({
r: 10, g: 255, b: 255, h: 180, s: 96, v: 100,
hex: "0AFFFF", rgb: [10, 255, 255], websafe: [0, 255, 255]
});
},
test_updateField: function() {
var el = Dom.get("yui-picker-g");
el.value = 10;
UserAction.keydown(el, {
keyCode: 13
});
_verifyState({
r: 10, g: 10, b: 255, h: 240, s: 96, v: 100,
hex: "0A0AFF", rgb: [10, 10, 255], websafe: [0, 0, 255]
});
},
test_setValue: function() {
picker.setValue([45, 58, 42]);
_verifyState({
r: 45, g: 58, b: 42, h: 109, s: 28, v: 23,
hex: "2D3A2A", rgb: [45, 58, 42], websafe: [51, 51, 51]
});
},
test_websafeClick: function() {
UserAction.click("yui-picker-websafe-swatch");
_verifyState({
r: 51, g: 51, b: 51, h: 0, s: 0, v: 20,
hex: "333333", rgb: [51, 51, 51], websafe: [51, 51, 51]
});
},
_test_pickerClick: function() {
UserAction.mousedown("yui-picker-bg", {
clientX: 50,
clientY: 50
});
UserAction.mousemove("yui-picker-bg", {
clientX: 55,
clientY: 55
});
UserAction.mouseup("yui-picker-bg", {
clientX: 60,
clientY: 60
});
_verifyState({
r: 51, g: 51, b: 51, h: 0, s: 0, v: 20,
hex: "333333", rgb: [51, 51, 51], websafe: [51, 51, 51]
});
},
test_animateConfig : function () {
var picker2 = new YAHOO.widget.ColorPicker('picker-container2',{
animate : false
});
Assert.areEqual(false,picker2.pickerSlider.animate);
Assert.areEqual(false,picker2.hueSlider.animate);
}
}));
tool.TestRunner.add(suite);
if (parent && parent != window) {
tool.TestManager.load();
} else {
tool.TestRunner.run();
}
});
})();
</script>
<script src="/assets/dpSyntaxHighlighter.js"></script>
<script src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,103 +0,0 @@
<html>
<head>
<title>YUI Library Master Test Page</title>
<link type="text/css" rel="stylesheet" href="../../../build/fonts/fonts.css" />
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript" src="../../../build/json/json.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<style>
#out {
}
</style>
</head>
<body class="yui-skin-sam">
<h1>YUI Library Master Test Page</h1>
<script type="text/javascript">
(function() {
function log(msg) {
var d=document, b=d.getElementById("out"), n=d.createElement("div");
if (b) {
n.appendChild(d.createTextNode(msg));
b.appendChild(n);
}
}
var TM = YAHOO.tool.TestManager;
YAHOO.util.Event.onDOMReady(function (){
YAHOO.tool.TestManager.setPages([
"../../animation/tests/animation.html",
"../../cookie/tests/cookie.html",
"../../container/tests/config.html",
"../../calendar/tests/datemath.html",
"../../dom/tests/dom.html",
"../../dragdrop/tests/index.html",
"../../element/tests/element.html",
"../../imageloader/tests/imageloader.html",
"../../container/tests/module.html",
"../../profiler/tests/profiler.html",
"../../tabview/tests/tabview.html",
"../../yahoo/tests/yahoo.html",
"../../yuitest/tests/yuitest.html"
// "../../autocomplete/tests/autocomplete.html",
// "../../calendar/tests/calendar.html",
// "../../datasource/tests/datasource.html",
// "../../editor/tests/editor.html",
// "../../logger/tests/logger.html",
// "../../yuiloader/tests/yuiloader.html",
// "../../yuiloader/tests/yuiloader_config.html",
// "../../yuiloader/tests/yuiloader_rollup.html",
]);
TM.subscribe(TM.TEST_MANAGER_COMPLETE_EVENT, function(o) {
log("# of pages passed: " + o.passedPages.length);
log("# of pages failed: " + o.failedPages.length + ": " + o.failedPages.join(", "));
log("# of tests passed: " + o.passed);
log("# of tests failed: " + o.failed);
if (location.search.length > 0){
var params = location.search.substring(1).split("&");
var url = null;
var format = YAHOO.tool.TestFormat.XML;
for (var i=0; i < params.length; i++){
if (params[i].indexOf("report=") == 0){
url = decodeURIComponent(params[i].substring(params[i].indexOf("=") + 1));
} else if (params[i] == "format=json"){
format = YAHOO.tool.TestFormat.JSON;
}
}
if (url !== null){
var reporter = new YAHOO.tool.TestReporter(url, format);
reporter.report(o);
}
}
});
TM.start();
});
})();
</script>
<div id="out"></div>
</body>
</html>

View file

@ -1,635 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<link type="text/css" rel="stylesheet" href="../../../build/paginator/assets/skins/sam/paginator.css">
<style type="text/css" class="highlight-ignore">
h1 {
font: normal 125%/1.4 Arial, sans-serif;
}
.yui-log {
display: inline;
float: right;
position: relative;
}
.yui-log-container {
width: 300px;
}
.yui-log .yui-log-bd {
height: 525px;
}
.yui-log .yui-log-ft {
position: static;
}
.highlight-example {
display: inline;
float: left;
width: 650px;
}
.highlight-example h2 {
display: none;
}
.yui-log-bd h3 {
border-bottom: 1px solid #ccc;
color: #900;
margin: 0;
padding: 1em 0 0 1ex;
}
#frm {
height: 50px;
overflow: auto;
}
#frm label {
display: block;
}
</style>
</head>
<body class="yui-skin-sam">
<h1>Tests</h1>
<div id="testbed"></div>
<form id="frm" action="submitReporter.php">
<input type="text" name="foo" value="bar">
<input type="checkbox" name="c0[]">
<input type="checkbox" name="c0[]">
<input type="checkbox" name="c0[]">
<input type="checkbox" name="c1[]" checked="checked">
<input type="checkbox" name="c1[]">
<input type="checkbox" name="c1[]">
<input type="checkbox" name="c2[]" value="C2.1" checked="checked">
<input type="checkbox" name="c2[]" value="C2.2">
<input type="checkbox" name="c2[]" value="C2.3">
<input type="checkbox" name="c3[]" value="C3.1" checked="checked">
<input type="checkbox" name="c3[]" value="C3.2" checked="checked">
<input type="checkbox" name="c3[]" value="C3.3" checked="checked">
<label for="c4.1"><input type="checkbox" id="c4.1" name="c4[]"> C4.1</label>
<label for="c4.2"><input type="checkbox" id="c4.2" name="c4[]" checked="checked"> C4.2</label>
<label for="c4.3"><input type="checkbox" id="c4.3" name="c4[]"> C4.3</label>
<input type="radio" name="r0">
<input type="radio" name="r0">
<input type="radio" name="r0">
<input type="radio" name="r1">
<input type="radio" name="r1" checked="checked">
<input type="radio" name="r1">
<input type="radio" name="r2" value="R2.1">
<input type="radio" name="r2" value="R2.2" checked="checked">
<input type="radio" name="r2" value="R2.3">
<label for="r3.1"><input type="radio" id="r3.1" name="r3"> R3.1</label>
<label for="r3.2"><input type="radio" id="r3.2" name="r3" checked="checked"> R3.2</label>
<label for="r3.3"><input type="radio" id="r3.3" name="r3"> R3.3</label>
<label for="r4.1"><input type="radio" id="r4.1" name="r4" value="R4.1"> lblR4.1</label>
<label for="r4.2"><input type="radio" id="r4.2" name="r4" value="R4.2" checked="checked"> lblR4.2</label>
<label for="r4.3"><input type="radio" id="r4.3" name="r4" value="R4.3"> lblR4.3</label>
<label><select name="s0">
<option value="A">a</option>
<option value="B">b</option>
<option value="C">c</option>
</select> (s0) Single select, all values, no selected via js</label>
<label><select name="s1">
<option>a</option>
<option>b</option>
<option>c</option>
</select> (s1) Single select, no values, no selected</label>
<label><select name="s2">
<option value="A">a</option>
<option value="B">b</option>
<option value="C">c</option>
</select> (s2) Single select, all values, no selected</label>
<label><select name="s3">
<option>a</option>
<option>b</option>
<option value="C">c</option>
</select> (s3) Single select, some values, no selected</label>
<label><select name="s4">
<option>a</option>
<option selected="selected">b</option>
<option>c</option>
</select> (s4) Single select, no values, selected</label>
<label><select name="s5">
<option value="A">a</option>
<option value="B" selected="selected">b</option>
<option value="C">c</option>
</select> (s5) Single select, all values, selected</label>
<label><select name="s6">
<option>a</option>
<option selected="selected">b</option>
<option value="C">c</option>
</select> (s6) Single select, some values, non-val selected</label>
<label><select name="s7">
<option>a</option>
<option>b</option>
<option value="C" selected="selected">c</option>
</select> (s7) Single select, some values, val selected</label>
<label><select name="s8"></select> (s8) Single select, no options</label>
<label><select name="m1[]" multiple="multiple">
<option>a</option>
<option>b</option>
<option>c</option>
</select> (m1) Multiple select, no values, no selected</label>
<label><select name="m2[]" multiple="multiple">
<option value="A">a</option>
<option value="B">b</option>
<option value="C">c</option>
</select> (m2) Multiple select, all values, no selected</label>
<label><select name="m3[]" multiple="multiple">
<option>a</option>
<option>b</option>
<option value="C">c</option>
</select> (m3) Multiple select, some values, no selected</label>
<label><select name="m4[]" multiple="multiple">
<option>a</option>
<option selected="selected">b</option>
<option>c</option>
</select> (m4) Multiple select, no values, 1 selected</label>
<label><select name="m5[]" multiple="multiple">
<option value="A">a</option>
<option value="B" selected="selected">b</option>
<option value="C">c</option>
</select> (m5) Multiple select, all values, selected</label>
<label><select name="m6[]" multiple="multiple">
<option>a</option>
<option selected="selected">b</option>
<option value="C">c</option>
</select> (m6) Multiple select, some values, non-val selected</label>
<label><select name="m7[]" multiple="multiple">
<option>a</option>
<option>b</option>
<option value="C" selected="selected">c</option>
</select> (m7) Multiple select, some values, val selected</label>
<label><select name="m8[]" multiple="multiple">
<option>a</option>
<option selected="selected">b</option>
<option selected="selected">c</option>
</select> (m8) Multiple select, no values, 2 selected</label>
<label><select name="m9[]" multiple="multiple">
<option value="A">a</option>
<option value="B" selected="selected">b</option>
<option value="C" selected="selected">c</option>
</select> (m9) Multiple select, all values, 2 selected</label>
<label><select name="m10[]" multiple="multiple">
<option selected="selected">a</option>
<option selected="selected">b</option>
<option value="C">c</option>
</select> (m10) Multiple select, some values, 2 non-val selected</label>
<label><select name="m11[]" multiple="multiple">
<option>a</option>
<option value="B" selected="selected">b</option>
<option value="C" selected="selected">c</option>
</select> (m11) Multiple select, some values, 2 val selected</label>
<label><select name="m12[]" multiple="multiple">
<option>a</option>
<option selected="selected">b</option>
<option value="C" selected="selected">c</option>
</select> (m12) Multiple select, some values, 1 val, 1 non-val selected</label>
<label><select name="m13[]" multiple="multiple"></select> (m13) Multiple select, no options</label>
<input type="submit" name="submit" value="Submit">
</form>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript" src="../../../build/connection/connection.js"></script>
<script type="text/javascript" src="../../../build/json/json.js"></script>
<script type="text/javascript">
(function () {
var t = YAHOO.tool,
u = YAHOO.util,
w = YAHOO.widget,
TestSuite = t.TestSuite,
TestCase = t.TestCase,
TestLogger = t.TestLogger,
TestRunner = t.TestRunner,
Event = u.Event,
Dom = u.Dom,
Assert = u.Assert,
AAssert = u.ArrayAssert,
OAssert = u.ObjectAssert,
FormAssert,
frm = Dom.get('frm'),
suite;
FormAssert = {
fieldValueIs : function (field,values,message) {
var pass = true,opt,i,x,vals,f,v;
switch (field.type || field[0].type) {
case 'checkbox' :
if (typeof values === 'object') {
vals = {};
for (i=field.length-1; i>=0; --i) {
if (field[i].checked) { vals[field[i].value] = true; }
}
for (i=values.length-1; i>=0; --i) {
// received value not checked in the element
if (!(values[i] in vals)) {
pass = false;
break;
}
delete vals[values[i]];
}
if (pass) {
// Unaccounted for value(s)
for (v in vals) {
if (vals.hasOwnProperty(v)) {
pass = false;
break;
}
}
}
} else {
if ((field[i].value === values && !field[i].checked) ||
(field[i].value !== values && field[i].checked)) {
pass = false;
break;
}
}
break;
case 'radio' :
for (i=field.length-1; i >= 0; --i) {
if ((field[i].value === values && !field[i].checked) ||
(field[i].value !== values && field[i].checked)) {
pass = false;
}
}
break;
case 'select-one':
if (field.selectedIndex > -1) {
opt = field.options[field.selectedIndex],
v = (opt.attributes.value &&
opt.attributes.value.specified) ? opt.value : opt.text;
pass = (v == values);
} else {
pass = false;
}
break;
case 'select-multiple':
vals = {};
for (i=field.options.length-1; i>=0; --i) {
if (field.options[i].selected) {
opt = field.options[i],
v = (opt.attributes.value &&
opt.attributes.value.specified) ?
opt.value : opt.text;
vals[v] = true;
}
}
for (i=values.length-1; i>=0; --i) {
// received value not selected in the element
if (!(values[i] in vals)) {
pass = false;
break;
}
delete vals[values[i]];
}
if (pass) {
// Unaccounted for value(s)
for (v in vals) {
if (vals.hasOwnProperty(v)) {
pass = false;
break;
}
}
}
break;
case 'submit':
case 'text':
pass = (field.value === values);
break;
// ignore other input types (file,reset,button)
}
if (!pass) {
throw new YAHOO.util.AssertionError(Assert._formatMessage(message, "Form field name:values do not match.\n"+(field.name||field[0].name) + "\n" + YAHOO.lang.dump(values)));
}
}
};
suite = new TestSuite("Tests");
suite.add(new TestCase({
name : "setForm",
setUp : function () {
var t = this;
function handler(o) {
t.response = o;
t.resume(t.verify);
}
this.uri = "submitReporter.php";
this.callback = {
success : handler,
failure : handler,
timeout : 3000
};
//TODO: create the form in testbed and destroy it in tearDown
frm.foo.value = "bar";
frm["c0[]"][0].checked =
frm["c0[]"][1].checked =
frm["c0[]"][2].checked =
frm["c1[]"][1].checked =
frm["c1[]"][2].checked =
frm["c2[]"][1].checked =
frm["c2[]"][2].checked =
frm["c4[]"][0].checked =
frm["c4[]"][2].checked =
frm.r0[0].checked =
frm.r0[1].checked =
frm.r0[2].checked =
frm.r1[0].checked =
frm.r1[2].checked =
frm.r2[0].checked =
frm.r2[2].checked =
frm.r3[0].checked =
frm.r3[2].checked =
frm.r4[0].checked =
frm.r4[2].checked = false;
frm["c1[]"][0].checked =
frm["c2[]"][0].checked =
frm["c3[]"][0].checked =
frm["c3[]"][1].checked =
frm["c3[]"][2].checked =
frm["c4[]"][1].checked =
frm.r1[0].checked =
frm.r2[0].checked =
frm.r3[0].checked =
frm.r4[0].checked = true;
frm.s0.options[0].selected =
frm.s0.options[1].selected =
frm.s0.options[2].selected =
frm.s1.options[0].selected =
frm.s1.options[1].selected =
frm.s1.options[2].selected =
frm.s2.options[0].selected =
frm.s2.options[1].selected =
frm.s2.options[2].selected =
frm.s3.options[0].selected =
frm.s3.options[1].selected =
frm.s3.options[2].selected =
frm.s4.options[0].selected =
frm.s4.options[2].selected =
frm.s5.options[0].selected =
frm.s5.options[2].selected =
frm.s6.options[0].selected =
frm.s6.options[2].selected =
frm.s7.options[0].selected =
frm.s7.options[1].selected =
frm["m1[]"].options[0].selected =
frm["m1[]"].options[1].selected =
frm["m1[]"].options[2].selected =
frm["m2[]"].options[0].selected =
frm["m2[]"].options[1].selected =
frm["m2[]"].options[2].selected =
frm["m3[]"].options[0].selected =
frm["m3[]"].options[1].selected =
frm["m3[]"].options[2].selected =
frm["m4[]"].options[0].selected =
frm["m4[]"].options[2].selected =
frm["m5[]"].options[0].selected =
frm["m5[]"].options[2].selected =
frm["m6[]"].options[0].selected =
frm["m6[]"].options[2].selected =
frm["m7[]"].options[0].selected =
frm["m7[]"].options[1].selected =
frm["m8[]"].options[0].selected =
frm["m9[]"].options[0].selected =
frm["m10[]"].options[2].selected =
frm["m11[]"].options[0].selected =
frm["m12[]"].options[0].selected = false;
frm.s4.options[1].selected =
frm.s5.options[1].selected =
frm.s6.options[1].selected =
frm.s7.options[2].selected =
frm["m4[]"].options[1].selected =
frm["m5[]"].options[1].selected =
frm["m6[]"].options[1].selected =
frm["m7[]"].options[2].selected =
frm["m8[]"].options[1].selected =
frm["m8[]"].options[2].selected =
frm["m9[]"].options[1].selected =
frm["m9[]"].options[2].selected =
frm["m10[]"].options[0].selected =
frm["m10[]"].options[1].selected =
frm["m11[]"].options[1].selected =
frm["m11[]"].options[2].selected =
frm["m12[]"].options[1].selected =
frm["m12[]"].options[2].selected = true;
},
tearDown : function () {
delete this.response;
},
// TODO: add test using post to iframe (server responds with text/plain
// JSON) then compare the parsed content.
test_setForm_basic_GET : function () {
var io = YAHOO.util.Connect,
t = this;
io.setForm('frm');
io.asyncRequest('GET',this.uri,this.callback);
this.verify = function () {
var o = t.response;
Assert.areSame(200,o.status,"Response status not 200");
try {
YAHOO.log(o.responseText,"info","TestLogger");
o = YAHOO.lang.JSON.parse(o.responseText);
}
catch (e) {
t.fail("JSON parse error: " + e);
}
FormAssert.fieldValueIs(frm.foo,o.GET.foo);
Assert.isUndefined(o.GET.c0);
FormAssert.fieldValueIs(frm["c1[]"],o.GET.c1);
FormAssert.fieldValueIs(frm["c2[]"],o.GET.c2);
FormAssert.fieldValueIs(frm["c3[]"],o.GET.c3);
FormAssert.fieldValueIs(frm["c4[]"],o.GET.c4);
Assert.isUndefined(o.GET.r0);
//FormAssert.fieldValueIs(frm.r1,o.GET.r1); // radios all have "on"
FormAssert.fieldValueIs(frm.r2,o.GET.r2);
//FormAssert.fieldValueIs(frm.r3,o.GET.r3); // radios all have "on"
FormAssert.fieldValueIs(frm.r4,o.GET.r4);
// FF defaults selectedIndex 0, Safari leaves -1
if (frm.s0.selectedIndex > -1) {
YAHOO.log("s0.selectedIndex defaulted to "+frm.s0.selectedIndex,"warn","TestRunner");
FormAssert.fieldValueIs(frm.s0,o.GET.s0);
} else {
YAHOO.log("s0.selectedIndex not defaulted (-1)","warn","TestRunner");
Assert.isUndefined(o.GET.s0);
}
if (frm.s1.selectedIndex > -1) {
YAHOO.log("s1.selectedIndex defaulted to "+frm.s1.selectedIndex,"warn","TestRunner");
FormAssert.fieldValueIs(frm.s1,o.GET.s1);
} else {
YAHOO.log("s1.selectedIndex not defaulted (-1)","warn","TestRunner");
Assert.isUndefined(o.GET.s1);
}
if (frm.s2.selectedIndex > -1) {
YAHOO.log("s2.selectedIndex defaulted to "+frm.s2.selectedIndex,"warn","TestRunner");
FormAssert.fieldValueIs(frm.s2,o.GET.s2);
} else {
YAHOO.log("s2.selectedIndex not defaulted (-1)","warn","TestRunner");
Assert.isUndefined(o.GET.s2);
}
if (frm.s3.selectedIndex > -1) {
YAHOO.log("s3.selectedIndex defaulted to "+frm.s3.selectedIndex,"warn","TestRunner");
FormAssert.fieldValueIs(frm.s3,o.GET.s3);
} else {
YAHOO.log("s3.selectedIndex not defaulted (-1)","warn","TestRunner");
Assert.isUndefined(o.GET.s3);
}
FormAssert.fieldValueIs(frm.s4,o.GET.s4);
FormAssert.fieldValueIs(frm.s5,o.GET.s5);
FormAssert.fieldValueIs(frm.s6,o.GET.s6);
FormAssert.fieldValueIs(frm.s7,o.GET.s7);
Assert.isUndefined(o.GET.m1);
Assert.isUndefined(o.GET.m2);
Assert.isUndefined(o.GET.m3);
FormAssert.fieldValueIs(frm['m4[]'],o.GET.m4);
FormAssert.fieldValueIs(frm['m5[]'],o.GET.m5);
FormAssert.fieldValueIs(frm['m5[]'],o.GET.m5);
FormAssert.fieldValueIs(frm['m6[]'],o.GET.m6);
FormAssert.fieldValueIs(frm['m7[]'],o.GET.m7);
FormAssert.fieldValueIs(frm['m8[]'],o.GET.m8);
FormAssert.fieldValueIs(frm['m9[]'],o.GET.m9);
FormAssert.fieldValueIs(frm['m10[]'],o.GET.m10);
FormAssert.fieldValueIs(frm['m11[]'],o.GET.m11);
FormAssert.fieldValueIs(frm['m12[]'],o.GET.m12);
};
this.wait(null,3000);
}
}));
Event.onDOMReady(function () {
var logger = new TestLogger("log");
logger.hideCategory('info');
logger.showCategory('warn');
logger.formatMsg = function (e) {
if (e.category === 'section') {
return "<h3>"+e.msg+"</h3>";
} else if (e.category === "break") {
return "<br>";
} else {
return TestLogger.prototype.formatMsg.call(this,e);
}
};
YAHOO.log("Tests","section","TestRunner");
TestRunner.add(suite);
TestRunner.run();
});
})();
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js"></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,8 +0,0 @@
<?php
header('Content-type: application/json');
//header('Content-type: text/plain');
echo(json_encode(array(
POST => $_POST,
GET => $_GET
)));
?>

View file

@ -1,243 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
</head>
<body>
<script type="text/javascript">
(function() {
YAHOO.namespace("tests");
var TestCase = YAHOO.tool.TestCase,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert;
var logger;
YAHOO.tests.ConfigOwner = function(test) {
this.id = "ConfigOwner";
this.cfg = new YAHOO.util.Config(this);
this.events = [];
this.clearEventLog = function() {
this.events = [];
};
this.getFiredEvents = function() {
var handlers = [];
for (var i = 0; i < this.events.length; i++) {
handlers.push(this.events[i].type);
}
return handlers;
};
};
var configTemplate = {
name: "configtestcase",
setUp : function() {
this.cfgOwner = new YAHOO.tests.ConfigOwner();
var h = this.genericCfgHandler;
var o = this.cfgOwner;
o.cfg.addProperty("sONe", {value:"str1", handler:h, suppressEvent:true });
o.cfg.addProperty("sTwO", {value:"str2", handler:h, suppressEvent:false });
o.cfg.addProperty("sThree", {value:"str3", handler:h, supercedes:["STWO", "sone"] });
o.cfg.addProperty("nOnE", {value:777, handler:h, validator:o.cfg.checkNumber });
o.cfg.addProperty("nTwo", {value:"Fourteen", handler:h, validator:o.cfg.checkNumber });
o.cfg.addProperty("bone", {value:false, handler:h, validator:o.cfg.checkBoolean });
o.cfg.addProperty("bTWo", {value:true, handler:h, validator:o.cfg.checkBoolean });
o.cfg.addProperty("BTHREE", {value:"CompletelyUnfounded", handler:h, validator:o.cfg.checkBoolean });
o.cfg.fireQueue();
},
tearDown : function() {
this.cfgOwner.cfg.destroy();
this.cfgOwner.cfg = null;
this.cfgOwner = null;
},
genericCfgHandler : function(type, args, obj) {
this.events.push({type:type, args:args, obj:obj});
},
customCfgHandler : function(type, args, obj) {
this.events.push({type:type+"_custom", args:args, obj:obj});
},
testAddProperty : function() {
var o = this.cfgOwner;
var expectedHandlers = ["sthree", "stwo", "none", "bone", "btwo"];
var actualHandlers = o.getFiredEvents();
ArrayAssert.itemsAreEqual(expectedHandlers, actualHandlers);
},
testGetConfig : function() {
// TODO
},
testGetProperty : function() {
var o = this.cfgOwner;
o.clearEventLog();
Assert.areEqual("str1", o.cfg.getProperty("SOne"));
Assert.areEqual("str2", o.cfg.getProperty("STWO"));
Assert.areEqual("str3", o.cfg.getProperty("sThreE"));
},
testQueueOrderAndValidation : function() {
var o = this.cfgOwner;
o.clearEventLog();
o.cfg.queueProperty("bTWO", "NotBoolean");
o.cfg.queueProperty("SonE", "str11");
o.cfg.queueProperty("StWo", "str22");
o.cfg.queueProperty("None", 20);
o.cfg.queueProperty("StHree", "str33"); // Should sthree's supercede ordering really change the order of sONE, sTWO?
o.cfg.fireQueue();
var expectedHandlers = ["none", "sthree", "stwo", "sone"];
var actualHandlers = o.getFiredEvents();
ArrayAssert.itemsAreEqual(expectedHandlers, actualHandlers);
},
testRefireEvent : function() {
var o = this.cfgOwner;
o.clearEventLog();
o.cfg.refireEvent("STwo");
o.cfg.refireEvent("Sone");
o.cfg.refireEvent("NTwo"); // Value is invalid - should it really be firing?
var expectedHandlers = ["stwo", "sone", "ntwo"];
var actualHandlers = o.getFiredEvents();
ArrayAssert.itemsAreEqual(expectedHandlers, actualHandlers);
},
testRefresh : function() {
var o = this.cfgOwner;
o.clearEventLog();
o.cfg.refresh();
var expectedHandlers = ["sone", "stwo", "sthree", "none", "ntwo", "bone", "btwo", "bthree"];
var actualHandlers = o.getFiredEvents();
ArrayAssert.itemsAreEqual(expectedHandlers, actualHandlers);
},
testResetProperty : function() {
var o = this.cfgOwner;
o.clearEventLog();
// All properties should be set to values specified by ApplyConfig
o.cfg.applyConfig({
sOnE:"str1111",
sTwo: "str2222",
Sthree: "str3333",
nONE:1111,
nTWo:2222,
bONE:true,
btwo:true,
bTHREE:true
}, true);
o.cfg.setProperty("sonE", "str11");
o.cfg.setProperty("sTWO", "str22");
o.cfg.setProperty("sTHREE", "str33");
o.cfg.setProperty("nONE", 11);
o.cfg.setProperty("nTWO", 22);
o.cfg.setProperty("BOnE", false);
o.cfg.setProperty("BTwO", false);
o.cfg.setProperty("BthreE", false);
o.cfg.resetProperty("soNe");
o.cfg.resetProperty("stWo");
o.cfg.resetProperty("stHree");
o.cfg.resetProperty("nOnE");
o.cfg.resetProperty("nTwO");
o.cfg.resetProperty("bONE");
o.cfg.resetProperty("bTWO");
o.cfg.resetProperty("BTHREE");
// Should values be reset to defaults and not applyConfig values
Assert.areEqual("str1111", o.cfg.getProperty("sONE"));
Assert.areEqual("str2222", o.cfg.getProperty("stWo"));
Assert.areEqual("str3333", o.cfg.getProperty("sTHREE"));
Assert.areEqual(1111, o.cfg.getProperty("NONE"));
Assert.areEqual(2222, o.cfg.getProperty("NtWO"));
Assert.areEqual(true, o.cfg.getProperty("bONE"));
Assert.areEqual(true, o.cfg.getProperty("BtWO"));
Assert.areEqual(true, o.cfg.getProperty("BThREE"));
},
testSubscribeToConfigEvent : function() {
var o = this.cfgOwner;
o.clearEventLog();
o.cfg.subscribeToConfigEvent("sOne", this.customCfgHandler);
o.cfg.setProperty("SOne", "str11111");
var expected = ["sone", "sone_custom"];
var actual = o.getFiredEvents();
ArrayAssert.itemsAreEqual(expected, actual);
o.clearEventLog();
o.cfg.unsubscribeFromConfigEvent("sone", this.customCfgHandler);
o.cfg.setProperty("sONe", "str11111");
expected = ["sone"];
actual = o.getFiredEvents();
ArrayAssert.itemsAreEqual(expected, actual);
}
}
var configTestCase = new YAHOO.tool.TestCase(configTemplate);
function runTests() {
var logger = new YAHOO.tool.TestLogger();
var testSuite=new YAHOO.tool.TestSuite("configsuite");
testSuite.add(configTestCase);
logger.clearConsole();
YAHOO.tool.TestRunner.clear();
YAHOO.tool.TestRunner.add(testSuite);
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
}
YAHOO.util.Event.addListener(window, "load", runTests);
})();
</script>
</body>
</html>

View file

@ -1,443 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>YAHOO.widget.Module Tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/calendar/assets/skins/sam/calendar.css" />
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript" src="../../../build/container/container-min.js"></script>
<style type="text/css">
</style>
<script type="text/javascript">
YAHOO.util.Assert.isDOMElement = function (actual, message) {
if (!(YAHOO.lang.isObject(actual) && YAHOO.lang.isString(actual.nodeName) && actual.nodeType === 1)) {
YAHOO.util.Assert.fail(message || "Not a DOM element.");
}
};
YAHOO.util.Event.onDOMReady(function () {
var oLogger = new YAHOO.tool.TestLogger();
var oModule;
var Assert = YAHOO.util.Assert,
Module = YAHOO.widget.Module;
var oTestCase = new YAHOO.tool.TestCase({
name: "Sample Test Case",
testConstructor: function () {
// Create a Module from existing markup
oModule = new Module("module1");
Assert.isObject(oModule, "Failed to create basic instance");
Assert.isInstanceOf(Module, oModule, "Failed to create basic instance");
oModule = null;
oModule = new Module(document.getElementById("module1"));
Assert.isObject(oModule, "Failed to create basic instance");
Assert.isInstanceOf(Module, oModule, "Failed to create basic instance");
oModule = null;
var oDIV = document.createElement("div");
oModule = new Module(oDIV);
Assert.isObject(oModule, "Failed to create basic instance");
Assert.isInstanceOf(Module, oModule, "Failed to create basic instance");
oModule = null;
oDIV = null;
oDIV = document.createElement("div");
oDIV.id = "module2";
oModule = new Module(oDIV);
Assert.isObject(oModule, "Failed to create basic instance");
Assert.isInstanceOf(Module, oModule, "Failed to create basic instance");
oModule = null;
oDIV = null;
oDIV = document.createElement("div");
oDIV.id = "module2";
oModule = new Module("module2");
Assert.isObject(oModule, "Failed to create basic instance");
Assert.isInstanceOf(Module, oModule, "Failed to create basic instance");
oModule = null;
oDIV = null;
// Create a Module without existing markup
oModule = new Module("module2");
Assert.isObject(oModule, "Failed to create basic instance");
Assert.isInstanceOf(Module, oModule, "Failed to create basic instance");
},
testProperties: function () {
oModule = new Module("module2");
Assert.areEqual(Module, oModule.constructor, "The Module's constructor is not YAHOO.widget.Module.");
Assert.isString(oModule.id, "The Module does not have an id.");
Assert.areEqual("module2", oModule.id, "The Module does not have an id.");
Assert.isString(oModule.platform, "The Module's \"platform\" property is not set.");
Assert.isString(oModule.browser, "The Module's \"browser\" property is not set.");
Assert.isBoolean(oModule.isSecure, "The Module's \"isSecure\" property is not set.");
oModule = null;
},
testConfigurationProperties: function () {
// Visible
oModule = new Module("module2", { visible: true });
oModule.setBody("This is the body");
oModule.render(document.body);
Assert.isTrue(oModule.cfg.getProperty("visible"), "The value of the \"visible\" configuration property is not correct.");
Assert.areEqual("block", oModule.element.style.display, "The Module is not visible when it should be.");
oModule.destroy();
oModule = new Module("module2");
oModule.setBody("This is the body");
oModule.render(document.body);
Assert.isTrue(oModule.cfg.getProperty("visible"), "The value of the \"visible\" configuration property is not correct.");
Assert.areEqual("block", oModule.element.style.display, "The Module is not visible when it should be.");
oModule.cfg.setProperty("visible", false);
Assert.isFalse(oModule.cfg.getProperty("visible"), "The value of the \"visible\" configuration property is not correct.");
Assert.areEqual("none", oModule.element.style.display, "The Module is not hidden when it should be.");
oModule.destroy();
oModule = new Module("module2", { visible: false });
oModule.setBody("This is the body");
oModule.render(document.body);
Assert.isFalse(oModule.cfg.getProperty("visible"), "The value of the \"visible\" configuration property is not correct.");
Assert.areEqual("none", oModule.element.style.display, "The Module is not hidden when it should be.");
oModule.cfg.setProperty("visible", true);
Assert.isTrue(oModule.cfg.getProperty("visible"), "The value of the \"visible\" configuration property is not correct.");
Assert.areEqual("block", oModule.element.style.display, "The Module is not visible when it should be.");
},
testMethods: function () {
// Header methods
oModule = new Module("module2");
oModule.setHeader("This is the header.");
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.header, "The Module's header element not created.");
oModule.destroy();
oModule = new Module("module2");
var oEM = document.createElement("em");
oEM.innerHTML = "This is the header.";
oModule.setHeader(oEM);
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.header, "The Module's header element not created.");
Assert.areEqual(oEM, oModule.header.firstChild, "The Module's header element is not equal to what was set.");
oModule.destroy();
oModule = new Module("module2");
oEM = document.createElement("div");
oEM.innerHTML = "This is the header.";
oModule.appendToHeader(oEM);
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.header, "The Module's header element not created.");
Assert.areEqual(oEM, oModule.header.firstChild, "The Module's header element is not equal to what was set.");
oModule.destroy();
// Body methods
oModule = new Module("module2");
oModule.setBody("This is the body.");
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.body, "The Module's body element not created.");
oModule.destroy();
oModule = new Module("module2");
oEM = document.createElement("em");
oEM.innerHTML = "This is the body.";
oModule.setBody(oEM);
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.body, "The Module's body element not created.");
Assert.areEqual(oEM, oModule.body.firstChild, "The Module's body element is not equal to what was set.");
oModule.destroy();
oModule = new Module("module2");
oEM = document.createElement("div");
oEM.innerHTML = "This is the body.";
oModule.appendToBody(oEM);
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.body, "The Module's header element not created.");
Assert.areEqual(oEM, oModule.body.firstChild, "The Module's header element is not equal to what was set.");
oModule.destroy();
// Footer methods
oModule = new Module("module2");
oModule.setFooter("This is the footer.");
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.footer, "The Module's footer element not created.");
oModule.destroy();
oModule = new Module("module2");
oEM = document.createElement("em");
oEM.innerHTML = "This is the footer.";
oModule.setFooter(oEM);
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.footer, "The Module's footer element not created.");
Assert.areEqual(oEM, oModule.footer.firstChild, "The Module's footer element is not equal to what was set.");
oModule.destroy();
oModule = new Module("module2");
oEM = document.createElement("div");
oEM.innerHTML = "This is the footer.";
oModule.appendToFooter(oEM);
oModule.render(document.body);
Assert.isDOMElement(oModule.element, "The Module's root element not created.");
Assert.isDOMElement(oModule.footer, "The Module's header element not created.");
Assert.areEqual(oEM, oModule.footer.firstChild, "The Module's header element is not equal to what was set.");
oModule.destroy();
// Render
oModule = new Module("module2");
oEM = document.createElement("div");
oEM.innerHTML = "This is the body.";
oModule.setBody(oEM);
oModule.render(document.body);
Assert.areEqual(document.body, oModule.element.parentNode, "The Module was not rendered into the body of the document.");
oModule.destroy();
oModule = new Module("module2");
oEM = document.createElement("div");
oEM.innerHTML = "This is the body.";
oModule.setBody(oEM);
var oRenderTarget = document.createElement("div");
oRenderTarget.id = "rendertarget";
document.body.appendChild(oRenderTarget);
oModule.render("rendertarget");
Assert.areEqual(oRenderTarget, oModule.element.parentNode, "The Module was not rendered into the specified target element.");
oModule.destroy();
oModule = new Module("module2");
oEM = document.createElement("div");
oEM.innerHTML = "This is the body.";
oModule.setBody(oEM);
var oModuleContainer = document.createElement("div");
oModuleContainer.id = "modulecontainer";
oModule.render("rendertarget", oModuleContainer);
Assert.areEqual(oRenderTarget, oModule.element.parentNode, "The Module was not rendered into the specified target element.");
Assert.areEqual(oModuleContainer, oModule.body.parentNode, "The Module's container is not the element that was specified.");
oModule.destroy();
// Show
oModule = new Module("module2");
oModule.setBody("This is the body");
oModule.render(document.body);
oModule.show();
Assert.areEqual("block", oModule.element.style.display, "The Module is not visible after calling the \"show\" method.");
// Hide
oModule.hide();
Assert.areEqual("none", oModule.element.style.display, "The Module is not hidden after calling the \"hide\" method.");
// toString
Assert.areEqual(("Module " + oModule.id), oModule.toString(), "The Module \"toString\" method is not returning the correct value.");
// destroy
oModule.destroy();
Assert.areEqual(null, document.getElementById("module2"), "The Module was not successfully destroyed.");
},
testEvents: function () {
var CustomEvent = YAHOO.util.CustomEvent;
oModule = new Module("module2");
Assert.isInstanceOf(CustomEvent, oModule.beforeInitEvent, "Module event \"beforeInitEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.initEvent, "Module event \"initEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.appendEvent, "Module event \"appendEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.beforeRenderEvent, "Module event \"beforeRenderEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.renderEvent, "Module event \"renderEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.changeHeaderEvent, "Module event \"changeHeaderEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.changeBodyEvent, "Module event \"changeBodyEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.changeFooterEvent, "Module event \"changeFooterEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.changeContentEvent, "Module event \"changeContentEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.destroyEvent, "Module event \"destroyEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.beforeShowEvent, "Module event \"beforeShowEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.showEvent, "Module event \"showEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.beforeHideEvent, "Module event \"beforeHideEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, oModule.hideEvent, "Module event \"hideEvent\" is not an instance of YAHOO.util.CustomEvent.");
Assert.isInstanceOf(CustomEvent, YAHOO.widget.Module.textResizeEvent, "YAHOO.widget.Module.textResizeEvent is not an instance of YAHOO.util.CustomEvent.");
}
});
YAHOO.tool.TestRunner.add(oTestCase);
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
});
</script>
</head>
<body>
<div id="module1">
<div class="bd">The body of the module1</div>
</div>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,687 +0,0 @@
<html>
<head>
<title>YUI DataSource Tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<style type="text/css">
.yui-skin-sam .yui-log {
padding: 2.5em 1em 1em;
height: 90%;
}
.yui-skin-sam .yui-log .yui-log-bd {
width: auto;
height: 100%;
}
</style>
</head>
<body class="yui-skin-sam">
<h1>DataSource Tests</h1>
<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/connection/connection.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript" src="../../../build/get/get.js"></script>
<script type="text/javascript" src="../../../build/json/json.js"></script>
<script type="text/javascript" src="../../../build/datasource/datasource.js"></script>
<!-- for cloneobject method -->
<script type="text/javascript" src="../../../build/element/element.js"></script>
<script type="text/javascript" src="../../../build/datatable/datatable.js"></script>
<script type="text/javascript">
(function() {
var Dom=YAHOO.util.Dom,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert,
DateAssert=YAHOO.util.DateAssert,
UserAction=YAHOO.util.UserAction,
TestCase = YAHOO.tool.TestCase,
TestLogger = YAHOO.tool.TestLogger,
TestRunner = YAHOO.tool.TestRunner,
TestSuite = YAHOO.tool.TestSuite,
lang = YAHOO.lang,
DS = YAHOO.util.DataSourceBase,
LocalDS = YAHOO.util.LocalDataSource,
XHRDS = YAHOO.util.XHRDataSource,
ScriptNodeDS = YAHOO.util.ScriptNodeDataSource,
FunctionDS = YAHOO.util.FunctionDataSource,
DataSource = YAHOO.util.DataSource;
var XMLDocument = function(rootTagName, namespaceURL) {
if (!rootTagName) rootTagName = "";
if (!namespaceURL) namespaceURL = "";
if (document.implementation && document.implementation.createDocument) {
// This is the W3C standard way to do it
return document.implementation.createDocument(namespaceURL,
rootTagName, null);
}
else { // This is the IE way to do it
// Create an empty document as an ActiveX object
// If there is no root element, this is all we have to do
var doc = new ActiveXObject("MSXML2.DOMDocument");
// If there is a root tag, initialize the document
if (rootTagName) {
// Look for a namespace prefix
var prefix = "";
var tagname = rootTagName;
var p = rootTagName.indexOf(':');
if (p != -1) {
prefix = rootTagName.substring(0, p);
tagname = rootTagName.substring(p+1);
}
// If we have a namespace, we must have a namespace prefix
// If we don't have a namespace, we discard any prefix
if (namespaceURL) {
if (!prefix) prefix = "a0"; // What Firefox uses
}
else prefix = "";
// Create the root element (with optional namespace) as a
// string of text
var text = "<" + (prefix?(prefix+":"):"") + tagname +
(namespaceURL
?(" xmlns:" + prefix + '="' + namespaceURL +'"')
:"") +
"/>";
// And parse that text into the empty document
doc.loadXML(text);
}
return doc;
}
};
/**
*
*
* LocalDataSource Tests
*
*
*/
var dsLocalTestCase = new TestCase({
name: "LocalDataSource Test Case",
testLocalContruction: function() {
var data = ["a","b","c"];
var ds = new LocalDS(data);
ArrayAssert.itemsAreSame(data, ds.liveData, "Simple Array");
Assert.areSame(DS.TYPE_LOCAL, ds.dataType, "Simple Array");
Assert.areSame(DS.TYPE_JSARRAY, ds.responseType, "Simple Array");
delete data;
delete ds;
data = [["a","b","c"],["1","2","3"],["one","two","three"]];
ds = new LocalDS(data);
ArrayAssert.itemsAreSame(data, ds.liveData, "Complex Array");
Assert.areSame(DS.TYPE_LOCAL, ds.dataType, "Complex Array");
Assert.areSame(DS.TYPE_JSARRAY, ds.responseType, "Complex Array");
delete data;
delete ds;
data = [{a:"1",b:"2",c:"3"}, {a:"one",b:"two",c:"three"}, {a:"uno",b:"dos",c:"tres"}];
ds = new LocalDS(data);
ArrayAssert.itemsAreSame(data, ds.liveData, "Object Array");
Assert.areSame(DS.TYPE_LOCAL, ds.dataType, "Object Array");
Assert.areSame(DS.TYPE_JSARRAY, ds.responseType, "Object Array");
delete data;
delete ds;
data = {items: [{a:"1",b:"2",c:"3"}, {a:"one",b:"two",c:"three"}, {a:"uno",b:"dos",c:"tres"}]};
ds = new LocalDS(data);
ObjectAssert.propertiesAreEqual(data, ds.liveData, "JSON");
Assert.areSame(DS.TYPE_LOCAL, ds.dataType, "JSON");
Assert.areSame(DS.TYPE_JSON, ds.responseType, "JSON");
delete data;
delete ds;
data = document.createElement("table");
ds = new LocalDS(data);
Assert.areSame(data.nodeName, ds.liveData.nodeName, "HTML TABLE");
Assert.areSame(DS.TYPE_LOCAL, ds.dataType, "HTML TABLE");
Assert.areSame(DS.TYPE_HTMLTABLE, ds.responseType, "HTML TABLE");
delete data;
delete ds;
data =new XMLDocument("myRoot");
ds = new LocalDS(data);
Assert.areSame(data.nodeType, ds.liveData.nodeType, "XML");
Assert.areSame(DS.TYPE_LOCAL, ds.dataType, "XML");
Assert.areSame(DS.TYPE_XML, ds.responseType, "XML");
delete data;
delete ds;
data = null;
ds = new LocalDS(data);
ArrayAssert.itemsAreSame([], ds.liveData, "null");
Assert.areSame(DS.TYPE_LOCAL, ds.dataType, "null");
Assert.areSame(DS.TYPE_JSARRAY, ds.responseType, "null");
delete data;
delete ds;
},
testLocalSendReqeust: function(){
var ds = new LocalDS(["a","b","c","d"]);
ds.sendRequest("a", {success:function(request,response) {
ArrayAssert.itemsAreSame(["a","b","c","d"], response.results, "Expected live array.");
}});
new LocalDS('{"items":[{"foo":1},{"foo":2}]}', {
responseType: DS.TYPE_JSON,
responseSchema: {
resultsList:'items',
fields:['foo']
}
}).sendRequest(null,{ success: function (req, res) {
Assert.isArray(res.results, "Expected results array");
Assert.areEqual(res.results.length, 2, "Expected 2 records");
}
});
new LocalDS('{"items":[{"foo":1},{"foo":2}]}', {
parseJSONArgs: function (k,v) { return v * 3 },
responseType: DS.TYPE_JSON,
responseSchema: {
resultsList:'items',
fields:['foo']
}
}).sendRequest(null,{ success: function (req, res) {
Assert.isArray(res.results, "Expected results array");
Assert.areEqual(res.results.length, 2, "Expected 2 records");
Assert.areEqual(3, res.results[0].foo, "Reviver function did not alter JSON during parse");
}
});
}
});
/**
*
*
* FunctionDataSource Tests
*
*
*/
var dsFunctionTestCase = new TestCase({
name: "FunctionDataSource Test Case",
testFunctionContruction: function() {
var data = function(query) {
return ["a","b","c"]
};
var ds = new FunctionDS(data);
Assert.isFunction(ds.liveData);
Assert.areSame(DS.TYPE_JSFUNCTION, ds.dataType);
Assert.areSame(DS.TYPE_UNKNOWN, ds.responseType);
delete data;
delete ds;
data = null;
ds = new FunctionDS(data);
Assert.isFunction(ds.liveData);
Assert.areSame(DS.TYPE_JSFUNCTION, ds.dataType);
Assert.areSame(DS.TYPE_UNKNOWN, ds.responseType);
delete data;
delete ds;
}
});
/**
*
*
* XHRDataSource Tests
*
*
*/
var dsXHRTestCase = new TestCase({
name: "XHRDataSource Test Case",
testXHRContruction: function() {
var data = "path/to/server";
var ds = new XHRDS(data);
Assert.isString(ds.liveData);
Assert.areSame(DS.TYPE_XHR, ds.dataType);
Assert.areSame(DS.TYPE_UNKNOWN, ds.responseType);
delete data;
delete ds;
data = null;
ds = new XHRDS(data);
Assert.isString(ds.liveData);
Assert.areSame(DS.TYPE_XHR, ds.dataType);
Assert.areSame(DS.TYPE_UNKNOWN, ds.responseType);
delete data;
delete ds;
},
testXHRSendRequest: function() {
var ds = new XHRDS("php/proxy_ylocal.php?query=madonna&output=json&results=10");
ds.responseType = DS.TYPE_JSON;
ds.responseSchema = {
resultsList: "ResultSet.Result",
fields: ["Title"]
};
ds.sendRequest(null, {
success: function(request,response) {
this.resume(function() {
Assert.isNull(request, "Expected null request.");
Assert.isObject(response, "Expected response object.");
ObjectAssert.propertiesAreEqual({tId:null,meta:null,results:null}, response, "Expected all properties.");
});
},
failure: function(request, response) {
this.resume(function() {
Assert.fail("XHR failure case.");
});
},
scope: this
});
this.wait(5000); // On a slow connection: this.wait(5000);
},
testXHRHTMLTable: function () {
var ds = new XHRDS("php/xhr_table.php?cols=4",{
responseType: DS.TYPE_HTMLTABLE,
responseSchema: {
fields: ['Col0','Col1','Col2','Col3']
}
});
ds.sendRequest(null, {
success: function (req,res) {
this.resume(function () {
Assert.isObject(res, "Expected Response object");
Assert.isArray(res.results, "Expected results list");
ObjectAssert.hasProperty("Col0", res.results[0], "Malformed result record");
});
},
failure: function (req,res) {
this.resume(function () {
Assert.fail("XHR failure case");
});
},
scope: this
});
this.wait(5000);
}
});
/**
*
*
* ScriptNodeDataSource Tests
*
*
*/
var dsScriptNodeTestCase = new TestCase({
name: "ScriptNodeDataSource Test Case",
testScriptNodeContruction: function() {
var data = "path/to/server";
var ds = new ScriptNodeDS(data);
Assert.isString(ds.liveData);
Assert.areSame(DS.TYPE_SCRIPTNODE, ds.dataType);
Assert.areSame(DS.TYPE_UNKNOWN, ds.responseType);
delete data;
delete ds;
data = null;
ds = new ScriptNodeDS(data);
Assert.isString(ds.liveData);
Assert.areSame(DS.TYPE_SCRIPTNODE, ds.dataType);
Assert.areSame(DS.TYPE_UNKNOWN, ds.responseType);
delete data;
delete ds;
}
});
/**
*
*
* DataSource Tests
*
*
*/
var dsTestCase = new TestCase({
name: "DataSource Test Case",
testDataSourceContruction: function() {
var data = ["a","b","c"];
var ds = new DataSource(data);
Assert.areSame(true, ds instanceof LocalDS);
delete data;
delete ds;
data = function(query) {
return ["a","b","c"]
};
ds = new DataSource(data);
Assert.areSame(true, ds instanceof FunctionDS);
delete data;
delete ds;
data = "path/to/server";
ds = new DataSource(data);
Assert.areSame(true, ds instanceof XHRDS);
delete data;
delete ds;
data = null;
ds = new DataSource(data, {dataType:DS.TYPE_LOCAL});
Assert.areSame(true, ds instanceof LocalDS);
delete data;
delete ds;
data = null;
ds = new DataSource(data, {dataType:DS.TYPE_JSFUNCTION});
Assert.areSame(true, ds instanceof FunctionDS);
delete data;
delete ds;
data = null;
ds = new DataSource(data, {dataType:DS.TYPE_XHR});
Assert.areSame(true, ds instanceof XHRDS);
delete data;
delete ds;
data = null;
ds = new DataSource(data, {dataType:DS.TYPE_SCRIPTNODE});
Assert.areSame(true, ds instanceof ScriptNodeDS);
delete data;
delete ds;
}
});
/**
*
*
* DataSourceBase Tests
*
*
*/
var dsBaseTestCase = new TestCase({
name: "DataSourceBase Test Case",
testCustomEvents: function() {
var data = ["a","b","c"];
var ds = new DS(data);
ObjectAssert.hasProperty("cacheFlushEvent", ds.__yui_events);
ObjectAssert.hasProperty("cacheRequestEvent", ds.__yui_events);
ObjectAssert.hasProperty("cacheResponseEvent", ds.__yui_events);
ObjectAssert.hasProperty("dataErrorEvent", ds.__yui_events);
ObjectAssert.hasProperty("requestEvent", ds.__yui_events);
ObjectAssert.hasProperty("responseCacheEvent", ds.__yui_events);
ObjectAssert.hasProperty("responseEvent", ds.__yui_events);
ObjectAssert.hasProperty("responseParseEvent", ds.__yui_events);
delete data;
delete ds;
},
testCache: function() {
var data = ["a","b","c"];
var ds = new DS(data);
Assert.areSame(null, ds._aCache);
delete data;
delete ds;
data = ["a","b","c"];
ds = new DS(data, {maxCacheEntries:5});
Assert.areSame(null, ds._aCache);
var ds = ds;
ds.sendRequest("a", function() {
Assert.isArray(ds._aCache);
Assert.areSame(1, ds._aCache.length, "Cache should have one item");
ds.flushCache();
Assert.areSame(0, ds._aCache.length, "Cache should be empty");
});
delete data;
delete ds;
data = ["a","b","c"];
ds = new DS(data);
ds.maxCacheEntries = 5
Assert.areSame(null, ds._aCache);
var ds = ds;
ds.sendRequest("a", function() {
Assert.isArray(ds._aCache);
Assert.areSame(1, ds._aCache.length, "Cache should have one item");
ds.maxCacheEntries = 0;
Assert.areSame(1, ds._aCache.length, "Cache should still have one item");
ds.sendRequest("a", function() {
Assert.isNull(ds._aCache, "Cache should be destroyed");
});
});
delete data;
delete ds;
}
});
/**
*
*
* JSON Tests
*
*
*/
var dsJSONTestCase = new TestCase({
name: "JSON Test Case",
testJSONParse: function() {
var data = {"ResultSet":{
"totalResultsAvailable":506,
"totalResultsReturned":10,
"first Result Position":1,
"ResultSetMapUrl":"http:\/\/maps.yahoo.com\/broadband\/?q1=Sunnyvale%2C+CA+94089&tt=pizza&tp=1",
"Result":[
{Title:"Giovannis Pizzeria",MyArray:["1127 N Lawrence Expy"],"Hy-phenated":"Sunnyvale","Hy-phenated2":"Mountain View","State":"CA","Array Index":[408,734,4221],"for":"37.397058","Longitude":"-121.996017","Nested":{"Average-Rating":"4","Total Ratings":"54","TotalReviews":"36",MyArray:["1201994139"]},"Distance":"0.62","Url":"http:\/\/local.yahoo.com\/details?id=21341983"},
{Title:"Gumbas Cafe Italian Restaurant & Pizzeria",MyArray:["176 S Murphy Ave"],"Hy-phenated":"Sunnyvale","Hy-phenated2":"Mountain View","State":"CA","Array Index":[408,737,8384],"for":"37.376442","Longitude":"-122.030102","Nested":{"Average-Rating":"4","Total Ratings":"38","TotalReviews":"26",MyArray:["1199489524"]},"Distance":"2.05","Url":"http:\/\/local.yahoo.com\/details?id=21337886"}
]}};
var ds = new DS(data);
ds.responseSchema = {
resultsList: "ResultSet.Result",
fields: ["Title","MyArray[0]","Hy-phenated",'["Hy-phenated2"]',"Array Index","for"]
};
var oCallback = {
success:function(oRequest, oResponse, oPayload) {
Assert.areSame(data.ResultSet.Result[0]["Title"], oResponse.results[0]["Title"], "Incorrect parsing of String");
Assert.areSame(data.ResultSet.Result[0]["MyArray"][0], oResponse.results[0]["MyArray[0]"], "Incorrect parsing of Array index");
Assert.areSame(data.ResultSet.Result[0]["Hy-phenated2"], oResponse.results[0]['["Hy-phenated2"]'], "Incorrect parsing of valid hyphenated identifier");
Assert.areSame(data.ResultSet.Result[0]["for"], oResponse.results[0]["for"], "Incorrect parsing of reserved word");
// Verify invalids didn't parse
Assert.isUndefined(oResponse.results[0]["Hy-phenated"], "Incorrect parsing of invalid dot syntax key with dash");
Assert.isUndefined(oResponse.results[0]["Array Index"], "Incorrect parsing of invalid dot syntax key with empty space");
},
scope:this
};
ds.sendRequest(null,oCallback);
// Nested schema
ds.responseSchema.fields = ["Nested.TotalReviews","Nested.Average-Rating","Nested.Total Ratings","Nested.MyArray[0]"];
var oCallback = {
success:function(oRequest, oResponse, oPayload) {
Assert.areSame(data.ResultSet.Result[0]["Nested"]["TotalReviews"], oResponse.results[0]["Nested.TotalReviews"], "Incorrect parsing of nested String");
ArrayAssert.itemsAreSame(data.ResultSet.Result[0]["Nested"]["MyArray"][0], oResponse.results[0]["Nested.MyArray[0]"], "Incorrect parsing of nested Array index");
// Verify invalids didn't parse
Assert.isUndefined(oResponse.results[0]["Nested.Average-Rating"], "Incorrect parsing of invalid nested key containing hyphen");
Assert.isUndefined(oResponse.results[0]["Nested.Total Ratings"], "Incorrect parsing of invalid dot syntax key containing empty space");
},
scope:this
};
ds.sendRequest(null,oCallback);
delete data;
delete ds;
}
});
/**
*
*
* Number Tests
*
*
*/
var dsNumberTestCase = new TestCase({
name: "Number Test Case",
testParse: function() {
var myNumber = 1;
var number = DS.parseNumber("1");
Assert.areSame(number, myNumber, "Incorrect number from String.");
number = DataSource.parseNumber(1);
Assert.areSame(number, myNumber, "Incorrect number from Number.");
},
testFormat: function() {
output = YAHOO.util.Number.format("1");
Assert.areSame("1", output, "Incorrect output from String.");
output = YAHOO.util.Number.format(1);
Assert.areSame("1", output, "Incorrect output from Number.");
output = YAHOO.util.Number.format(0);
Assert.areSame("0", output, "Incorrect output from zero.");
output = YAHOO.util.Number.format(-1);
Assert.areSame("-1", output, "Incorrect output from negative Number.");
output = YAHOO.util.Number.format(123, {prefix:"$"});
Assert.areSame("$123", output, "Incorrect prefix");
output = YAHOO.util.Number.format(123, {suffix:" items"});
Assert.areSame("123 items", output, "Incorrect suffix");
output = YAHOO.util.Number.format(123.123, {decimalPlaces:5});
Assert.areSame("123.12300", output, "Incorrect decimal rounding: expected 5 places");
output = YAHOO.util.Number.format(123, {decimalPlaces:5});
Assert.areSame("123.00000", output, "Incorrect decimal padding: expected 5 places");
output = YAHOO.util.Number.format(123.123, {decimalPlaces:4});
Assert.areSame("123.1230", output, "Incorrect decimal rounding: expected 4 places");
output = YAHOO.util.Number.format(123.123, {decimalPlaces:3});
Assert.areSame("123.123", output, "Incorrect decimal rounding: expected 3 places");
output = YAHOO.util.Number.format(123.127, {decimalPlaces:2});
Assert.areSame("123.13", output, "Incorrect decimal rounding: expected rounded to 2 places");
output = YAHOO.util.Number.format(123.123, {decimalPlaces:2});
Assert.areSame("123.12", output, "Incorrect decimal rounding: expected 2 places");
output = YAHOO.util.Number.format(123.123, {decimalPlaces:1});
Assert.areSame("123.1", output, "Incorrect decimal rounding: expected 1 place");
output = YAHOO.util.Number.format(123.123, {decimalPlaces:0});
Assert.areSame("123", output, "Incorrect decimal rounding: expected 0 places");
output = YAHOO.util.Number.format(123.123, {decimalPlaces:-1});
Assert.areSame("120", output, "Incorrect decimal rounding: expected -1 places");
output = YAHOO.util.Number.format("123123123", {thousandsSeparator:","});
Assert.areSame("123,123,123", output, "Incorrect thousands separation");
output = YAHOO.util.Number.format(-123123123);
Assert.areSame("-123123123", output, "Incorrect default negative format");
output = YAHOO.util.Number.format(-123123123, {negativeFormat:"--#"});
Assert.areSame("--123123123", output, "Incorrect negative format indicator");
output = YAHOO.util.Number.format("-123123123.176",{
prefix: "&#165;",
decimalPlaces:2,
thousandsSeparator:".",
decimalSeparator:",",
negativeFormat:"# (neg)"
});
Assert.areSame("&#165;123.123.123,18 (neg)", output, "Incorrect Yen formatting");
}
});
/**
*
*
* Date Tests
*
*
*/
var dsDateTestCase = new TestCase({
name: "Date Test Case",
testParse: function() {
var myDate = new Date(2001,0,14); // January 14, 2001
var date = DataSource.parseDate("1/14/2001");
DateAssert.datesAreEqual(date, myDate, "Incorrect date from String.");
date = DataSource.parseDate(myDate);
DateAssert.datesAreEqual(date, myDate, "Incorrect date from Date");
date = DataSource.parseDate(979459200000);
DateAssert.datesAreEqual(date, myDate, "Incorrect date from Number.");
},
testFormat: function() {
var myDate = new Date(2001,0,14); // January 14, 2001
var date = YAHOO.util.Date.format(myDate);
Assert.areSame("01/14/2001", date, "Incorrect default format.");
date = YAHOO.util.Date.format(myDate, {format:"%m/%d/%Y"});
Assert.areSame("01/14/2001", date, "Incorrect %m/%d/%Y");
}
});
/**
*
*
* Runs tests.
*
*
*/
YAHOO.util.Event.addListener(window, "load", function() {
var logger = new TestLogger();
var dsTestSuite = new TestSuite("DataSource Test Suite");
dsTestSuite.add(dsLocalTestCase);
dsTestSuite.add(dsFunctionTestCase);
dsTestSuite.add(dsXHRTestCase);
dsTestSuite.add(dsScriptNodeTestCase);
dsTestSuite.add(dsTestCase);
dsTestSuite.add(dsBaseTestCase);
dsTestSuite.add(dsJSONTestCase);
dsTestSuite.add(dsNumberTestCase);
dsTestSuite.add(dsDateTestCase);
TestRunner.add(dsTestSuite);
YAHOO.util.Event.addListener("btnRun", "click", function(){TestRunner.run();});
YAHOO.util.Dom.get("btnRun").disabled = false;
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
}
TestRunner.run();
});
})();
</script>
</body>
</html>

View file

@ -1,306 +0,0 @@
<html>
<head>
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js" ></script>
<script type="text/javascript" src="../../../build/event/event-min.js" ></script>
<script type="text/javascript" src="../../../build/datasource/datasource.js" ></script>
<script type="text/javascript">
YAHOO.util.DateLocale['fr'] = YAHOO.lang.merge(YAHOO.util.DateLocale, {
a: ['dim', 'lun', 'mar', 'mer', 'jeu', 'ven', 'sam'],
A: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],
b: ['jan', 'fév', 'mar', 'avr', 'mai', 'jun', 'jui', 'aoû', 'sep', 'oct', 'nov', 'déc'],
B: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
p: ['', ''],
P: ['', ''],
x: '%d.%m.%Y'
});
YAHOO.util.DateLocale['fr-CA'] = YAHOO.lang.merge(YAHOO.util.DateLocale['fr'], { x: '%Y-%m-%d' });
YAHOO.util.DateLocale['fr-CH'] = YAHOO.lang.merge(YAHOO.util.DateLocale['fr'], { x: '%d. %m. %y' });
YAHOO.util.DateLocale['de'] = YAHOO.lang.merge(YAHOO.util.DateLocale['fr'], {
a: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
A: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
b: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
B: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
});
YAHOO.util.DateLocale['de-CH'] = YAHOO.lang.merge(YAHOO.util.DateLocale['de'], {
a: ['Son', 'Mon', 'Die', 'Mit', 'Don', 'Fre', 'Sam'],
x: '%Y-%m-%d'
});
YAHOO.util.DateLocale['hi'] = YAHOO.lang.merge(YAHOO.util.DateLocale, {
"a": ["\u0930\u0935\u093f ","\u0938\u094b\u092e ","\u092e\u0902\u0917\u0932 ","\u092c\u0941\u0927 ","\u0917\u0941\u0930\u0941 ","\u0936\u0941\u0915\u094d\u0930 ","\u0936\u0928\u093f "],
"A": ["\u0930\u0935\u093f\u0935\u093e\u0930 ","\u0938\u094b\u092e\u0935\u093e\u0930 ","\u092e\u0902\u0917\u0932\u0935\u093e\u0930 ","\u092c\u0941\u0927\u0935\u093e\u0930 ","\u0917\u0941\u0930\u0941\u0935\u093e\u0930 ","\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930 ","\u0936\u0928\u093f\u0935\u093e\u0930 "],
"b": ["\u091c\u0928\u0935\u0930\u0940","\u092b\u093c\u0930\u0935\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u0905\u092a\u094d\u0930\u0947\u0932","\u092e\u0908","\u091c\u0942\u0928","\u091c\u0941\u0932\u093e\u0908","\u0905\u0917\u0938\u094d\u0924","\u0938\u093f\u0924\u092e\u094d\u092c\u0930","\u0905\u0915\u094d\u091f\u0942\u092c\u0930","\u0928\u0935\u092e\u094d\u092c\u0930","\u0926\u093f\u0938\u092e\u094d\u092c\u0930"],
"B":["\u091c\u0928\u0935\u0930\u0940","\u092b\u093c\u0930\u0935\u0930\u0940","\u092e\u093e\u0930\u094d\u091a","\u0905\u092a\u094d\u0930\u0947\u0932","\u092e\u0908","\u091c\u0942\u0928","\u091c\u0941\u0932\u093e\u0908","\u0905\u0917\u0938\u094d\u0924","\u0938\u093f\u0924\u092e\u094d\u092c\u0930","\u0905\u0915\u094d\u091f\u0942\u092c\u0930","\u0928\u0935\u092e\u094d\u092c\u0930","\u0926\u093f\u0938\u092e\u094d\u092c\u0930"],
"c": "%A %d %B %Y %r",
"p": ["\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928","\u0905\u092a\u0930\u093e\u0939\u094d\u0928"],
"P": ["\u092a\u0942\u0930\u094d\u0935\u093e\u0939\u094d\u0928","\u0905\u092a\u0930\u093e\u0939\u094d\u0928"],
"r":"%I:%M:%S %p %Z",
"x":"%A %d %B %Y",
"X":"%I:%M:%S %Z"
});
YAHOO.util.DateLocale['ko-KR'] = YAHOO.lang.merge(YAHOO.util.DateLocale, {
"a": ["\uc77c","\uc6d4","\ud654","\uc218","\ubaa9","\uae08","\ud1a0"],
"A": ["\uc77c\uc694\uc77c","\uc6d4\uc694\uc77c","\ud654\uc694\uc77c","\uc218\uc694\uc77c","\ubaa9\uc694\uc77c","\uae08\uc694\uc77c","\ud1a0\uc694\uc77c"],
"b": [" 1\uc6d4"," 2\uc6d4"," 3\uc6d4"," 4\uc6d4"," 5\uc6d4"," 6\uc6d4"," 7\uc6d4"," 8\uc6d4"," 9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],
"B": ["1\uc6d4","2\uc6d4","3\uc6d4","4\uc6d4","5\uc6d4","6\uc6d4","7\uc6d4","8\uc6d4","9\uc6d4","10\uc6d4","11\uc6d4","12\uc6d4"],
"c": "%x (%a) %r",
"p": ["\uc624\uc804","\uc624\ud6c4"],
"P": ["\uc624\uc804","\uc624\ud6c4"],
"r": "%p %I\uc2dc %M\ubd84 %S\ucd08",
"x": "%Y\ub144 %m\uc6d4 %d\uc77c",
"X": "%H\uc2dc %M\ubd84 %S\ucd08"
});
</script>
<style type="text/css">
TH, TD { font-size: 0.8em; }
.nomatch { background-color: #f88; #color: #fff; }
.match { background-color: #8f8; #color: #000; }
TH { text-align: left; }
</style>
</head>
<body>
<?php
$testdates = array(time(), strtotime('1900/01/01'), strtotime('2008/01/01'), strtotime('2008/01/01 08:00:00'), strtotime('2007/12/31 23:59:59'), strtotime('2008/02/29'), strtotime('2000/12/31'));
/*$testdates = array();
for($i=1; $i<366; $i++)
{
$testdates[] = strtotime("2008/01/$i");
$testdates[] = strtotime("2008/01/$i 11:59:59");
$testdates[] = strtotime("2008/01/$i 12:00:00");
}*/
$formats = array('a','A','b','B','c','C','d','D','e','F','g','G','h','H','I','j','k','l','m','M','n','p','P','r','R','s','S','t','T','u','U','V','w','W','x','X','y','Y','z','Z','%');
//$formats = array('j');
foreach($testdates as $date)
{
?>
<script type="text/javascript">
var date = new Date('<?php echo strftime('%Y/%m/%d %H:%M:%S', $date); ?>');
</script>
<h2>Testing: <?php echo strftime('%Y/%m/%d %H:%M:%S', $date) ?> (
<script type="text/javascript">
document.write(YAHOO.util.Date.format(date, {format: '%Y/%m/%d %H:%M:%S'}));
</script>
)</h2>
<table cellspacing=0 cellpadding=4 border=1>
<tr> <th rowspan="2">format</th> <th colspan="2">US English</th> <th colspan="2">UK English</th> <th colspan="2">French</th> <th colspan="2">Canadian French</th> <th colspan="2">Swiss French</th> <th colspan="2">German</th> <th colspan="2">Swiss German</th> <th colspan="2">Hindi</th> <th colspan="2">Hangul</th> </tr>
<tr> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> <th>PHP</th> <th>Javascript</th> </tr>
<?php
foreach($formats as $format)
{
$format = "%$format";
setlocale(LC_TIME, 'en_US.UTF-8', 'en_US');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<tr>
<td>
<?php echo $format; ?>
</td>
<!-- en-US -->
<td>
<?php echo $sDate ?>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "en-US");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- en-GB -->
<?php
setlocale(LC_TIME, 'en_GB.UTF-8', 'en_GB');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "en-GB");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- fr -->
<?php
setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr_FR', 'fr');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "fr");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- fr-CA -->
<?php
setlocale(LC_TIME, 'fr_CA.UTF-8', 'fr_CA');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "fr-CA");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- fr-CH -->
<?php
setlocale(LC_TIME, 'fr_CH.UTF-8', 'fr_CH');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "fr-CH");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- de -->
<?php
setlocale(LC_TIME, 'de_DE.UTF-8', 'de_DE', 'de');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "de-DE");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- de-CH -->
<?php
setlocale(LC_TIME, 'de_CH.UTF-8', 'de_CH');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "de-CH");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- hi -->
<?php
setlocale(LC_TIME, 'hi_IN.UTF-8', 'hi_IN');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "hi-IN");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
<!-- ko_KR -->
<?php
setlocale(LC_TIME, 'ko_KR.UTF-8', 'ko_KR');
$sDate = strftime($format, $date);
$jsDate = preg_replace('/\n/', '\n', $sDate);
?>
<td>
<?php echo $sDate ?>
</td>
</td>
<script type="text/javascript">
var sDate=YAHOO.util.Date.format(date, {format: "<?php echo $format ?>"}, "ko-KR");
document.write("<td class='" + (sDate == "<?php echo $jsDate ?>"?"match":"nomatch") + "'>");
document.write(sDate);
document.write("</td>\n");
</script>
</tr>
<?php
}
?>
</table>
<?php
}
?>
</body>
</html>
<?php
setlocale(LC_TIME, 'ko_KR.UTF-8', 'ko_KR');
$lc = array (
"a" => array(),
"A" => array(),
"b" => array(),
"B" => array(),
"c" => "%Y %m %d (%a) %r",
"p" => array(),
"P" => array(),
"r" => "%p %I %M %S %p %Z",
"x" => "%Y %m %d",
"X" => "%H %M %S"
);
$lc['c'] = strftime("%c");
$lc['r'] = strftime("%r");
$lc['x'] = strftime("%X");
$lc['X'] = strftime("%X");
for($i=6; $i<13; $i++)
{
$d = strtotime("2008/01/$i");
$lc['a'][] = strftime("%a", $d);
$lc['A'][] = strftime("%A", $d);
}
for($i=1; $i<13; $i++)
{
$d = strtotime("2008/$i/1");
$lc['b'][] = strftime("%b", $d);
$lc['B'][] = strftime("%B", $d);
}
$d = strtotime("2008/01/01 10:00:00");
$lc['p'][] = strftime("%p", $d);
$lc['P'][] = strftime("%p", $d);
$d = strtotime("2008/01/01 22:00:00");
$lc['p'][] = strftime("%p", $d);
$lc['P'][] = strftime("%p", $d);
echo "<!-- " . json_encode($lc) . " -->";
?>

View file

@ -1,45 +0,0 @@
<?php
/* yadl_spaceid - Skip Stamping */
// Yahoo! proxy
// Hard-code hostname and path:
define ('PATH', 'http://local.yahooapis.com/LocalSearchService/V2/localSearch');
$type = "text/xml";
// Get all query params
$query = "?";
foreach ($_GET as $key => $value) {
if(($key == "output") && ($value == "json")) {
$type = "application/json";
}
$query .= urlencode($key)."=".urlencode($value)."&";
}
foreach ($_POST as $key => $value) {
if(($key == "output") && ($value == "json")) {
$type = "application/json";
}
$query .= $key."=".$value."&";
}
$query .= "appid=YahooDemo";
$url = PATH.$query;
// Open the Curl session
$session = curl_init($url);
// Don't return HTTP headers. Do return the contents of the call
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Make the call
$response = curl_exec($session);
header("Content-Type: ".$type);
echo $response;
curl_close($session);
?>

View file

@ -1,49 +0,0 @@
<?php
/* yadl_spaceid - Skip Stamping */
// This script returns an HTML table
header('Content-type: text/html');
// Define defaults
$rows = 1; // default one row
$cols = 1; // default one column
// How many rows to get?
if(strlen($_GET['rows']) > 0) {
$rows = $_GET['rows'];
}
// How many columns
if(strlen($_GET['cols']) > 0) {
$cols = $_GET['cols'];
}
// Return the data
returnMarkup($rows, $cols);
function returnMarkup($rows, $cols) {
// start the table
$markup = "<table><thead><tr>";
// build the thead
for($i=0; $i<$cols; $i++) {
$markup = $markup."<th>header ".$i."</th>";
}
$markup = $markup."</tr></thead><tbody>";
// build the tbody
for($j=0; $j<$rows; $j++) {
$markup = $markup."<tr>";
for($i=0; $i<$cols; $i++) {
$markup = $markup."<td>data cell ".$j."-".$i."</td>";
}
$markup = $markup."</tr>";
}
// end the table
$markup = $markup."</tbody></table>";
echo $markup;
}
?>

View file

@ -1,121 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Test</title>
<style type="text/css">
</style>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="../../../build/datatable/assets/skins/sam/datatable.css" />
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/datasource/datasource-debug.js"></script>
<script type="text/javascript" src="../../../build/datatable/datatable-debug.js"></script>
<!--begin custom header content for this example-->
<style type="text/css">
</style>
<!--end custom header content for this example-->
</head>
<body class="yui-skin-sam">
<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
<div id="container"></div>
<div id="container2"></div>
</div>
<script type="text/javascript">
YAHOO.util.Event.addListener(window, "load", function() {
YAHOO.example.Test = function() {
var simpletext="<bookstore>"
simpletext=simpletext+"<book>";
simpletext=simpletext+"<empty1/>";
simpletext=simpletext+"<title>Everyday Italian</title>";
simpletext=simpletext+"<empty2/>";
simpletext=simpletext+"<author>Giada De Laurentiis</author>";
simpletext=simpletext+"<year>2005</year>";
simpletext=simpletext+"<empty3/>";
simpletext=simpletext+"</book>";
simpletext=simpletext+"</bookstore>";
var complextext = "<myroot rootatt='5'><top>topvalue</top><second nested='nestedsecond' /><allitems><livehere><item type='foo'><name type='nametype0'>Abc</name><rank>0</rank><subitem><name type='subnametype0'>subABC</name><age>10</age></subitem></item><item type='bar'><name type='nametype1'>Def</name><rank>1</rank><subitem><name type='subnametype1'>subDEF</name><age>11</age></subitem></item><item type='bat'><name type='nametype2'>Ghi</name><rank>2</rank><subitem><name type='subnametype2'>subGHI</name><age>12</age></subitem></item></livehere></allitems></myroot>";
var getXmlDoc = function(text) {
var xmlDoc;
try { //Firefox, Mozilla, Opera, etc.
parser=new DOMParser();
xmlDoc=parser.parseFromString(text,"text/xml");
}
catch(e) {
alert(e.message);
try {//Internet Explorer
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
catch(e) {
alert(e.message);
}
}
return xmlDoc;
};
var myColumnDefs = [
{key:"empty1"},
{key:"title"},
{key:"empty2"},
{key:"author"},
{key:"year"},
{key:"empty3"}
];
var myDataSource = new YAHOO.util.DataSource(getXmlDoc(simpletext));
myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
myDataSource.responseSchema = {
resultNode: "book",
fields: ["empty1","title","empty2","author","year","empty3"]
};
var myColumnDefs2 = [
{key:"type"},
{key:"rank"},
{key:"subnameatt"},
{key:"age"},
{key:"name"}
];
var myDataTable = new YAHOO.widget.DataTable("container", myColumnDefs, myDataSource);
var myDataSource2 = new YAHOO.util.DataSource(getXmlDoc(complextext));
myDataSource2.responseType = YAHOO.util.DataSource.TYPE_XML;
myDataSource2.useXPath = true;
myDataSource2.responseSchema = {
metaFields: {rootatt:"/myroot/@rootatt", topnode:"//top", nestedatt:"//second/@nested"},
resultNode: "item",
fields: [{key:"type", locator:"@type"}, {key:"rank", parser:"number"}, "name", {key:"subnameatt", locator:"subitem/name/@type"}, {key:"age", locator:"subitem/age", parser:"number"}]
};
var myDataTable2 = new YAHOO.widget.DataTable("container2", myColumnDefs2, myDataSource2);
return {
ds: [myDataSource],
dt: [myDataTable]
};
}();
});
</script>
<!--END SOURCE CODE FOR EXAMPLE =============================== -->
</body>
</html>

View file

@ -1,151 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<link type="text/css" rel="stylesheet" href="../../../build/paginator/assets/skins/sam/paginator.css">
<style type="text/css" class="highlight-ignore">
h1 {
font: normal 125%/1.4 Arial, sans-serif;
}
.yui-log {
display: inline;
float: right;
position: relative;
}
.yui-log-container {
width: 300px;
}
.yui-log .yui-log-bd {
height: 525px;
}
.yui-log .yui-log-ft {
position: static;
}
.highlight-example {
display: inline;
float: left;
width: 650px;
}
.highlight-example h2 {
display: none;
}
.yui-log-bd h3 {
border-bottom: 1px solid #ccc;
color: #900;
margin: 0;
padding: 1em 0 0 1ex;
}
</style>
</head>
<body class="yui-skin-sam">
<h1>Tests</h1>
<div id="testbed"></div>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest-min.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/datasource/datasource.js"></script>
<script type="text/javascript" src="../../../build/datatable/datatable.js"></script>
<script type="text/javascript">
(function () {
var t = YAHOO.tool,
u = YAHOO.util,
w = YAHOO.widget,
TestSuite = t.TestSuite,
TestCase = t.TestCase,
TestLogger = t.TestLogger,
TestRunner = t.TestRunner,
Event = u.Event,
Dom = u.Dom,
Assert = u.Assert,
AAssert = u.ArrayAssert,
OAssert = u.ObjectAssert,
DataSource = u.DataSource,
DataTable = w.DataTable,
testbed = Dom.get('testbed'),
suite;
suite = new TestSuite("Tests");
suite.add(new TestCase({
name : "Test Case",
setUp : function () {
function formatText(cell,r,c,data) {
cell.className += ' foo';
DataTable.formatText(cell,r,c,data);
}
function formatDefault(cell,r,c,data) {
cell.className += ' bar';
DataTable.formatDefault(cell,r,c,data);
}
this.dataSource = new DataSource({ recs : [{a:'P&I', b:'PB&amp;J'}]}, {
responseType: DataSource.TYPE_JSON,
responseSchema: { resultsList: 'recs', fields : ['a','b'] }
});
this.colDef = [
{key: 'a'},
{key: 'b'},
{key: 'a', formatter: formatText},
{key: 'b', formatter: formatText},
{key: 'a', formatter: formatDefault},
{key: 'b', formatter: formatDefault}
]
},
tearDown : function () {
//this.dataTable.destroy();
},
testDefaultFormatter : function () {
this.dataTable = new DataTable(testbed,this.colDef,this.dataSource);
var cells = Dom.getElementsByClassName('yui-dt-liner','div',
this.dataTable.getTbodyEl()),i;
// TODO: how to test other than by eye?
function ins(c) {
var n = document.createTextNode(c.innerHTML);
testbed.parentNode.insertBefore(n,testbed.nextSibling);
}
ins(cells[5]);
ins(cells[1]);
ins(cells[4]);
ins(cells[0]);
}
}));
Event.onDOMReady(function () {
var logger = new TestLogger("log");
logger.hideCategory('info');
logger.formatMsg = function (e) {
if (e.category === 'section') {
return "<h3>"+e.msg+"</h3>";
} else if (e.category === "break") {
return "<br>";
} else {
return TestLogger.prototype.formatMsg.call(this,e);
}
};
YAHOO.log("Tests","section","TestRunner");
TestRunner.add(suite);
TestRunner.run();
});
})();
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js"></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,56 +0,0 @@
<html>
<head>
<title>YUI DataTable Tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/datatable/assets/skins/sam/datatable.css" />
<style type="text/css">
.yui-skin-sam .yui-log .yui-log-bd {height:60em;margin-top:2em;}
</style>
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/event-simulate/event-simulate-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/datasource/datasource-min.js"></script>
<script type="text/javascript" src="../../../build/datatable/datatable.js"></script>
<script type="text/javascript" src="../../../build/paginator/paginator.js"></script>
<script type="text/javascript" src="datatable/DataTable.js"></script>
<script type="text/javascript" src="datatable/ColumnSet.js"></script>
<script type="text/javascript" src="datatable/RecordSet.js"></script>
</head>
<body class="yui-skin-sam">
<h1>DataTable Tests</h1>
<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
<script type="text/javascript">
(function() {
/**
*
*
* Sets up test page.
*
*
*/
YAHOO.util.Event.addListener(window, "load", function() {
var logger = new YAHOO.tool.TestLogger();
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
}
YAHOO.util.Event.addListener("btnRun", "click", function(){YAHOO.tool.TestRunner.run();});
YAHOO.tool.TestRunner.run();
YAHOO.util.Dom.get("btnRun").disabled = false;
});
})();
</script>
</body>
</html>

View file

@ -1,152 +0,0 @@
(function() {
var gCount = -1;
var Dom=YAHOO.util.Dom,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert,
DateAssert=YAHOO.util.DateAssert,
UserAction=YAHOO.util.UserAction,
TestCase = YAHOO.tool.TestCase,
TestLogger = YAHOO.tool.TestLogger,
TestRunner = YAHOO.tool.TestRunner,
TestSuite = YAHOO.tool.TestSuite,
DataSource = YAHOO.util.DataSource,
DataTable = YAHOO.widget.DataTable,
ColumnSet = YAHOO.widget.ColumnSet,
RecordSet = YAHOO.widget.RecordSet;
/**
*
*
* Base DataTable test template. Sets up values for a DataTable instance.
*
*
*/
var dtBaseTemplate = {
name: "DataTable Base Tests",
dsData: [
{a:"0a",b:"0b",c:"0c"},
{a:"1a",b:"1b",c:"1c"},
{a:"2a",b:"2b",c:"2c"},
{a:"3a",b:"3b",c:"3c"}
],
dsConfig: {
responseType:YAHOO.util.DataSource.TYPE_JSARRAY,
responseSchema:{fields:["a","b","c"]}
},
columns: [{key:"a"},{key:"b"},{key:"c"}]
};
/**
*
*
* Base DataTable test case.
*
*
*/
function DataTableTestCase(template) {
DataTableTestCase.superclass.constructor.call(this, template);
};
YAHOO.lang.extend(DataTableTestCase, TestCase);
DataTableTestCase.prototype.setUp = function() {
// Create container anew
this.container = document.createElement("div");
///this.container.id = "testDTContainer"; // Is this necessary?
document.body.appendChild(this.container);
// Create DataSource anew
this.datasource = new YAHOO.util.DataSource(this.dsData, this.dsConfig);
};
DataTableTestCase.prototype.tearDown = function() {
// Destroy DataTable
this.datatable.destroy();
this.datatable = null;
// Destroy container
if(this.container !== null) {
YAHOO.util.Event.purgeElement(this.container, true);
document.body.removeChild(this.container);
this.container = null;
}
// TODO: need a destroy method
this.datasource = null;
};
DataTableTestCase.prototype.createInstance = function(oDT, oConfig) {
oDT = oDT || DataTable;
this.datatable = new oDT(this.container, this.columns, this.datasource, oConfig);
gCount++;
return this.datatable;
};
/**
*
*
* Tests ColumnSet APIs.
*
*
*/
var csColumnSetTemplate = YAHOO.lang.merge(dtBaseTemplate, {
name: "DataTable ColumnSet Tests",
testGetColumnSet: function() {
var dt = this.createInstance();
var cs = dt.getColumnSet();
Assert.isInstanceOf(ColumnSet, cs, "Expected a ColumnSet");
},
testGetColumn: function() {
var dt = this.createInstance();
//dt.subscribe("initEvent", function() {
var cs = dt.getColumnSet();
var oColumn = cs.keys[0];
var sColId = oColumn.getId();
var el = dt.getTheadEl().rows[0].cells[0];
var oTestColumn = dt.getColumn(el);
Assert.areSame(oColumn, oTestColumn, "Expected to get Column by el reference");
//TODO: get column by el reference child
// Removed col elements
//el = Dom.get(dt.getId()+"-col"+sColId);
//oTestColumn = dt.getColumn(el);
//Assert.areSame(oColumn, oTestColumn, "Expected to get Column by DOM ID");
oTestColumn = dt.getColumn(0);
Assert.areSame(oColumn, oTestColumn, "Expected to get Column by key index");
oTestColumn = cs.getColumn("a");
Assert.areSame(oColumn, oTestColumn, "Expected to get Column by key (ColumnSet method)");
oTestColumn = cs.getColumnById(sColId);
Assert.areSame(oColumn, oTestColumn, "Expected to get Column by Column ID (ColumnSet method)");
//});
}
//TODO: More ColumnSet APIs
});
var csColumnSetTest = new DataTableTestCase(csColumnSetTemplate);
/**
*
*
* Runs tests.
*
*
*/
YAHOO.util.Event.addListener(window, "load", function() {
var columnsetsuite = new TestSuite("ColumnSet Test Suite");
columnsetsuite.add(csColumnSetTest);
TestRunner.add(columnsetsuite);
});
})();

File diff suppressed because it is too large Load diff

View file

@ -1,196 +0,0 @@
(function() {
var gCount = -1;
var Dom=YAHOO.util.Dom,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert,
DateAssert=YAHOO.util.DateAssert,
UserAction=YAHOO.util.UserAction,
TestCase = YAHOO.tool.TestCase,
TestLogger = YAHOO.tool.TestLogger,
TestRunner = YAHOO.tool.TestRunner,
TestSuite = YAHOO.tool.TestSuite,
DataSource = YAHOO.util.DataSource,
DataTable = YAHOO.widget.DataTable,
ColumnSet = YAHOO.widget.ColumnSet,
RecordSet = YAHOO.widget.RecordSet;
/**
*
*
* Base DataTable test template. Sets up values for a DataTable instance.
*
*
*/
var dtBaseTemplate = {
name: "DataTable Base Tests",
dsData: [
{a:"0a",b:"0b",c:"0c"},
{a:"1a",b:"1b",c:"1c"},
{a:"2a",b:"2b",c:"2c"},
{a:"3a",b:"3b",c:"3c"}
],
dsConfig: {
responseType:YAHOO.util.DataSource.TYPE_JSARRAY,
responseSchema:{fields:["a","b","c"]}
},
columns: [{key:"a"},{key:"b"},{key:"c"}]
};
/**
*
*
* Base DataTable test case.
*
*
*/
function DataTableTestCase(template) {
DataTableTestCase.superclass.constructor.call(this, template);
};
YAHOO.lang.extend(DataTableTestCase, TestCase);
DataTableTestCase.prototype.setUp = function() {
// Create container anew
this.container = document.createElement("div");
///this.container.id = "testDTContainer"; // Is this necessary?
document.body.appendChild(this.container);
// Create DataSource anew
this.datasource = new YAHOO.util.DataSource(this.dsData, this.dsConfig);
};
DataTableTestCase.prototype.tearDown = function() {
// Destroy DataTable
this.datatable.destroy();
this.datatable = null;
// Destroy container
if(this.container !== null) {
YAHOO.util.Event.purgeElement(this.container, true);
document.body.removeChild(this.container);
this.container = null;
}
// TODO: need a destroy method
this.datasource = null;
};
DataTableTestCase.prototype.createInstance = function(oDT, oConfig) {
oDT = oDT || DataTable;
this.datatable = new oDT(this.container, this.columns, this.datasource, oConfig);
gCount++;
return this.datatable;
};
/**
*
*
* Tests RecordSet APIs.
*
*
*/
var rsRecordSetTemplate = YAHOO.lang.merge(dtBaseTemplate, {
name: "DataTable RecordSet Tests",
testGetRecordSet: function() {
var dt = this.createInstance();
var rs = dt.getRecordSet();
Assert.isInstanceOf(RecordSet, rs, "Expected a RecordSet");
},
testGetRecord: function() {
var dt = this.createInstance();
//dt.subscribe("initEvent", function() {
var rs = dt.getRecordSet();
var oRecord = rs._records[3];
var sRecordId = oRecord.getId();
var el = dt.getTbodyEl().rows[3];
var oTestRecord = dt.getRecord(el);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by el reference");
var el = dt.getTbodyEl().rows[3].cells[2];
oTestRecord = dt.getRecord(el);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by el reference child");
el = Dom.get(oTestRecord.getId());
oTestRecord = null;
oTestRecord = dt.getRecord(el);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by DOM ID");
oTestRecord = dt.getRecord(3);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by position index");
oTestRecord = dt.getRecord(sRecordId);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record ID");
oTestRecord = dt.getRecord(oRecord);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record instance");
oTestRecord = rs.getRecord(3);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by position index (RecordSet method)");
oTestRecord = rs.getRecord(sRecordId);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record ID (RecordSet method)");
oTestRecord = rs.getRecord(oRecord);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record instance (RecordSet method)");
//});
},
testGetInvalidRecord: function() {
var dt = this.createInstance();
//dt.subscribe("initEvent", function() {
var rs = dt.getRecordSet();
var oRecord = rs._records[3];
dt.deleteRow(3);
oTestRecord = dt.getRecord(oRecord);
Assert.areSame(null, oTestRecord, "Expected not to get Record by invalid Record instance");
oTestRecord = rs.getRecord(oRecord);
Assert.areSame(null, oTestRecord, "Expected not to get Record by invalid Record instance (RecordSet method)");
//});
},
testUpdateKey: function() {
var dt = this.createInstance();
//dt.subscribe("initEvent", function() {
var rs = dt.getRecordSet();
var oTestRecord = rs._records[0];
rs.updateKey(0, "b", "xxx");
Assert.areSame("xxx", oTestRecord.getData("b"), "Failed to update key b of Record 0 by position index");
rs.updateKey(oTestRecord, "b", "zzz");
Assert.areSame("zzz", oTestRecord.getData("b"), "Failed to update key b of Record 0 by instance");
rs.updateKey(oTestRecord.getId(), "b", "yyy");
Assert.areSame("yyy", oTestRecord.getData("b"), "Failed to update key b of Record 0 by ID");
//});
}
//TODO: More RecordSet APIs
});
var rsRecordSetTest = new DataTableTestCase(rsRecordSetTemplate);
/**
*
*
* Runs tests.
*
*
*/
YAHOO.util.Event.addListener(window, "load", function() {
var recordsetsuite = new TestSuite("RecordSet Test Suite");
recordsetsuite.add(rsRecordSetTest);
TestRunner.add(recordsetsuite);
});
})();

File diff suppressed because it is too large Load diff

View file

@ -1,594 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>DOM Test Suite</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/element/element.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<style>
#doc {
border:5px solid #000;
margin:10px;
padding:10px;
}
#hd {
background:#ccc;
}
#foo {
float:left; /* required for getStyle test */
}
#computed-test {
left:-10em;
border-top:2px solid red;
position:relative;
width:10em;
}
#computed-wrap {
background:#ccc;
color:#fff;
}
</style>
</head>
<body>
<em class="my.class our(class" id="class-regex-one">lorem</em>
<em class="my-class" id="class-regex-two">ipsum</em>
<em class="yiv-integer:([{1,30}])^$?*+\|" id="class-regex-three">dolor</em>
<div id="computed-wrap">
<div id="computed-test">test computed style</div>
</div>
<div id="doc">
<div id="hd">
<h1>Page Header</h1>
</div>
<div id="bd">
<div id="main" class="main">
<h2>Section Header</h2>
<em class="lorem ipsum ipsum" id="lorem-ipsum">lorem ipsum</em>
<div class="mod" id="foo">
<div class="hd foo" id="yui-gen1">
<h3>Module Header</h3>
</div>
<div class="bd">
<p>Fusce feugiat diam. Vestibulum elementum dui in augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris pulvinar.</p>
</div>
<div class="ft"><a href="#">more</a></div>
</div>
<div class="mod">
<div class="hd">
<h3>Module Header</h3>
</div>
<div class="bd">
<form action="#" method="get" id="search">
<fieldset>
<legend>Search</legend>
<label for="search-p">Query</label>
<input type="text" name="search-p">
<input type="text" name="search-p" id="search-p">
<input type="text" name="search-p">
<input type="text" name="id">
<input type="submit" value="search">
</fieldset>
</form>
</div>
<div class="ft"><a href="http://www.developer.yahoo.com">more</a></div>
</div>
</div>
</div>
<div id="ft">
<p>In hac habitasse platea dictumst. Sed sit amet ligula vitae justo consequat facilisis. Integer tortor. Integer erat. In hac habitasse platea dictumst. Phasellus convallis quam vitae turpis aliquam lobortis. Aliquam scelerisque condimentum lectus. Proin semper adipiscing leo. Nulla facilisi.</p>
</div>
</div>
<script type="text/javascript">
(function() {
var Y = YAHOO.util,
tool = YAHOO.tool,
Assert = Y.Assert,
ArrayAssert = Y.ArrayAssert,
suite = new tool.TestSuite("yuisuite");
Y.Event.onDOMReady(function() {
var logger = new YAHOO.tool.TestLogger(null, { height: '80%' });
suite.add( new tool.TestCase({
name: 'Y.Dom',
test_get: function() {
Assert.areEqual(document.getElementById('doc'),
Y.Dom.get('doc'), 'wrong node returned');
Assert.areEqual(document.getElementById('doc'),
Y.Dom.get(document.getElementById('doc')), 'wrong node returned');
ArrayAssert.itemsAreEqual(
[ document.getElementById('hd'), document.getElementById('bd') ],
Y.Dom.get(['hd', document.getElementById('bd')]), 'wrong node returned');
Assert.areEqual(null, Y.Dom.get('dox'), 'non-existent ID');
Assert.areEqual('search-p', Y.Dom.get('search-p').id, 'false match on "name"');
Assert.isNull(Y.Dom.get('search-r'), 'false match on "name"');
Assert.isNull(Y.Dom.get('search-r'), 'false match on "name"');
Assert.areEqual(document.getElementById('doc'), Y.Dom.get(new Y.Element('doc')),
"Y.Element('doc')");
Assert.areEqual(document.getElementById('search'), Y.Dom.get('search'),
"Y.Dom.get('search')");
},
test_getStyle: function() {
Assert.areEqual('left',
Y.Dom.getStyle('foo', 'float'), 'wrong style returned');
Assert.areEqual('10px',
Y.Dom.getStyle('doc', 'marginBottom'), 'wrong style returned');
Assert.areEqual('10px',
Y.Dom.getStyle('doc', 'margin-bottom'), 'wrong style returned');
Assert.areEqual('5px',
Y.Dom.getStyle('doc', 'borderBottomWidth'), 'wrong style returned');
Assert.areEqual('5px',
Y.Dom.getStyle('doc', 'border-bottom-width'), 'wrong style returned');
},
test_setStyle: function() {
Y.Dom.setStyle('ft', 'opacity', 0.5);
Assert.areEqual(Y.Dom.getStyle('ft', 'opacity'),
0.5, 'wrong style returned');
Y.Dom.setStyle('main', 'float', 'none');
Assert.areEqual(Y.Dom.getStyle('main', 'float'),
'none', 'wrong style returned');
Assert.isUndefined(Y.Dom.setStyle('fake-id', 'width', '200px'), "(Y.Dom.setStyle('fake-id', 'width', '200px')");
Assert.isUndefined(Y.Dom.setStyle(['fake-id'], 'width', '200px'), "(Y.Dom.setStyle(['fake-id'], 'width', '200px')");
},
test_computedStyle: function() {
var el = Y.Dom.get('computed-test');
Assert.areEqual(el.offsetWidth + 'px', Y.Dom.getComputedStyle(el, 'width'), "Y.Dom.getComputedStyle(el, 'width')");
Assert.isTrue(Y.Dom.getComputedStyle(el, 'left').indexOf('px') > -1, "Y.Dom.getComputedStyle(el, 'left')");
Assert.areEqual('rgb(255, 255, 255)', Y.Dom.getComputedStyle(el, 'color'), "Y.Dom.getComputedStyle(el, 'color')");
Assert.areEqual('transparent', Y.Dom.getComputedStyle(el, 'backgroundColor'), "Y.Dom.getComputedStyle(el, 'backgroundColor')");
Assert.areEqual('rgb(255, 0, 0)', Y.Dom.getComputedStyle(el, 'borderTopColor'), "Y.Dom.getComputedStyle(el, 'borderTopColor')");
},
test_hasClass: function() {
Assert.isTrue(Y.Dom.hasClass('lorem-ipsum', 'lorem'),
'hasClass failed with existing class');
Assert.isFalse(Y.Dom.hasClass('lorem-ipsum', 'dolor'),
'hasClass failed with non-existing class');
Assert.isFalse(Y.Dom.hasClass('class-regex-two', 'my.class'), 'my.class should not match my-class');
Assert.isTrue(Y.Dom.hasClass('class-regex-one', 'my.class'), 'my.class should match element with my.class');
Assert.isTrue(Y.Dom.hasClass('class-regex-one', 'our(class'), 'our(class should match element with our(class');
Assert.isTrue(Y.Dom.hasClass('class-regex-one', /our.clas+/), '/our.clas+/ should match element with our(class');
Assert.isTrue(Y.Dom.hasClass('class-regex-three', 'yiv-integer:([{1,30}])^$?*+\\|'), "special chars in className");
},
test_addClass: function() {
Y.Dom.addClass('ft', 'foo');
Assert.areEqual(
'foo',
document.getElementById('ft').className,
'addClass failed to add');
Assert.isFalse(Y.Dom.addClass('ft', 'foo'),
'addClass should return false if element already hasClass');
},
test_removeClass: function() {
Y.Dom.removeClass('lorem-ipsum', 'ipsum');
Assert.areEqual('lorem', Y.Dom.get('lorem-ipsum').className,
'removeClass failed');
Assert.isFalse(Y.Dom.removeClass('main', 'bar'),
'removeClass should return false if class not present');
Assert.isFalse(Y.Dom.removeClass('main'),
'removeClass should return false if no class argument');
},
test_replaceClass: function() {
Y.Dom.replaceClass('lorem-ipsum', 'lorem', 'ipsum');
Assert.areEqual('ipsum', Y.Dom.get('lorem-ipsum').className,
'replaceClass failed');
Assert.isFalse(Y.Dom.replaceClass('lorem-ipsum', 'ipsum'),
'replaceClass should return false if new class not specified');
Assert.isTrue(Y.Dom.replaceClass('lorem-ipsum', '', 'lorem'),
'replaceClass should addClass if old class not specified');
Assert.areEqual('ipsum lorem', Y.Dom.get('lorem-ipsum').className,
'replaceClass failed: should addClass if old class not specified');
Assert.isFalse(Y.Dom.replaceClass('lorem-ipsum', 'ipsum', 'ipsum'),
'replaceClass should return false if new class and old are equal');
var el = document.createElement('div');
el.className = 'foo bar';
Y.Dom.replaceClass(el, 'bar', 'baz');
Assert.areEqual('foo baz', el.className, "Y.Dom.replaceClass(el, 'bar', 'baz')");
el.className = 'foo bar';
Y.Dom.replaceClass(el, /(?:^|\s)bar(?= |$)/g, 'baz');
Assert.areEqual('foo baz', el.className, "Y.Dom.replaceClass(el, /bar/, 'baz')");
el.className = 'foo bar';
Y.Dom.replaceClass(el, /bar/, 'baz');
Assert.areEqual('foo baz', el.className, "Y.Dom.replaceClass(el, /bar/, 'baz')");
el.className = 'yiv-required yiv-integer:[1,30]';
Y.Dom.replaceClass(el, new RegExp('yiv-integer:\\[1,(?:30|72|43200)\\]'), 'yiv-integer:[1]');
Assert.areEqual('yiv-required yiv-integer:[1]', el.className, "Y.Dom.replaceClass(el, new RegExp('yiv-integer:\\[1,(?:30|72|43200)\\]'), 'yiv-integer:[1]')");
el.className = 'satg-x';
Y.Dom.replaceClass(el, /satg-(x|y|z)/, 'satg-y');
Assert.areEqual('satg-y', el.className, "Y.Dom.replaceClass(el, /satg-(x|y|z)/, 'satg-y')");
},
test_getElementsByClassName: function() {
Assert.areEqual(2, Y.Dom.getElementsByClassName('mod').length, 'getByClassName failed for .mod');
Assert.areEqual(2, Y.Dom.getElementsByClassName('mod', 'div').length, 'getByClassName failed for div.mod');
Assert.areEqual(2, Y.Dom.getElementsByClassName('mod', 'div', 'bd').length, 'getByClassName failed for #bd div.mod');
Assert.areEqual(2, Y.Dom.getElementsByClassName('mod', '', 'bd').length,'getByClassName failed for #bd .mod' );
Assert.areEqual(0, Y.Dom.getElementsByClassName('mod', 'div', 'hd').length, 'getByClassName failed for #hd .mod');
Assert.areEqual(0, Y.Dom.getElementsByClassName('moo').length, 'getByClassName failed for .moo');
Assert.areEqual(0, Y.Dom.getElementsByClassName('mod', 'div', 'fake-id').length, 'getByClassName failed for #fake-id div.mod');
Assert.areEqual(2, Y.Dom.getElementsByClassName('hd', 'div').length, 'getByClassName("hd") ');
Assert.areEqual(3, Y.Dom.getElementsByClassName(/hd/, 'div').length, 'getByClassName("hd") ');
},
test_getElementsBy: function() {
Assert.areEqual(2, Y.Dom.getElementsBy(function(el) { return el.className == 'mod'}).length, 'getBy failed for .mod');
Assert.areEqual(2, Y.Dom.getElementsBy(function(el) { return el.className == 'mod'}, 'div').length, 'getBy failed for div.mod');
Assert.areEqual(2, Y.Dom.getElementsBy(function(el) { return el.className == 'mod'}, 'div', 'bd').length, 'getBy failed for #bd div.mod');
Assert.areEqual(2, Y.Dom.getElementsBy(function(el) { return el.className == 'mod'}, '', 'bd').length, 'getBy failed for #bd .mod');
Assert.areEqual(0, Y.Dom.getElementsBy(function(el) { return el.className == 'mod'}, 'div', 'hd').length, 'getBy failed for #hd div.mod');
Assert.areEqual(0, Y.Dom.getElementsBy(function(el) { return el.className == 'moo'}).length, 'getBy failed for .moo');
Assert.areEqual(0, Y.Dom.getElementsBy(function(el) { return el.className == 'mod'}, 'div', 'fake-id').length, 'getBy failed for #fake-id div.mod');
},
test_getElementBy: function() {
Assert.areEqual('bd', Y.Dom.getElementBy(function(el) { return el.id === 'bd'; }).id, "getElementBy(function(el) { return el.id === 'bd'; })");
Assert.areEqual('main', Y.Dom.getElementBy(function(el) { return el.id === 'main'; }).id, 'bd', "getElementBy(function(el) { return el.id === 'main'; }, 'bd')");
},
test_generateId: function() {
var h1 = document.getElementsByTagName('h1')[0];
var h3 = document.getElementsByTagName('h3')[0];
Y.Dom.generateId(h1);
Assert.areEqual('yui-gen0', h1.id, "Y.Dom.generateId(h1)");
Y.Dom.generateId(h3);
Assert.areEqual('yui-gen1yui-gen2', h3.id, "Y.Dom.generateId(h3)");
},
test_isAncestor: function() {
Assert.isFalse(Y.Dom.isAncestor(Y.Dom.get('main'), Y.Dom.get('bd')),
'isAncestor failed for false case');
Assert.isFalse(Y.Dom.isAncestor('main', 'bd'),
'isAncestor failed for false case');
Assert.isTrue(Y.Dom.isAncestor('bd', 'main'),
'isAncestor failed for true case');
Assert.isFalse(
Y.Dom.isAncestor(document.body.appendChild(document.createElement('div')), 'bd'),
'isAncestor failed for false case');
},
test_getRegion: function() {
Assert.isObject(Y.Dom.getRegion('bd'),
'getRegion failed for element in document');
Assert.isFalse(Y.Dom.getRegion('xbd'),
'getRegion failed for id not in document');
Assert.isFalse(Y.Dom.getRegion(document.createElement('div')),
'getRegion failed for element not in document');
Assert.areEqual(document.getElementById('bd').offsetWidth, Y.Dom.getRegion('bd').width,
'getRegion failed for width');
Assert.areEqual(document.getElementById('bd').offsetHeight, Y.Dom.getRegion('bd').height,
'getRegion failed for height');
Assert.isTrue(Y.Dom.getRegion('bd').left > 0, 'getRegion failed for left');
Assert.isTrue(Y.Dom.getRegion('bd').right > 0, 'getRegion failed for right');
Assert.isTrue(Y.Dom.getRegion('bd').top > 0, 'getRegion failed for top');
Assert.isTrue(Y.Dom.getRegion('bd').bottom > 0, 'getRegion failed for bottom');
},
test_point: function() {
var point = new Y.Point(100, 200);
var testX = point.left === point.right && point.x === point[0] && point[0] === point.left && point.left === 100;
var testY = point.top === point.bottom && point.y === point[1] && point[1] == point.top && point.top === 200;
Assert.isTrue(testX && testY, 'test point with x, y constructor');
point = new Y.Point([100, 200]);
var testX = point.left === point.right && point.x === point[0] && point[0] === point.left && point.left === 100;
var testY = point.top === point.bottom && point.y === point[1] && point[1] == point.top && point.top === 200;
Assert.isTrue(testX && testY, 'test point with [x, y] constructor');
Assert.areEqual(0, point.width, 'point.width');
Assert.areEqual(0, point.height, 'point.height');
},
test_inDocument: function() {
Assert.isTrue(Y.Dom.inDocument('main'),
'inDocument failed for true ID case');
Assert.isTrue(Y.Dom.inDocument(document.body),
'inDocument failed for true element case');
var el = document.createElement('div');
Assert.isFalse(Y.Dom.inDocument(el),
'inDocument failed for false element case');
Assert.isFalse(Y.Dom.inDocument('fake-id'),
'inDocument failed for false ID case');
Assert.isFalse(Y.Dom.inDocument({}),
'inDocument failed for null');
},
test_batch: function() {
var nodes = Y.Dom.batch(['hd', 'bd'], function(node) {
node.title = 'foobar';
});
Assert.areEqual('foobar', Y.Dom.get('hd').title,
'batch failed for multiple IDs');
Assert.areEqual('foobar', Y.Dom.get('bd').title,
'batch failed for multiple IDs');
Y.Dom.batch('ft', function(node) { node.title = 'barbaz'; } );
Assert.areEqual('barbaz', Y.Dom.get('ft').title,
'batch failed for single ID');
Y.Dom.batch(Y.Dom.get('ft'),
function(node) { node.title = 'foobaz'; } );
Assert.areEqual('foobaz', Y.Dom.get('ft').title,
'batch failed for single HTMLElement');
Assert.areEqual(0, Y.Dom.batch([], function() { return true; }).length,
'batch failed for empty array');
Assert.isFalse(Y.Dom.batch(null), 'batch failed: node(s) required');
Assert.isFalse(Y.Dom.batch([]), 'batch failed: method is required');
},
test_getAncestorByClassName: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getAncestorByClassName(el, 'foo'),
'wrong node returned');
var el = Y.Dom.getAncestorByClassName(document.getElementById('foo'), 'main');
Assert.areEqual(document.getElementById('main'),
el, 'wrong node returned');
el = Y.Dom.getAncestorByClassName(document.getElementById('foo'), 'fake-class');
Assert.areEqual(null,
el, 'wrong node returned');
},
test_getAncestorByTagName: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getAncestorByTagName(el, 'foo'),
'wrong node returned');
var el = Y.Dom.getAncestorByTagName('foo', 'div');
Assert.areEqual(document.getElementById('main'),
el, 'wrong node returned');
el = Y.Dom.getAncestorByTagName(document.getElementById('foo'), 'span');
Assert.areEqual(null,
el, 'wrong node returned');
},
test_getAncestorBy: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getAncestorBy(el),
'wrong node returned');
var el = Y.Dom.getAncestorBy(document.getElementById('foo'), function(el) {
return el.id === 'bd';
});
Assert.areEqual(document.getElementById('bd'),
el, 'wrong node returned');
el = Y.Dom.getAncestorBy(document.getElementById('foo'), function() { return false; });
Assert.areEqual(null,
el, 'wrong node returned');
},
test_getPreviousSiblingBy: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getPreviousSiblingBy(el),
'wrong node returned');
var el = Y.Dom.getPreviousSiblingBy(document.getElementById('foo'),
function(node) { return node.tagName == 'H2'; }
);
Assert.areEqual(document.getElementsByTagName('h2')[0],
el, 'wrong node returned');
},
test_getPreviousSibling: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getPreviousSibling(el),
'wrong node returned');
Assert.areEqual(Y.Dom.getPreviousSibling('bd'),
Y.Dom.get('hd'), 'wrong node returned');
},
test_getNextSiblingBy: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getNextSiblingBy(el),
'wrong node returned');
var el = Y.Dom.getNextSiblingBy(document.getElementById('foo'),
function(node) { return node.className == 'mod'; }
);
Assert.areEqual(Y.Dom.getElementsByClassName('mod', 'div', 'main')[1],
el, 'wrong node returned');
},
test_getNextSibling: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getNextSibling(el),
'wrong node returned');
Assert.areEqual(Y.Dom.getNextSibling('bd'),
Y.Dom.get('ft'), 'wrong node returned');
},
test_getFirstChildBy: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getFirstChildBy(el),
'wrong node returned');
var el = Y.Dom.getFirstChildBy(document.getElementById('doc'),
function(node) { return node.id == 'bd'; }
);
Assert.areEqual(document.getElementById('bd'),
el, 'wrong node returned');
},
test_getFirstChild: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getFirstChild(el),
'wrong node returned');
Assert.areEqual(document.getElementById('hd'),
Y.Dom.getFirstChild(document.getElementById('doc')), 'wrong node returned');
},
test_getLastChildBy: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getLastChildBy(el),
'wrong node returned');
var el = Y.Dom.getLastChildBy(document.getElementById('doc'),
function(node) { return node.id == 'bd'; }
);
Assert.areEqual(document.getElementById('bd'),
el, 'wrong node returned');
},
test_getLastChild: function() {
var el = document.createElement('div');
Assert.areEqual(null, Y.Dom.getLastChild(el),
'wrong node returned');
Assert.areEqual(
document.getElementById('ft'),
Y.Dom.getLastChild(document.getElementById('doc')),
'wrong node returned'
);
},
test_getChildrenBy: function() {
var el = document.createElement('div');
ArrayAssert.itemsAreEqual([], Y.Dom.getChildrenBy(el),
'wrong node returned');
var el = Y.Dom.getChildrenBy(document.getElementById('main'),
function(node) { return node.className == 'mod'; }
);
ArrayAssert.itemsAreEqual(
Y.Dom.getElementsByClassName('mod', 'div', 'main'),
el,
'wrong node returned'
);
},
test_getChildren: function() {
var el = document.createElement('div');
ArrayAssert.itemsAreEqual([], Y.Dom.getChildrenBy(el),
'wrong node returned');
ArrayAssert.itemsAreEqual(
[ Y.Dom.get('hd'), Y.Dom.get('bd'), Y.Dom.get('ft') ],
Y.Dom.getChildren('doc'),
'wrong node returned'
);
},
test_insertBefore: function() {
var el = document.createElement('div');
Y.Dom.insertBefore(el, 'bd');
Assert.areEqual(
document.getElementById('bd').previousSibling,
el,
'insertBefore failed'
);
},
test_insertAfter: function() {
var el = document.createElement('div');
Y.Dom.insertAfter(el, 'bd');
Assert.areEqual(
document.getElementById('bd').nextSibling,
el,
'insertAfter failed'
);
},
test_setAttribute: function() {
var el = document.createElement('label');
Y.Dom.setAttribute(el, 'for', 'foo');
Y.Dom.setAttribute(el, 'class', 'bar');
Assert.areEqual('foo', el.htmlFor, "Y.Dom.setAttribute(el, 'for', 'foo')");
Assert.areEqual('bar', el.className, "Y.Dom.setAttribute(el, 'class', 'bar')");
el = document.body.appendChild(document.createElement('input'));
Y.Dom.setAttribute(el, 'type', 'text');
Assert.areEqual('text', Y.Dom.getAttribute(el, 'type'), "Y.Dom.setAttribute(el, 'type', 'text')");
el.parentNode.removeChild(el);
},
test_getAttribute: function() {
var el = document.createElement('label');
Y.Dom.setAttribute(el, 'for', 'foo');
Y.Dom.setAttribute(el, 'class', 'bar');
Assert.areEqual('foo', Y.Dom.getAttribute(el, 'for'), "Y.Dom.getAttribute(el, 'for')");
Assert.areEqual('bar', Y.Dom.getAttribute(el, 'class'), "Y.Dom.setAttribute(el, 'class')");
var bodyEl = new Y.Element(Y.Dom.generateId(document.body));
Y.Dom.addClass(bodyEl, 'dummy');
Assert.isTrue(Y.Dom.hasClass(document.body, 'dummy'), 'Y.Dom.addClass(Element, "dummy")');
}
}));
tool.TestRunner.add(suite);
if (parent && parent != window) {
tool.TestManager.load();
} else {
tool.TestRunner.run();
}
});
})();
</script>
</body>
</html>

View file

@ -1,274 +0,0 @@
<!doctype html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>YUI Tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<style type="text/css">
.dd { position:absolute; height: 100px; width: 100px; z-index:99 }
#ddcontainer { top:100px; left: 0px; border: 1px solid green; position:absolute; height: 500px; width: 500px; overflow:auto }
#dd1div { top: 100px; left: 100px; background: red; }
#dd2div { top: 100px; left: 300px; background: blue; }
.downlow { position: absolute; top: 1000px; }
</style>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop-debug.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
</head>
<body>
<div id="ddcontainer">
<div id="dd1div" class="dd">dd1</div>
<div id="dd2div" class="dd">dd2</div>
<div class="downlow">way down</div>
</div>
<div class="downlow">way down</div>
<h1>Drag and Drop Test Page</h1>
<script type="text/javascript">
(function() {
var Dom=YAHOO.util.Dom,
Event=YAHOO.util.Event,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert,
suite=new YAHOO.tool.TestSuite("yuisuite");
suite.add(new YAHOO.tool.TestCase({
//name of the test case
name : "dragdrop",
//extra information about tests
_should : {
//tests with these names should fail
fail : { test_to_fail: true },
//tests with these names should throw an error
error : { },
//ignore these tests
ignore : { }
},
test_mouseDown: function() {
reset();
dd1.handleMouseDown({
pageX: 110,
pageY: 230,
target: dd1.getEl()
});
YAHOO.util.DDM.handleMouseUp({ pageX: 110, pageY: 210 });
Assert.areEqual(startDrag, 0, "startDrag should not have fired");
Assert.areEqual(mouseDown, 1, "mouseDown should have fired once");
},
test_mouseMiss: function() {
reset();
dd1.handleMouseDown({ // miss
pageX: 90,
pageY: 90,
target: dd1.getEl()
});
YAHOO.util.DDM.handleMouseMove({ pageX: 120, pageY: 220 });
YAHOO.util.DDM.handleMouseUp({ pageX: 120, pageY: 220 });
// check this
Assert.areEqual(mouseDown, 1, "mouseDown should have fired once");
Assert.areEqual(startDrag, 0, "startDrag should not have fired");
Assert.areEqual(endDrag, 0, "endDrag should not have fired");
Assert.areEqual(mouseUp, 0, "mouseUp should not have fired");
},
test_startDrag: function() {
reset();
dd1.handleMouseDown({
pageX: 120,
pageY: 230,
target: dd1.getEl()
});
YAHOO.util.DDM.handleMouseMove({ pageX: 120, pageY: 220 });
YAHOO.util.DDM.handleMouseUp({ pageX: 120, pageY: 220 });
Assert.areEqual(mouseDown, 1, "mouseDown should have fired once");
Assert.areEqual(startDrag, 1, "startDrag should have fired once");
Assert.areEqual(endDrag, 1, "endDrag should have fired once");
Assert.areEqual(mouseUp, 1, "mouseUp should have fired once");
},
test_dragOver: function() {
reset();
dd1.handleMouseDown({
pageX: 120,
pageY: 230,
target: dd1.getEl()
});
for (var i=1;i<21;i=i+1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 220 });
}
for (var i=20;i>0;i=i-1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 220 });
}
YAHOO.util.DDM.handleMouseUp({ pageX: 120, pageY: 210 });
Assert.areEqual(startDrag, 1, "startDrag should have fired once");
Assert.areEqual(drag, 40, "drag should have fired 40 times");
Assert.areEqual(dragOver, 5, "dragOver should have fired 5 times");
Assert.areEqual(dragOut, 1, "dragOut should have fired once");
Assert.areEqual(invalidDrop, 1, "invalidDrop should have fired once");
Assert.areEqual(dragDrop, 0, "dragDrop should have fired once");
},
test_dragOnly: function() {
reset();
dd1.dragOnly = true;
dd1.handleMouseDown({
pageX: 120,
pageY: 230,
target: dd1.getEl()
});
for (var i=1;i<21;i=i+1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 220 });
}
for (var i=20;i>0;i=i-1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 220 });
}
YAHOO.util.DDM.handleMouseUp({ pageX: 120, pageY: 210 });
Assert.areEqual(1, startDrag, "startDrag should have fired once");
Assert.areEqual(40, drag, "drag should have fired 40 times");
Assert.areEqual(0, dragOver, "dragOver should have fired 0 times");
Assert.areEqual(0, dragOut, "dragOut should have fired 0 times");
Assert.areEqual(0, invalidDrop, "invalidDrop should have fired 0 times");
Assert.areEqual(0, dragDrop, "dragDrop should have fired 0 times");
},
test_bodyScroll: function() {
window.scrollTo(0,150);
reset();
dd1.handleMouseDown({
pageX: 140,
pageY: 220,
target: dd1.getEl()
});
for (var i=1;i<21;i=i+1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 210 });
}
for (var i=20;i>0;i=i-1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 210 });
}
YAHOO.util.DDM.handleMouseUp({ pageX: 120, pageY: 210 });
Assert.areEqual(startDrag, 1, "startDrag should have fired once");
Assert.areEqual(drag, 40, "drag should have fired 40 times");
Assert.areEqual(dragOver, 5, "dragOver should have fired 5 times");
Assert.areEqual(dragOut, 1, "dragOut should have fired once");
Assert.areEqual(invalidDrop, 1, "invalidDrop should have fired once");
Assert.areEqual(dragDrop, 0, "dragDrop should have fired once");
},
test_containerScroll: function() {
reset();
Dom.get("ddcontainer").scrollTop=150;
dd1.handleMouseDown({
pageX: 140,
pageY: 100,
target: dd1.getEl()
});
for (var i=1;i<21;i=i+1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 110 });
}
for (var i=20;i>0;i=i-1) {
YAHOO.util.DDM.handleMouseMove({ pageX: 124+(10*i), pageY: 110 });
}
YAHOO.util.DDM.handleMouseUp({ pageX: 120, pageY: 110 });
Assert.areEqual(startDrag, 1, "startDrag should have fired once");
Assert.areEqual(drag, 40, "drag should have fired 40 times");
Assert.areEqual(dragOver, 5, "dragOver should have fired 5 times");
Assert.areEqual(dragOut, 1, "dragOut should have fired once");
Assert.areEqual(invalidDrop, 1, "invalidDrop should have fired once");
Assert.areEqual(dragDrop, 0, "dragDrop should have fired once");
},
test_to_fail: function (){
Assert.isNull("not null");
}
}));
function runTests(){
YAHOO.tool.TestRunner.run();
}
function reset() {
window.scrollTo(0,0);
Dom.get("ddcontainer").scrollTop=0;
startDrag=0, mouseDown=0, endDrag=0, dragEnter=0, dragOver=0, dragOut=0,
drag=0, dragDrop=0, invalidDrop=0, mouseUp=0;
dd1.dragOnly = false;
}
var dd1, dd2, startDrag, mouseDown, endDrag, dragEnter, dragOver, dragOut,
drag, dragDrop, invalidDrop, mouseUp;
function onMouseDown(e) { mouseDown++; }
function startDrag(x, y) { startDrag++; }
function onDrag(e) { drag++; }
function onDragEnter(e, id) { dragEnter++; }
function onDragOver(e, id) { dragOver++; }
function onDragOut(e, id) { dragOut++; }
function onDragDrop(e, id) { dragDrop++; }
function onInvalidDrop(e) { invalidDrop++; }
function endDrag(e) { endDrag++; }
function onMouseUp(e) { mouseUp++; }
YAHOO.util.Event.on(window, "load", function (){
//create the logger
var logger = new YAHOO.tool.TestLogger();
//add the tests
YAHOO.tool.TestRunner.add(suite);
dd1 = new YAHOO.util.DD("dd1div");
dd1.onMouseDown= onMouseDown;
dd1.startDrag = startDrag;
dd1.onDrag= onDrag;
dd1.onDragEnter = onDragEnter;
dd1.onDragOver = onDragOver;
dd1.onDragOut = onDragOut;
dd1.onDragDrop = onDragDrop;
dd1.onInvalidDrop = onInvalidDrop;
dd1.endDrag = endDrag;
dd1.onMouseUp = onMouseUp;
dd2 = new YAHOO.util.DD("dd2div");
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
});
})();
</script>
</body>
</html>

View file

@ -1,45 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Editor Test Suite</title>
<link rel="stylesheet" type="text/css" href="../../../build/reset-fonts-grids/reset-fonts-grids.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<link rel="stylesheet" type="text/css" href="../../../build/container/assets/skins/sam/container.css">
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css">
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css">
<link rel="stylesheet" type="text/css" href="../../../build/resize/assets/skins/sam/resize.css">
<link rel="stylesheet" type="text/css" href="../../../build/editor/assets/skins/sam/editor.css">
<script type="text/javascript" src="../../../build/utilities/utilities.js"></script>
<script type="text/javascript" src="../../../build/event-simulate/event-simulate-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<script type="text/javascript" src="../../../build/resize/resize-min.js"></script>
<script type="text/javascript" src="../../../build/editor/editor.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<style>
#testRegEx, #testRegEx2 {
display: none;
}
</style>
<script type="text/javascript" src="tests.js"></script>
<style type="text/css">
</style>
</head>
<body class="yui-skin-sam">
<div id="doc">
<textarea id="editor" style="height: 300px; width: 522px">This is a test.</textarea>
<div id="testRegEx">This is a test. <b>This</b> is a test. This is a <i>test</i>. This is a <u>test</u>. This is a test. This is a test. This is a test. <span style="font-size: 16px; font-family: Comic Sans MS;" tabindex="1" tag="span" class="yui-tag-span yui-tag">This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. </span>This is a test. This is a test. This is a test. This is a test. This is a test.<br><br>This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. <span style="font-size: 18px; font-family: Trebuchet MS; color: rgb(160, 64, 255);" tabindex="1" tag="span" class="yui-tag-span yui-tag">This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.</span> This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. </div>
<div id="testRegEx2">This is a test. <strong>This</strong> is a test. This is a <em>test</em>. This is a <span style="text-decoration: underline;">test</span>. This is a test. This is a test. This is a test. <span style="font-size: 16px; font-family: Comic Sans MS;" tabindex="1">This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. </span>This is a test. This is a test. This is a test. This is a test. This is a test.<br><br>This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. <span style="font-size: 18px; font-family: Trebuchet MS; color: #a040ff;" tabindex="1">This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.</span> This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.</div>
</div>
</body>
</html>

View file

@ -1,403 +0,0 @@
var editor = null;
(function() {
var Dom = YAHOO.util.Dom,
Event = YAHOO.util.Event,
Tool = YAHOO.tool,
Suite = new Tool.TestSuite('yuisuite'),
Assert = YAHOO.util.Assert,
eFocus = null;
Event.onDOMReady(function() {
editor = new YAHOO.widget.Editor('editor', {
dompath: true,
nodeChangeDelay: false,
removeLineBreaks: true,
animate: true,
width: '700px',
resize: true,
drag: true
});
editor.render();
var logger = new Tool.TestLogger(null, { height: '80%' });
editor.on('windowRender', function() { //We have to wait until the all windows render before we can start testing it..
Suite.add( new Tool.TestCase({
name: 'YAHOO.widget.Editor',
test_render: function() {
Assert.areEqual(Dom.get('editor_container'), editor.get('element_cont').get('element'), 'Could not find Editors container');
Assert.areEqual(Dom.get('editor_toolbar'), editor.toolbar.get('element'), 'Could not find Editors Toolbar');
Assert.isInstanceOf(YAHOO.widget.Toolbar, editor.toolbar, 'Could not find Toolbars Instance');
Assert.areEqual(Dom.getStyle('editor', 'display'), editor.getStyle('display'), 'Textarea is visible..');
Assert.isInstanceOf(YAHOO.widget.Overlay, editor.get('panel'), 'Could not find Overlay Instance');
},
test_content: function() {
var t_data = Dom.get('editor').value;
var e_data = editor.getEditorHTML();
Assert.areEqual(t_data, e_data, 'Editor data is different than text area');
},
test_window: function() {
Assert.areEqual(document.getElementById('editor_editor').contentWindow, editor._getWindow(), 'Window object is not right');
},
test_doc: function() {
Assert.areEqual(document.getElementById('editor_editor').contentWindow.document, editor._getDoc(), 'Document object is not right');
},
test_focus: function() {
YAHOO.util.UserAction.click(document);
editor.on('editorWindowFocus', function() {
eFocus = true;
});
editor.focus();
editor.afterElement.focus();
Assert.areEqual(true, eFocus, 'Editor focus event FAILED');
},
test_ol_list_create_inline: function() {
var html = 'Item1<br>Item2<br>Item3<br>Item4<br>';
editor.setEditorHTML(html);
editor.execCommand('selectall');
editor.execCommand('insertorderedlist', '');
var ol = editor._getDoc().getElementsByTagName('ol');
Assert.areEqual(ol.length, 1, 'Failed to create list from source');
var lis = editor._getDoc().getElementsByTagName('li');
Assert.areEqual(lis.length, 4, 'Failed to create list items from source');
editor.execCommand('selectall');
editor.execCommand('insertorderedlist', '');
var lis = editor._getDoc().getElementsByTagName('li');
Assert.areEqual(lis.length, 0, 'Failed to remove list items from source');
},
test_ul_list_create_inline: function() {
var html = 'Item1<br>Item2<br>Item3<br>Item4<br>Item5<br>Item6<br>Item7';
editor.setEditorHTML(html);
editor.execCommand('selectall');
editor.execCommand('insertunorderedlist', '');
var ul = editor._getDoc().getElementsByTagName('ul');
Assert.areEqual(ul.length, 1, 'Failed to create list from source');
var lis = editor._getDoc().getElementsByTagName('li');
Assert.areEqual(lis.length, 7, 'Failed to create list items from source');
editor.execCommand('selectall');
editor.execCommand('insertunorderedlist', '');
var lis = editor._getDoc().getElementsByTagName('li');
Assert.areEqual(lis.length, 0, 'Failed to remove list items from source');
},
test_regex: function() {
editor.setEditorHTML(Dom.get('testRegEx').innerHTML);
//editor._getDoc().body.innerHTML = Dom.get('testRegEx').innerHTML;
var e_data = (editor.cleanHTML()).toLowerCase().replace(/;"/g, '"');
var real_data = editor.filter_all_rgb(Dom.get('testRegEx2').innerHTML.toLowerCase()).replace(/;"/g, '"');
Assert.areEqual(real_data, e_data, 'Regex save routine failed');
},
test_blank_image: function() {
editor.toolbar.resetAllButtons();
var picURL = editor.get('blankimage');
editor._focusWindow();
editor.toolbar.getButtonByValue('insertimage').fireEvent('mousedown', { ev: 'mousedown' });
var pic = editor._getDoc().getElementsByTagName('img')[0];
Assert.areEqual(picURL, pic.getAttribute('src', 2), 'Image source and string do not match');
Assert.isInstanceOf(YAHOO.widget.EditorWindow, editor.currentWindow, 'Editor Window Failed to Open');
editor.closeWindow();
Assert.areEqual(null, editor.currentWindow, 'Editor Window Failed to Close');
editor.toolbar.resetAllButtons();
Assert.areEqual(null, pic.parentNode, 'Image is still inside the editor');
},
test_selected_element: function() {
editor.setEditorHTML('<em id="test">This is a test element</em>');
var em = editor._getDoc().getElementById('test');
editor._selectNode(em);
Assert.areEqual(editor._getDoc().getElementById('test'), editor._getSelectedElement(), 'Selected Element is not em#test');
Assert.areEqual(true, editor.toolbar.getButtonByValue('italic').hasClass('yui-button-selected'), 'Italic button is not selected');
editor.toolbar.resetAllButtons();
},
test_dom_path: function() {
editor.setEditorHTML('<p>This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.</p><p>This is a test. This is a test. <em style="font-family: Comic Sans MS">This is a test. <strong id="test">This is a test.</strong> This is a test.</em> This is a test. This is a test. This is a test.</p><p>This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.</p>');
var em = editor._getDoc().getElementById('test');
editor._selectNode(em);
//Editor timing is out here, force a DomPath write..
editor._writeDomPath();
Assert.areEqual('<span title=body>body</span> &lt; <span title=p>p</span> &lt; <span title=em>em</span> &lt; <span title=strong#test>strong#tes...</span>', editor.dompath.innerHTML.toLowerCase().replace(/"/g, ''), 'Dom path is not correct..');
Assert.areEqual(true, editor.toolbar.getButtonByValue('bold').hasClass('yui-button-selected'), 'Bold button is not selected');
Assert.areEqual(true, editor.toolbar.getButtonByValue('italic').hasClass('yui-button-selected'), 'Italic button is not selected');
editor.toolbar.resetAllButtons();
},
test_insertimage: function() {
var picURL = 'http:/'+'/farm1.static.flickr.com/171/379031784_e4ba36a375_t_d.jpg';
editor._focusWindow();
editor.execCommand('insertimage', picURL);
var pic = editor._getDoc().getElementsByTagName('img')[0];
Assert.areEqual(picURL, pic.getAttribute('src', 2));
},
test_image_props: function() {
var pic = editor._getDoc().getElementsByTagName('img')[0];
YAHOO.util.UserAction.dblclick(pic);
Assert.isInstanceOf(YAHOO.widget.EditorWindow, editor.currentWindow, 'Editor Window Failed to Open');
},
test_close_window: function() {
editor.closeWindow();
Assert.areEqual(null, editor.currentWindow, 'Editor Window Failed to Close');
editor.toolbar.resetAllButtons();
},
test_hidden_elements: function() {
editor.toolbar.getButtonByValue('hiddenelements').fireEvent('mousedown', { ev: 'mousedown' });
Assert.areEqual(true, Dom.hasClass(editor._getDoc().body, 'yui-hidden'), 'hidden class is not on the body');
editor.toolbar.getButtonByValue('hiddenelements').fireEvent('mousedown', { ev: 'mousedown' });
Assert.areEqual(false, Dom.hasClass(editor._getDoc().body, 'yui-hidden'), 'hidden class is on the body');
},
test_event_before_mouseup: function() {
var event = false;
editor.on('beforeEditorMouseUp', function() {
event = true;
});
YAHOO.util.UserAction.mouseup(editor._getDoc().body);
Assert.areEqual(true, event, 'BeforeMouseUP Event failed to Fired');
},
test_event_mouseup: function() {
var event = false;
editor.on('editorMouseUp', function() {
event = true;
});
YAHOO.util.UserAction.mouseup(editor._getDoc().body);
Assert.areEqual(true, event, 'MouseUP Event failed to Fired');
},
test_event_before_mousedown: function() {
var event = false;
editor.on('beforeEditorMouseDown', function() {
event = true;
});
YAHOO.util.UserAction.mousedown(editor._getDoc().body);
Assert.areEqual(true, event, 'BeforeMouseDsaveown Event failed to Fired');
},
test_event_mousedown: function() {
var event = false;
editor.on('editorMouseDown', function() {
event = true;
});
YAHOO.util.UserAction.mousedown(editor._getDoc().body);
Assert.areEqual(true, event, 'MouseDown Event failed to Fired');
},
test_event_before_click: function() {
var event = false;
editor.on('beforeEditorClick', function() {
event = true;
});
YAHOO.util.UserAction.click(editor._getDoc().body);
Assert.areEqual(true, event, 'BeforeClick Event failed to Fired');
},
test_event_click: function() {
var event = false;
editor.on('editorClick', function() {
event = true;
});
YAHOO.util.UserAction.click(editor._getDoc().body);
Assert.areEqual(true, event, 'Click Event failed to Fired');
},
test_event_before_double_click: function() {
var event = false;
editor.on('beforeEditorDoubleClick', function() {
event = true;
});
YAHOO.util.UserAction.dblclick(editor._getDoc().body);
Assert.areEqual(true, event, 'BeforeDoubleClick Event failed to Fired');
},
test_event_double_click: function() {
var event = false;
editor.on('editorDoubleClick', function() {
event = true;
});
YAHOO.util.UserAction.dblclick(editor._getDoc().body);
Assert.areEqual(true, event, 'DoubleClick Event failed to Fired');
},
test_event_before_keyup: function() {
var event = false;
editor.on('beforeEditorKeyUp', function() {
event = true;
});
YAHOO.util.UserAction.keyup(editor._getDoc().body);
Assert.areEqual(true, event, 'beforeKeyUp Event failed to Fired');
},
test_event_keyup: function() {
var event = false;
editor.on('editorKeyUp', function() {
event = true;
});
YAHOO.util.UserAction.keyup(editor._getDoc().body);
Assert.areEqual(true, event, 'KeyUp Event failed to Fired');
},
test_event_before_keydown: function() {
var event = false;
editor.on('beforeEditorKeyDown', function() {
event = true;
});
YAHOO.util.UserAction.keydown(editor._getDoc().body);
Assert.areEqual(true, event, 'BeforeKeyDown Event failed to Fired');
},
test_event_keydown: function() {
var event = false;
editor.on('editorKeyDown', function() {
event = true;
});
YAHOO.util.UserAction.keydown(editor._getDoc().body);
Assert.areEqual(true, event, 'KeyDown Event failed to Fired');
},
test_event_before_keypress: function() {
var event = false;
editor.on('beforeEditorKeyPress', function() {
event = true;
});
YAHOO.util.UserAction.keypress(editor._getDoc().body);
Assert.areEqual(true, event, 'BeforeKeyPress Event failed to Fired');
},
test_event_keypress: function() {
var event = false;
editor.on('editorKeyPress', function() {
event = true;
});
YAHOO.util.UserAction.keypress(editor._getDoc().body);
Assert.areEqual(true, event, 'KeyPress Event failed to Fired');
},
test_createlink: function() {
editor.toolbar.resetAllButtons();
editor.setEditorHTML('test');
var e_data = editor.getEditorHTML();
Assert.areEqual('test', e_data, 'Editor data is different than what was injected');
editor.execCommand('selectall', ''); //FF 3.5 doesn't like this when contentEditable is used
editor.toolbar.getButtonByValue('createlink').fireEvent('mousedown', { ev: 'mousedown' });
Assert.isInstanceOf(YAHOO.widget.EditorWindow, editor.currentWindow, 'Editor Window Failed to Open');
Dom.get(editor.get('id') + '_createlink_url').value = 'http:/'+'/www.yahoo.com';
editor.closeWindow();
Assert.areEqual(null, editor.currentWindow, 'Editor Window Failed to Close');
var link = editor._getDoc().getElementsByTagName('a')[0];
var linkURL = link.getAttribute('href', 2);
Assert.areEqual('http:/'+'/www.yahoo.com', linkURL, 'Link url does not match what was set');
editor.toolbar.resetAllButtons();
},
test_content_after: function() {
var t_data = Dom.get('editor').value;
editor.setEditorHTML(t_data);
var e_data = editor.getEditorHTML();
Assert.areEqual(t_data, e_data, 'Editor data is different than text area');
},
test_dd: function() {
Assert.isInstanceOf(YAHOO.util.DD, editor.dd, 'DD not instantiated');
},
test_resize: function() {
Assert.isInstanceOf(YAHOO.util.Resize, editor.resize, 'Resize not instantiated');
},
test_headers: function() {
for (var i = 1; i < 6; i++) {
editor.setEditorHTML('This is a test header #' + i);
editor.execCommand('selectall', '');
editor.execCommand('heading', 'h' + i);
var h1 = editor._getDoc().body.getElementsByTagName('h' + i);
Assert.areEqual(h1.length, 1, 'Did not find one H' + i + ' tag');
}
},
test_forecolor: function() {
editor.setEditorHTML('TEST');
editor.execCommand('selectall', '');
editor.execCommand('forecolor', '#bebebe');
var el = editor._getDoc().body.firstChild;
var color = editor.filter_rgb(el.style.color);
Assert.areEqual(color, '#bebebe', 'Fore Colors do not match');
},
test_backcolor: function() {
editor.setEditorHTML('TEST');
editor.execCommand('selectall', '');
editor.execCommand('backcolor', '#bebebe');
var el = editor._getDoc().body.firstChild;
var color = editor.filter_rgb(el.style.backgroundColor);
Assert.areEqual(color, '#bebebe', 'Back Colors do not match');
},
test_forecolor_font: function() {
editor.setEditorHTML('TEST');
editor.execCommand('selectall', '');
editor.execCommand('fontname', 'Verdana');
editor.execCommand('selectall', '');
editor.execCommand('forecolor', '#bebebe');
var el = editor._getDoc().body.firstChild;
var color = editor.filter_rgb(el.style.color);
Assert.areEqual(color, '#bebebe', 'Fore Colors do not match');
Assert.areEqual(el.style.fontFamily, 'Verdana', 'Font Names do not match');
},
test_forecolor_font_el: function() {
editor.setEditorHTML('<b>TEST</b>');
editor.execCommand('selectall', '');
editor.execCommand('fontname', 'Verdana');
editor.execCommand('selectall', '');
editor.execCommand('forecolor', '#bebebe');
var el = editor._getDoc().body.firstChild,
testel = el;
if (Dom.getFirstChild(el)) {
testel = el.firstChild;
}
var color = editor.filter_rgb(testel.style.color);
Assert.areEqual(color, '#bebebe', 'Fore Colors do not match');
Assert.areEqual(testel.style.fontFamily, 'Verdana', 'Font Names do not match');
Assert.areEqual(el.tagName.toLowerCase(), 'b', 'Elements do not match');
},
test_disable: function() {
editor.set('disabled', true);
Assert.isInstanceOf(YAHOO.util.Element, editor.get('disabled_iframe'), 'No Disabled Iframe');
Assert.isInstanceOf(YAHOO.util.Element, editor._orgIframe, 'No Org Iframe');
Assert.areEqual(editor.get('iframe'), editor.get('disabled_iframe'), 'Current iframe and disabled iframe are not the same');
Assert.isNotNull(editor._mask, 'Mask is null');
editor.set('disabled', false);
Assert.areEqual(editor.get('iframe'), editor._orgIframe, 'Current iframe and orginal iframe are not the same');
Assert.isNull(editor._mask, 'Mask is not null');
},
test_destroy: function() {
//More Tests Here
var panel = editor.get('panel').element;
editor.destroy();
Assert.isNull(panel.offsetParent, 'Panel offsetParent is not null')
},
test_render_node: function() {
var el = document.getElementById('editor');
editor = new YAHOO.widget.SimpleEditor(el);
editor.render();
Assert.areEqual(true, editor._rendered, 'Editor failed to render with HTML element passed to constructor');
window.setTimeout(function() {
editor.destroy();
}, 2000);
},
test_no_textarea: function() {
var div = document.createElement('div');
div.id = 'editor_div';
div.style.height = '300px';
div.style.width = '700px';
div.innerHTML = '<strong>This is a new div</strong>';
document.body.appendChild(div);
editor2 = new YAHOO.widget.SimpleEditor('editor_div');
editor2.render();
window.setTimeout(function() {
editor2.destroy();
}, 3000);
Assert.areEqual('div', editor2._configs.element.value.tagName.toLowerCase(), 'Editor failed to render with HTML element (non TEXTAREA) passed to constructor');
}
}));
Tool.TestRunner.add(Suite);
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
});
});
})();

View file

@ -1,230 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Element Test Suite</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/event-simulate/event-simulate-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/element/element.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<style type="text/css">
#foo {
background:#ccc;
height:100px;
width:100px;
}
</style>
<script type="text/javascript">
(function() {
var Y = YAHOO.util,
tool = YAHOO.tool,
suite = new tool.TestSuite("yuisuite");
Y.Event.onDOMReady(function() {
var Assert = YAHOO.util.Assert,
ArrayAssert = YAHOO.util.ArrayAssert;
var logger = new YAHOO.tool.TestLogger(null, { height: '80%' });
Y.Element.prototype.initAttributes = function() {
this.setAttributeConfig('foo', {
validator: YAHOO.lang.isString,
method: function() {
this.addClass('test-method');
}
});
this.setAttributeConfig('href', {
validator: YAHOO.lang.isString
});
this.setAttributeConfig('wrap', {
writeOnce: true,
validator: YAHOO.lang.isBoolean
});
this.setAttributeConfig('custom', {
setter: function(val, name) {
return 'from setter';
},
getter: function(name, val) {
Assert.areEqual(val, this._configs[name].value, "getter: function(name, val)");
return 'from getter';
},
value: 'default'
});
};
var foo = new Y.Element('foo', { foo: 0, href: 2, wrap: true });
var bar = new Y.Element('bar', { href: 'http://www.yahoo.com/', foo: 'foo' });
var elFoo = document.getElementById('foo');
suite.add( new tool.TestCase({
name: 'YAHOO.util.Element',
test_getElement: function() {
Assert.areEqual(elFoo, foo.get('element'), 'incorrect element');
},
test_get: function() {
var ta = new YAHOO.util.Element('test-textarea');//, { wrap: false });
ta.set('wrap', true);
},
test_setHTMLAttr: function() {
var innerHTML = 'updated';
foo.set('innerHTML', innerHTML);
Assert.areEqual(innerHTML, foo.get('innerHTML'), 'incorrect innerHTML');
},
test_getHTMLAttr: function() {
foo.set('title', 'foo title');
Assert.areEqual('foo title', foo.get('title'), 'foo.get("title")');
elFoo.title = 'new foo title';
Assert.areEqual('new foo title', foo.get('title'), 'foo.get("title") - from DOM');
},
test_onChange: function() {
var pass = false;
var handler = function() {
pass = true;
};
foo.on('titleChange', handler);
foo.set('title', 'foo title');
Assert.isTrue(pass, 'titleChange event failed to fire');
},
test_DomEvent: function() {
var pass = false;
var handler = function() {
pass = true;
};
foo.on('click', handler);
YAHOO.util.UserAction.click('foo');
Assert.isTrue(pass, 'click handler failed to be called');
},
test_customEvent: function() {
var pass = false;
var handler = function() {
pass = true;
};
foo.on('foo', handler);
foo.fireEvent('foo');
Assert.isTrue(pass, 'foo handler failed to be called');
},
test_attribute: function() {
foo.setAttributeConfig('fontname', {
value: 'tahoma',
method: function(val) {
foo.setStyle('font-family', val);
}
});
foo.set('fontname', 'tahoma');
Assert.areEqual(Y.Dom.getStyle('foo', 'font-family'), 'tahoma', 'attribConfig');
foo.set('fontname', 'verdana');
foo.resetValue('fontname');
var dyn = new YAHOO.util.Element(document.createElement('div'), {
id: 'dyn-el',
title: 'test title',
onclick: function(e) {
alert(e.type);
},
innerHTML: 'baz',
fake: 'fake'
});
dyn.appendTo(document.body);
Assert.areEqual(dyn.get('element').id, dyn.get('id'), "dyn.get('id')");
Assert.areEqual(dyn.get('element').title, dyn.get('title'), "dyn.get('title')");
Assert.isNull(dyn.get('fake'), "dyn.get('fake')");
},
test_validator: function() {
Assert.isNull(foo.get('foo'), 'foo.get("foo")');
Assert.areEqual('http://www.yahoo.com/', bar.get('href'), 'bar.get("href")');
foo.setAttributeConfig('foobar', {
validator: YAHOO.lang.isString
});
foo.set('foobar', 3);
Assert.areEqual(undefined, foo.get('foobar'), 'foo.get("foobar")');
Assert.areEqual(null, foo.get('foo'), 'foo.get("foo")');
Assert.areEqual(null, foo.get('href'), 'foo.get("foo")');
bar.set('href', 3);
Assert.areEqual('http://www.yahoo.com/', bar.get('href'), 'bar.get("href")');
},
test_method: function() {
Assert.isFalse(foo.hasClass('test-method'), 'call method only on valid set');
Assert.isTrue(bar.hasClass('test-method'), 'call method on init valid value');
},
test_getter: function() {
Assert.areEqual(foo.get('custom'), 'from getter', 'getter failed to use return');
},
test_setter: function() {
foo.set('custom', 'customVal');
Assert.areEqual('from setter', foo._configs.custom.value, 'setter failed to use return');
Assert.areEqual('from getter', foo.get('custom'), 'getter failed to use return');
},
test_dom_method: function() {
Assert.isTrue(foo.hasChildNodes(), 'foo.hasChildNodes()');
},
test_dom_event: function() {
foo.on('click', function(e) { alert('click'); });
var baz = new Y.Element('baz');
baz.on('click', function(e) { alert('click'); });
},
test_destroy: function() {
foo.destroy();
Assert.isNull(foo.get('element'), 'foo.destroy - null element');
Assert.isNull(foo.get('parent'), 'foo.destroy - null parent');
}
}));
tool.TestRunner.add(suite);
if (parent && parent != window) {
tool.TestManager.load();
} else {
tool.TestRunner.run();
}
});
})();
</script>
<style type="text/css">
</style>
</head>
<body class="yui-skin-sam">
<div id="doc">
<div id="foo">foo</div>
<a id="bar">foo</a>
</div>
<textarea id="test-textarea"></textarea>
</body>
</html>

View file

@ -1,195 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MouseEnter and MouseLeave Event Tests</title>
<link rel="stylesheet" type="text/css" href="../../../build/reset/reset-min.css">
<link rel="stylesheet" type="text/css" href="../../../build/base/base-min.css">
<style type="text/css">
.container {
background-color: #ccc;
padding: 20px;
margin: 10px 0;
border-width: 1px;
border-style: solid;
border-color: #ccc;
}
.container.hover {
background-color: #fc0;
}
.container ul {
list-style: none;
padding: 10px;
margin: 0;
background-color: #333;
}
.container ul li {
margin: 10px;
padding: 1px;
background-color: #999;
border-width: 1px;
border-style: solid;
border-color: #999;
}
.container ul li.hover {
background-color: #ff6;
}
.container ul li em {
display: block;
margin: 10px;
padding: 5px;
background-color: #666;
}
.outline,
.container ul li.outline {
border-color: #f00;
}
.container.focus {
background-color: blue;
}
</style>
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/event-mouseenter/event-mouseenter-min.js"></script>
<script type="text/javascript" src="../../../build/event-delegate/event-delegate.js"></script>
<script type="text/javascript" src="../../../build/selector/selector-min.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/element-delegate/element-delegate-min.js"></script>
</head>
<body>
<h1>MouseEnter and MouseLeave Event Tests</h1>
<ul>
<li>The background color of the <code>div</code> element should turn
orange and have a red outline when you move the mouse over it.</li>
<li>The background color of each <code>li</code> should change to yellow
when you mouse over it and have a red outline.</li>
</ul>
<div id="container-1" class="container">
<ul id="ul-1">
<li tabindex="0"><em>Item Type One</em></li>
<li tabindex="0"><em>Item Type Two</em></li>
<li tabindex="0"><em>Item Type Three</em></li>
</ul>
</div>
<button id="remove-listeners">Remove Listeners</button>
<script type="text/javascript">
(function () {
var Dom = YAHOO.util.Dom;
var onContainerMouseEnter = function (event, el) {
this.addClass("hover");
};
var onContainerMouseLeave = function (event, el) {
this.removeClass("hover");
};
var addContainerOutline = function (event, className) {
this.addClass(className);
};
var removeContainerOutline = function (event, className) {
this.removeClass(className);
};
var onLIMouseEnter = function (event, matchedEl) {
Dom.addClass(matchedEl, "hover");
};
var onLIMouseLeave = function (event, matchedEl) {
Dom.removeClass(matchedEl, "hover");
};
var addLIOutline = function (event, matchedEl, container, className) {
Dom.addClass(matchedEl, className);
};
var removeLIOutline = function (event, matchedEl, container, className) {
Dom.removeClass(matchedEl, className);
};
var onContainerFocus = function (event) {
this.addClass("focus");
};
var onContainerBlur = function (event) {
this.removeClass("focus");
};
var container = new YAHOO.util.Element("container-1");
container.on("mouseenter", onContainerMouseEnter);
container.on("mouseleave", onContainerMouseLeave);
container.on("mouseenter", addContainerOutline, "outline");
container.on("mouseleave", removeContainerOutline, "outline");
container.on("focus", onContainerFocus);
container.on("blur", onContainerBlur);
container.delegate("mouseenter", onLIMouseEnter, "li");
container.delegate("mouseleave", onLIMouseLeave, "li");
container.delegate("mouseenter", addLIOutline, "li", "outline");
container.delegate("mouseleave", removeLIOutline, "li", "outline");
YAHOO.util.Event.on("remove-listeners", "click", function () {
if (container.removeListener("mouseenter", onContainerMouseEnter) &&
container.removeListener("mouseleave", onContainerMouseLeave) &&
container.removeListener("mouseenter", addContainerOutline) &&
container.removeListener("mouseleave", removeContainerOutline) &&
container.removeDelegate("mouseenter", onLIMouseEnter) &&
container.removeDelegate("mouseleave", onLIMouseLeave) &&
container.removeDelegate("mouseenter", addLIOutline) &&
container.removeDelegate("mouseleave", removeLIOutline) &&
container.removeListener("focus", onContainerFocus) &&
container.removeListener("blur", onContainerBlur)) {
alert("Handlers successfully removed");
}
else {
alert("Handlers not removed successfully.");
}
});
}());
</script>
</body>
</html>

View file

@ -1,342 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>YUI Event Delegate Tests</title>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/logger/assets/logger.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/yuitest/assets/testlogger.css">
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/event-simulate/event-simulate-min.js"></script>
<script type="text/javascript" src="../../../build/selector/selector-min.js"></script>
<script type="text/javascript" src="../../../build/event-delegate/event-delegate-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event,
Dom = YAHOO.util.Dom,
Assert = YAHOO.util.Assert,
UserAction = YAHOO.util.UserAction;
Event.onDOMReady(function () {
var testLogger = new YAHOO.tool.TestLogger();
var delegateTest = new YAHOO.tool.TestCase({
name: "Event Delegation Test",
test_simple_delegate_for_anchors : function () {
var foo = false,
target,
match,
boundEl,
bRemoved,
onClick = function(e, matchedEl, container) {
foo = true;
target = Event.getTarget(e);
match = matchedEl;
boundEl = container;
};
Event.delegate('mod1', 'click', onClick, 'a');
UserAction.click(Dom.get('firstlink'));
Assert.isTrue(foo, "simple delegation fails, mod1 should pickup the event and test target [firstlink]");
Assert.areEqual(match, Dom.get('firstlink'), "event delegate works but the matched element is an incorrect node, should be the matching node");
Assert.areEqual(target, Dom.get('firstlink'), "event delegate works but the target is an incorrect node, should be the actual click target");
Assert.areEqual(boundEl, Dom.get('mod1'), "event delegate works but the container property should be the bound element");
bRemoved = Event.removeDelegate('mod1', 'click', onClick);
Assert.isTrue(bRemoved, "Removal of delegated click event failed");
},
test_multiple_selectors: function () {
var foo = false,
target,
match,
boundEl,
bRemoved,
onClick = function(e, matchedEl, container) {
foo = true;
target = Event.getTarget(e);
match = matchedEl;
boundEl = container;
};
Event.delegate('mod1', 'click', onClick, '.hd,.bd');
UserAction.click(Dom.get('mod-header'));
Assert.areEqual(match, Dom.get('mod-header'), "event delegate works but the matched element is an incorrect node, should be the matching node");
UserAction.click(Dom.get('mod-body'));
Assert.areEqual(match, Dom.get('mod-body'), "event delegate works but the matched element is an incorrect node, should be the matching node");
},
test_document_as_container: function () {
var foo = false,
target,
match,
boundEl,
bRemoved,
onClick = function(e, matchedEl, container) {
foo = true;
target = Event.getTarget(e);
match = matchedEl;
boundEl = container;
};
Event.delegate(document, 'click', onClick, 'a');
UserAction.click(Dom.get('firstlink'));
Assert.isTrue(foo, "simple delegation fails, document should pickup the event and test target [firstlink]");
Assert.areEqual(match, Dom.get('firstlink'), "event delegate works but the matched element is an incorrect node, should be the matching node");
Assert.areEqual(target, Dom.get('firstlink'), "event delegate works but the target is an incorrect node, should be the actual click target");
Assert.areEqual(boundEl, document, "event delegate works but the container property should be the bound element");
bRemoved = Event.removeDelegate(document, 'click', onClick);
Assert.isTrue(bRemoved, "Removal of delegated click event failed");
},
test_checking_delegation_target: function(){
var foo = false,
target,
match,
boundEl;
Event.delegate('mod1', 'click', function(e, matchedEl, container) {
foo = true;
target = Event.getTarget(e);
match = matchedEl;
boundEl = container;
}, 'a');
UserAction.click(Dom.get('fakeimage'));
Assert.isTrue(foo, "delegation fails for an image within an anchor, mod1 should pickup the event and test target [secondlink]");
Assert.areEqual(match, Dom.get('secondlink'), "event delegate works but the matched element is an incorrect node, should be the matching node");
Assert.areEqual(target, Dom.get('fakeimage'), "event delegate works but the target is an incorrect node, should be the actual click target");
Assert.areEqual(boundEl, Dom.get('mod1'), "event delegate works but the container property should be the bound element");
},
test_including_container_in_selector: function(){
var foo = false;
Event.delegate('mod1', 'click', function(e, matchedEl, container) {
foo = true;
}, '#mod1 a');
UserAction.click(Dom.get('firstlink'), 'click');
Assert.isFalse(foo, "delegation fails, the container (specified in the on) can not be part of the selectors");
},
test_targeting_container_without_selectors: function(){
var foo = false;
Event.delegate('mod1', 'click', function(e) {
foo = true;
});
UserAction.click(Dom.get('firstlink'), 'click');
Assert.isFalse(foo, "delegation fails, delegation without at least one selector should never trigger an event");
},
test_multiple_selectors_one_match: function(){
var foo = false,
target;
Event.delegate('mod1', 'click', function(e, matchedEl) {
foo = true;
target = Event.getTarget(e);
}, 'a,a span');
UserAction.click(Dom.get('firstlink'), 'click');
Assert.isTrue(foo, "multiple selectors fails, delegate should be able to match different selectors");
Assert.areEqual(target, Dom.get('firstlink'), "event delegate works but the target is an incorrect node, should be the matching selector");
},
test_multiple_delegate_matches: function(){
var foo1 = false,
foo2 = false,
target1,
target2,
match1,
match2;
Event.delegate('mod1', 'click', function(e, matchedEl, container) {
foo1 = true;
target1 = Event.getTarget(e);
match1 = matchedEl;
}, 'a');
Event.delegate('mod1', 'click', function(e, matchedEl, container) {
foo2 = true;
target2 = Event.getTarget(e);
match2 = matchedEl;
}, 'a span');
UserAction.click(Dom.get('spanwithinlink'));
Assert.isTrue(foo1, "first match fail, delegate should be able to match [a]");
Assert.isTrue(foo2, "second match fail, delegate should be able to match [a span]");
Assert.areEqual(match1, Dom.get('secondlink'), "event delegate works but the matched element is an incorrect node, should be the matching selector");
Assert.areEqual(target1, Dom.get('spanwithinlink'), "event delegate works but the target is an incorrect node, should be the clicked node");
Assert.areEqual(match2, Dom.get('spanwithinlink'), "event delegate works but the target is an incorrect node, should be the matching selector");
Assert.areEqual(target2, Dom.get('spanwithinlink'), "event delegate works but the target is an incorrect node, should be the clicked");
},
test_bubble_up_after_delegate: function(){
var foo1 = false,
foo2 = false,
target1,
target2,
match;
Event.delegate('mod1', 'click', function(e, matchedEl, container) {
foo1 = true;
target1 = Event.getTarget(e);
match = matchedEl;
}, 'a');
Event.on('doc', 'click', function(e) {
foo2 = true;
target2 = Event.getTarget(e);
});
UserAction.click(Dom.get('spanwithinlink'));
Assert.isTrue(foo1, "first match fail, delegate should be able to match [a]");
Assert.isTrue(foo2, "second match fail, the event doesn't bubble up after the delegate routine");
Assert.areEqual(match, Dom.get('secondlink'), "event delegate works but the matched element is an incorrect node, should be the matching selector");
Assert.areEqual(target1, Dom.get('spanwithinlink'), "event delegate works but the target is an incorrect node, should be the actual target");
},
test_bubble_up_after_delegate_halt: function(){
var foo1 = false,
foo2 = false;
Event.delegate('mod1', 'click', function(e) {
foo1 = true;
Event.stopEvent(e);
}, 'a');
Event.on('click', function(e) {
foo2 = true;
}, '#doc');
UserAction.click(Dom.get('spanwithinlink'));
Assert.isTrue(foo1, "first match fail, delegate should be able to match [a]");
Assert.isFalse(foo2, "the listener for 'doc' got executed, which means that e.halt fails during the delegate routine");
},
test_delegation_of_focus: function () {
var foo = false,
target,
match,
boundEl,
bRemoved,
onFocus = function(e, matchedEl, container) {
foo = true;
target = Event.getTarget(e);
match = matchedEl;
boundEl = container;
};
Event.delegate('mod1', 'focusin', onFocus, 'a');
Dom.get('firstlink').focus();
Assert.isTrue(foo, "simple delegation fails, mod1 should pickup the event and test target [firstlink]");
Assert.areEqual(match, Dom.get('firstlink'), "event delegate works but the matched element is an incorrect node, should be the matching node");
Assert.areEqual(target, Dom.get('firstlink'), "event delegate works but the target is an incorrect node, should be the actual click target");
Assert.areEqual(boundEl, Dom.get('mod1'), "event delegate works but the container property should be the bound element");
bRemoved = Event.removeDelegate('mod1', 'focusin', onFocus);
Assert.isTrue(bRemoved, "Removal of delegated focus event handler failed");
}
});
YAHOO.tool.TestRunner.add(delegateTest);
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
});
}());
</script>
</head>
<body class="yui-skin-sam">
<div id="doc">
<div id="mod1">
<div id="mod-header" class="hd"><h3 class="title">H3 - Title</h3></div>
<div id="mod-body" class="bd">
<p>simple paragraph with a link <a href="#" id="firstlink">simple link</a></p>
<p>another paragraph with a complex link <a href="#" id="secondlink"><strong>strong within link</strong><img alt="fake image" id="fakeimage" /> - complex <span id="spanwithinlink">link</span></a></p>
</div>
</div>
</div>
</body>
</html>
`

View file

@ -1,60 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Event Delegation Test</title>
<script type="text/javascript" src="../../../build/yuiloader/yuiloader-min.js"></script>
<script type="text/javascript">
(function () {
// Instantiate and configure Loader:
var loader = new YAHOO.util.YUILoader({
require: ["event-delegate"],
base: '../../../build/',
loadOptional: true,
onSuccess: function() {
if (YAHOO.util.Event.delegate) {
alert("Loading of the delegate submodule was successful");
}
},
onProgress: function(o) {
alert("progress:" + o.name);
},
onFailure: function(msg, xhrobj) {
alert("Failed to load the delegate submodule was successful");
},
timeout: 10000
});
loader.insert();
}());
</script>
</head>
<body>
</body>
</html>

View file

@ -1,229 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MouseEnter and MouseLeave Event Tests</title>
<link rel="stylesheet" type="text/css" href="../../../build/reset/reset-min.css">
<link rel="stylesheet" type="text/css" href="../../../build/base/base-min.css">
<style type="text/css">
.container {
background-color: #ccc;
padding: 20px;
margin: 10px 0;
border-width: 1px;
border-style: solid;
border-color: #ccc;
}
.container.hover {
background-color: #fc0;
}
.container ul {
list-style: none;
padding: 10px;
margin: 0;
background-color: #333;
}
.container ul li {
margin: 10px;
padding: 1px;
background-color: #999;
border-width: 1px;
border-style: solid;
border-color: #999;
}
.container ul li.hover {
background-color: #ff6;
}
.container ul li em {
display: block;
margin: 10px;
padding: 5px;
background-color: #666;
}
.outline,
.container ul li.outline {
border-color: #f00;
}
.container.focus {
background-color: blue;
}
</style>
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/event-mouseenter/event-mouseenter-min.js"></script>
<script type="text/javascript" src="../../../build/event-delegate/event-delegate-min.js"></script>
<script type="text/javascript" src="../../../build/selector/selector-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event,
Dom = YAHOO.util.Dom;
var onContainerMouseEnter = function (event, el) {
if (el == this) {
Dom.addClass(this, "hover");
}
};
var onContainerMouseLeave = function (event, el, className) {
if (el == this) {
Dom.removeClass(this, "hover");
}
};
var onLIMouseEnter = function (event, matchedEl, container) {
if (this == matchedEl && container.id == "container-1") {
Dom.addClass(this, "hover");
}
};
var onLIMouseLeave = function (event, matchedEl, container) {
if (this == matchedEl && container.id == "container-1") {
Dom.removeClass(this, "hover");
}
};
var addContainerOutline = function (event, el, className) {
if (className == this) {
Dom.addClass(el, this);
}
};
var removeContainerOutline = function (event, el, className) {
if (className == this) {
Dom.removeClass(el, this);
}
};
var addLIOutline = function (event, el, container, className) {
if (className == this) {
Dom.addClass(el, this);
}
};
var removeLIOutline = function (event, el, container, className) {
if (className == this) {
Dom.removeClass(el, this);
}
};
var onContainerFocus = function (event) {
Dom.addClass(this, "focus");
};
var onContainerBlur = function (event) {
Dom.removeClass(this, "focus");
};
Event.on("container-1", "mouseenter", onContainerMouseEnter);
Event.on("container-1", "mouseleave", onContainerMouseLeave);
Event.on("container-1", "mouseenter", addContainerOutline, "outline", true);
Event.on("container-1", "mouseleave", removeContainerOutline, "outline", true);
Event.on("container-1", "focusin", onContainerFocus);
Event.on("container-1", "focusout", onContainerBlur);
Event.delegate("container-1", "mouseenter", onLIMouseEnter, "li");
Event.delegate("container-1", "mouseleave", onLIMouseLeave, "li");
Event.delegate("container-1", "mouseenter", addLIOutline, "li", "outline", true);
Event.delegate("container-1", "mouseleave", removeLIOutline, "li", "outline", true);
Event.on("remove-listeners", "click", function () {
if (Event.removeListener("container-1", "mouseenter", onContainerMouseEnter) &&
Event.removeListener("container-1", "mouseleave", onContainerMouseLeave) &&
Event.removeListener("container-1", "mouseenter", addContainerOutline) &&
Event.removeListener("container-1", "mouseleave", removeContainerOutline) &&
Event.removeDelegate("container-1", "mouseenter", onLIMouseEnter) &&
Event.removeDelegate("container-1", "mouseleave", onLIMouseLeave) &&
Event.removeDelegate("container-1", "mouseenter", addLIOutline) &&
Event.removeDelegate("container-1", "mouseleave", removeLIOutline) &&
Event.removeListener("container-1", "focusin", onContainerFocus) &&
Event.removeListener("container-1", "focusout", onContainerBlur)) {
alert("Handlers successfully removed");
}
else {
alert("Handlers not removed successfully.");
}
});
}());
</script>
</head>
<body>
<h1>MouseEnter and MouseLeave Event Tests</h1>
<ul>
<li>The background color of the <code>div</code> element should turn
orange and have a red outline when you move the mouse over it.</li>
<li>The background color of each <code>li</code> should change to yellow
when you mouse over it and have a red outline.</li>
</ul>
<div id="container-1" class="container">
<ul id="ul-1">
<li tabindex="0"><em>Item Type One</em></li>
<li tabindex="0"><em>Item Type Two</em></li>
<li tabindex="0"><em>Item Type Three</em></li>
</ul>
</div>
<button id="remove-listeners">Remove Listeners</button>
</body>
</html>

View file

@ -1,60 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MouseEnter Event Test</title>
<script type="text/javascript" src="../../../build/yuiloader/yuiloader-min.js"></script>
<script type="text/javascript">
(function () {
// Instantiate and configure Loader:
var loader = new YAHOO.util.YUILoader({
require: ["event-mouseenter"],
base: '../../../build/',
loadOptional: true,
onSuccess: function() {
if (YAHOO.util.Event._createMouseDelegate) {
alert("Loading of the event-mouseenter submodule was successful");
}
},
onProgress: function(o) {
alert("progress:" + o.name);
},
onFailure: function(msg, xhrobj) {
alert("Failed to load the delegate submodule was successful");
},
timeout: 10000
});
loader.insert();
}());
</script>
</head>
<body>
</body>
</html>

View file

@ -1,125 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>MouseEnter and MouseLeave Event Tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<style type="text/css">
.container {
background-color: #ccc;
padding: 20px;
margin: 10px 0;
border-width: 1px;
border-style: solid;
border-color: #ccc;
}
</style>
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/event-mouseenter/event-mouseenter-min.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event;
Event.onDOMReady(function () {
var logReader = new YAHOO.widget.LogReader();
});
Event.on("add-mouseenter", "click", function () {
Event.on("container", "mouseenter", function (e) {
YAHOO.log("mouseenter listener called");
});
Event.on("container", "mouseleave", function (e) {
YAHOO.log("mouseleave listener called");
});
});
Event.on("add-mouseover", "click", function () {
Event.on("container", "mouseover", function (e) {
YAHOO.log("mouseover listener called");
});
Event.on("container", "mouseout", function (e) {
YAHOO.log("mouseout listener called");
});
});
Event.on("purge-mouseenter", "click", function () {
YAHOO.log("Purging mouseenter & mouseleave listeners, mouseover and mouseout listeners should still be called.");
Event.purgeElement("container", false, "mouseenter");
Event.purgeElement("container", false, "mouseleave");
});
Event.on("purge-mouseover", "click", function () {
YAHOO.log("Purging mouseover & mouseout listeners, mouseenter and mouseleave listeners should still be called.");
Event.purgeElement("container", false, "mouseover");
Event.purgeElement("container", false, "mouseout");
});
}());
</script>
</head>
<body class="yui-skin-sam">
<h1>MouseEnter and MouseLeave Event Tests</h1>
<p>Using this test:</p>
<ul>
<li>Purging <code>mouseover</code> and <code>mouseout</code> listeners shouldn't stop <code>mouseenter</code> and <code>mouseleave</code> events from firing.</li>
<li>Purging <code>mouseenter</code> and <code>mouseleave</code> listeners shouldn't stop <code>mouseover</code> and <code>mouseout</code> events from firing.</li>
</ul>
<p>Event listeners are added to the following list:</p>
<div id="container" class="container">
<ul>
<li><em>Item Type One</em></li>
<li><em>Item Type Two</em></li>
<li><em>Item Type Three</em></li>
</ul>
</div>
<button id="add-mouseenter">Add MouseEnter and MouseLeave Listeners</button>
<button id="add-mouseover">Add MouseOver and MouseOver Listeners</button>
<button id="purge-mouseenter">Purge MouseEnter and MouseLeave Listeners</button>
<button id="purge-mouseover">Purge MouseOver and MouseOver Listeners</button>
</body>
</html>

View file

@ -1,63 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Focus and Blur Test</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event;
var onButtonFocus = function (event) {
YAHOO.log("focus");
};
var onButtonBlur = function (event) {
YAHOO.log("blur");
};
Event.onFocus("container-1", onButtonFocus);
Event.onBlur("container-1", onButtonBlur);
Event.onDOMReady(function () {
var logReader = new YAHOO.widget.LogReader();
});
}());
</script>
</head>
<body class="yui-skin-sam">
<h1>Focus and Blur Test</h1>
<ul>
<li>Test subscribing to the capture mode-based focus and blur event
using the built-in onAvailable (this didn't work in YUI 2.7 and
versions prior)</li>
<li>For Opera: Test being able to use capture mode-based focus and
blur event handlers to listen for focus and blur events on a single
element (this didn't work in YUI 2.7 and versions prior)</li>
</ul>
<div id="container-1">
<button id="button-1">Click Me!</button>
</div>
</body>
</html>

View file

@ -1,254 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>YUI Event Delegate Tests</title>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/logger/assets/logger.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/yuitest/assets/testlogger.css">
<script type="text/javascript" src="../../../build/yahoo/yahoo-min.js"></script>
<script type="text/javascript" src="../../../build/dom/dom-min.js"></script>
<script type="text/javascript" src="../../../build/event/event-min.js"></script>
<script type="text/javascript" src="../../../build/event-simulate/event-simulate-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event,
Dom = YAHOO.util.Dom,
Assert = YAHOO.util.Assert,
UserAction = YAHOO.util.UserAction;
Event.onDOMReady(function () {
var testLogger = new YAHOO.tool.TestLogger();
var focusTest = new YAHOO.tool.TestCase({
name: "Event Delegation Test",
test_add_focusin : function () {
var foo = false,
target,
boundEl,
bRemoved,
onFocus = function(e) {
foo = true;
boundEl = this;
target = Event.getTarget(e);
};
Event.on('container', 'focusin', onFocus);
Dom.get('button-1').focus();
Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
Assert.areEqual(target, Dom.get('button-1'), "the target is the incorrect node, should be the actual focus target");
Assert.areEqual(boundEl, Dom.get('container'), "the default scope should be the bound element");
foo = false;
target = null;
boundEl = null;
Dom.get('text-1').focus();
Dom.get('button-1').focus();
Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
Assert.areEqual(target, Dom.get('button-1'), "the target is the incorrect node, should be the actual focus target");
Assert.areEqual(boundEl, Dom.get('container'), "the default scope should be the bound element");
Dom.get('button-1').blur();
},
test_remove_focusin: function () {
var foo = false,
onFocus = function(e) {
foo = true;
};
Event.on('container', 'focusin', onFocus);
Dom.get('button-1').focus();
Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
bRemoved = Event.removeListener('container', 'focusin', onFocus);
Assert.isTrue(bRemoved, "Removal of focusin listener event failed");
Dom.get('button-1').blur();
foo = false;
Dom.get('button-1').focus();
Assert.isFalse(foo, "container should not pickup the focus event after listener is removed");
Dom.get('button-1').blur();
},
test_purge_focusin: function () {
var foo = false,
onFocus = function(e) {
foo = true;
};
Event.on('container', 'focusin', onFocus);
Dom.get('button-1').focus();
Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
Event.purgeElement('container', false, 'focusin');
Dom.get('button-1').blur();
foo = false;
Dom.get('button-1').focus();
Assert.isFalse(foo, "container should not pickup the focus event after listener has been purged");
},
test_add_focusout : function () {
var foo = false,
target,
boundEl,
bRemoved,
onBlur = function(e) {
foo = true;
boundEl = this;
target = Event.getTarget(e);
};
Event.on('container', 'focusout', onBlur);
Dom.get('button-1').focus();
Dom.get('button-1').blur();
Assert.isTrue(foo, "simple focusout fails, container should pickup the focus event");
Assert.areEqual(target, Dom.get('button-1'), "the target is the incorrect node, should be the actual blur target");
Assert.areEqual(boundEl, Dom.get('container'), "the default scope should be the bound element");
foo = false;
target = null;
boundEl = null;
Dom.get('button-1').focus();
Dom.get('text-1').focus();
Assert.isTrue(foo, "simple focusout fails, container should pickup the focus event");
Assert.areEqual(target, Dom.get('button-1'), "the target is the incorrect node, should be the actual blur target");
Assert.areEqual(boundEl, Dom.get('container'), "the default scope should be the bound element");
},
test_remove_focusout: function () {
var foo = false,
bRemoved,
onBlur = function(e) {
foo = true;
};
Event.on('container', 'focusout', onBlur);
Dom.get('button-1').focus();
Dom.get('button-1').blur();
Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
foo = false;
bRemoved = Event.removeListener('container', 'focusout', onBlur);
Dom.get('button-1').focus();
Dom.get('text-1').focus();
Assert.isTrue(bRemoved, "Removal of focusout listener event failed");
Assert.isFalse(foo, "container should not pickup the focusout event after listener has been removed");
},
test_purge_focusout: function () {
var foo = false,
onBlur = function(e) {
foo = true;
};
Event.on('container', 'focusout', onBlur);
Dom.get('button-1').focus();
Dom.get('button-1').blur();
Assert.isTrue(foo, "simple focus fails, container should pickup the focus event");
foo = false;
Event.purgeElement('container', false, 'focusout');
Dom.get('button-1').focus();
Dom.get('text-1').focus();
Assert.isFalse(foo, "container should not pickup the focusout event after listener has been purged");
}
});
YAHOO.tool.TestRunner.add(focusTest);
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
});
}());
</script>
</head>
<body class="yui-skin-sam">
<div id="container">
<button id="button-1">Click Me!</button>
<a id="anchor-1" href="http://www.yahoo.com">Click Me!</a>
<input type="text" id="text-1">
</div>
</body>
</html>
`

View file

@ -1,310 +0,0 @@
<html>
<head>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<style>
.everything { position:relative; height:420px; }
.everything div { border:1px solid #888; }
.topmain { position:absolute; top:10px; left:120px; height:75px; width:100px; }
.duo1 { position:absolute; top:130px; left:20px; height:67px; width:100px; }
#duo1 { background-image:url('http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/uluru.jpg'); }
.duo2 { position:absolute; top:130px; left:220px; height:53px; width:100px; }
.src { position:absolute; top:220px; left:120px; height:72px; width:100px; }
.trigger { position:absolute; top:330px; left:120px; height:75px; width:100px; }
.sizer { position:absolute; top:450px; left:20px; height:150px; width:200px; }
.sharedTrigger1 { position:absolute; top:10px; left:420px; height:72px; width:100px; }
.sharedTrigger2 { position:absolute; top:10px; left:550px; height:67px; width:100px; }
.fold-top { position:absolute; top:130px; left:420px; height:75px; width:100px; }
.fold-bottom { position:absolute; top:500px; left:420px; height:75px; width:100px; }
.customTrigger { position:absolute; top:330px; left:420px; height:67px; width:100px; }
.yui-imgload { background:none !important; }
</style>
</head>
<body>
<div class='everything' id='everything'>
<div class='topmain' id='topmain'></div>
<div class='duo1 yui-imgload' id='duo1'></div>
<div class='duo2'>
<img class='yui-imgload' id='duo2' style='background-image:url("http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/katatjuta.jpg");' width='100' height='53' />
</div>
<div class='src' id='srcImgCont'>
<img id='srcImg' />
</div>
<div class='trigger' id='addlTrigger'></div>
<div class='sizer'>
<img id='sizerImg' style='visibility:hidden;' />
</div>
<div class='sharedTrigger1' id='sharedTrigger1'></div>
<div class='sharedTrigger2' id='sharedTrigger2'></div>
<div class='fold-top'>
<img id='foldImgTop' />
</div>
<div class='fold-bottom'>
<img id='foldImgBottom' />
</div>
<div class='customTrigger' id='customTrigger'></div>
</div>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script type="text/javascript" src="../../../build/event-simulate/event-simulate.js"></script>
<script type="text/javascript" src="../../../build/imageloader/imageloader-min.js"></script>
<script>
var imgUrlsTestCase = new YAHOO.tool.TestCase({
/*
* Test case to check the URL setting in the different types of image objects
*/
name: 'Setting Urls',
setUp: function() {
// background-image group
this.bgImgUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/museum.jpg';
this.mainGroup = new YAHOO.util.ImageLoader.group('topmain', 'mouseover');
this.mainGroup.registerBgImage('topmain', this.bgImgUrl);
this.mainGroup.name = 'imgUrlsTestBgImg';
this.mainGroupImage = document.getElementById('topmain');
// src-image group
this.srcImgUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/morraine.jpg';
this.srcGroup = new YAHOO.util.ImageLoader.group('srcImgCont', 'click');
this.srcGroup.registerSrcImage('srcImg', this.srcImgUrl);
this.srcGroup.name = 'imgUrlsTestSrcImg';
this.srcGroupImage = document.getElementById('srcImg');
},
testBgImg: function() {
YAHOO.util.UserAction.mouseover('topmain');
// style.bgImg is "url('...')", but we can't rely on those quotes across browsers. indexOf is sufficient
YAHOO.util.Assert.areNotEqual(this.mainGroupImage.style.backgroundImage.indexOf(this.bgImgUrl), -1);
},
testSrcImg: function() {
YAHOO.util.UserAction.click('srcImgCont');
YAHOO.util.Assert.areEqual(this.srcGroupImage.src, this.srcImgUrl);
}
});
var classNameTestCase = new YAHOO.tool.TestCase({
/*
* Test case to check fetching by CSS class name
*/
name: 'Class Name Fetching',
setUp: function() {
this.duo1Url = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/uluru.jpg';
this.duo2Url = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/katatjuta.jpg';
this.duo1Image = document.getElementById('duo1');
this.duo2Image = document.getElementById('duo2');
// classname group
this.classGroup = new YAHOO.util.ImageLoader.group('duo1', 'mouseover');
this.classGroup.className = 'yui-imgload';
this.classGroup.name = 'classNameTest';
},
testClassNames: function() {
// We have to just check for the classname. Nothing else in the element will indicate the difference between before and after url application
YAHOO.util.Assert.areEqual(this.duo1Image.className, 'duo1 yui-imgload');
YAHOO.util.Assert.areEqual(this.duo2Image.className, 'yui-imgload');
YAHOO.util.UserAction.mouseover('duo1');
YAHOO.util.Assert.areEqual(this.duo1Image.className, 'duo1');
YAHOO.util.Assert.areEqual(this.duo2Image.className, '');
}
});
var addTriggerTestCase = new YAHOO.tool.TestCase({
/*
* Test case for checking the addTrigger method
*/
name: 'addTrigger test',
setUp: function() {
this.imageUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/museum.jpg';
this.triggerGroup = new YAHOO.util.ImageLoader.group('topmain', 'dblclick');
this.triggerGroup.registerBgImage('addlTrigger', this.imageUrl);
this.triggerGroup.addTrigger('addlTrigger', 'click');
this.triggerGroup.name = 'addTriggerGroup';
this.triggerImage = document.getElementById('addlTrigger');
},
testAddTrigger: function() {
YAHOO.util.Assert.areEqual(this.triggerImage.style.backgroundImage, '');
YAHOO.util.UserAction.click('addlTrigger');
YAHOO.util.Assert.areNotEqual(this.triggerImage.style.backgroundImage.indexOf(this.imageUrl), -1);
}
});
var customTriggerTestCase = new YAHOO.tool.TestCase({
/*
* Test case for checking adding custom event triggers to a group
*/
name: 'custom trigger test',
setUp: function() {
this.imageUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/uluru.jpg';
this.customEvent = new YAHOO.util.CustomEvent('imageloader_unit_test_for_custom_trigger');
this.triggerGroup = new YAHOO.util.ImageLoader.group();
this.triggerGroup.addCustomTrigger(this.customEvent);
this.triggerGroup.registerBgImage('customTrigger', this.imageUrl);
this.triggerGroup.name = 'customTriggerGroup';
this.triggerImage = document.getElementById('customTrigger');
},
testCustomTrigger: function() {
YAHOO.util.Assert.areEqual(this.triggerImage.style.backgroundImage, '');
this.customEvent.fire();
YAHOO.util.Assert.areNotEqual(this.triggerImage.style.backgroundImage.indexOf(this.imageUrl), -1);
}
});
var imgSizingTestCase = new YAHOO.tool.TestCase({
/*
* Test case to check post-fetch resizing of image, as well as 'visibility' setting
*/
name: 'Image Sizing',
setUp: function() {
this.imageUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/japan.jpg';
this.sizerGroup = new YAHOO.util.ImageLoader.group('sizerImg', 'mouseover');
this.sizerGroup.name = 'imgSizingGroup';
var sizerILImg = this.sizerGroup.registerSrcImage('sizerImg', this.imageUrl, 200, 150);
sizerILImg.setVisible = true;
this.sizerImage = document.getElementById('sizerImg');
},
testImageVisibility: function() {
YAHOO.util.UserAction.mouseover('sizerImg');
YAHOO.util.Assert.areEqual(this.sizerImage.style.visibility, 'visible');
},
testImageSizing: function() {
// not sure if we can trust order, so make sure trigger was fired
YAHOO.util.UserAction.mouseover('sizerImg');
YAHOO.util.Assert.areEqual(this.sizerImage.height, 150);
YAHOO.util.Assert.areEqual(this.sizerImage.width, 200);
}
});
var triggerRemovalTestCase = new YAHOO.tool.TestCase({
/*
* Test case to check removing the trigger from groups that share the same trigger.
* During development, there was an initial problem of when one group fired, the other group's trigger was removed.
* This was due to the way the fetch() methods were passed to Event's addListener(); fixed by wrapping the fetch calls.
* More details available in js code comments, in addTrigger() method
*/
name: "Trigger Removal for Competing Groups' Triggers",
setUp: function() {
this.imageAUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/morraine.jpg';
this.imageZUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/uluru.jpg';
this.groupA = new YAHOO.util.ImageLoader.group('sharedTrigger1', 'click');
this.groupA.registerBgImage('sharedTrigger1', this.imageAUrl);
this.groupA.name = 'triggerRemovalGroup(A)';
this.groupZ = new YAHOO.util.ImageLoader.group('sharedTrigger1', 'click');
this.groupZ.registerBgImage('sharedTrigger2', this.imageZUrl);
this.groupZ.addTrigger('sharedTrigger2', 'click');
this.groupZ.name = 'triggerRemovalGroup(Z)';
this.groupAImage = document.getElementById('sharedTrigger1');
this.groupZImage = document.getElementById('sharedTrigger2');
},
testCompetingTriggers: function() {
YAHOO.util.UserAction.click('sharedTrigger2');
YAHOO.util.Assert.areNotEqual(this.groupZImage.style.backgroundImage.indexOf(this.imageZUrl), -1);
YAHOO.util.Assert.areEqual(this.groupAImage.style.backgroundImage, '');
YAHOO.util.UserAction.click('sharedTrigger1');
YAHOO.util.Assert.areNotEqual(this.groupAImage.style.backgroundImage.indexOf(this.imageAUrl), -1);
}
});
var foldConditionalTestCase = new YAHOO.tool.TestCase({
/*
* Test case to check fold-conditional loading of a group
* We're faking the viewport size and fold determination so that everything will be dependable in any situation (including automated runs)
*/
name: "Fold Conditional Loading",
setUp: function() {
this.imageTopUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/japan.jpg';
this.imageBotUrl = 'http://developer.yahoo.com/yui/docs/assets/examples/exampleimages/small/japan.jpg';
this.foldGroup = new YAHOO.util.ImageLoader.group();
this.foldGroup.registerSrcImage('foldImgTop', this.imageTopUrl);
this.foldGroup.registerSrcImage('foldImgBottom', this.imageBotUrl);
this.foldGroup.foldConditional = true;
this.foldGroup.name = 'foldConditionalGroup';
this.groupTopImage = document.getElementById('foldImgTop');
this.groupBotImage = document.getElementById('foldImgBottom');
// override the foldCheck function of this group, because we'll need to fake things to make them dependable
this.foldGroup._foldCheck = function() {
var hLimit = 300;
var wLimit = 1000;
for (var id in this._imgObjs) {
if (YAHOO.lang.hasOwnProperty(this._imgObjs, id)) {
var elPos = YAHOO.util.Dom.getXY(this._imgObjs[id].domId);
if (elPos[1] < hLimit && elPos[0] < wLimit) {
this._imgObjs[id].fetch();
}
}
}
};
},
testFoldCheck: function() {
this.foldGroup._foldCheck();
YAHOO.util.Assert.areEqual(this.groupTopImage.src, this.imageTopUrl);
YAHOO.util.Assert.areEqual(this.groupBotImage.src, '');
}
});
var imageLoaderTestSuite = new YAHOO.tool.TestSuite('YUI ImageLoader Utility');
imageLoaderTestSuite.add(imgUrlsTestCase);
imageLoaderTestSuite.add(classNameTestCase);
imageLoaderTestSuite.add(addTriggerTestCase);
imageLoaderTestSuite.add(customTriggerTestCase);
imageLoaderTestSuite.add(imgSizingTestCase);
imageLoaderTestSuite.add(triggerRemovalTestCase);
imageLoaderTestSuite.add(foldConditionalTestCase);
YAHOO.tool.TestRunner.add(imageLoaderTestSuite);
YAHOO.util.Event.onDOMReady(function() {
var logger = new YAHOO.tool.TestLogger();
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
});
</script>
</body>
</html>

View file

@ -1,989 +0,0 @@
<!doctype html>
<html>
<head>
<title>Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" id="locallink" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<style type="text/css" id="styleblock" class="highlight-ignore">
h1 {
font: normal 125%/1.4 Arial, sans-serif;
}
.yui-log {
display: inline;
float: right;
position: relative;
}
.yui-log-container {
width: 300px;
}
.yui-log .yui-log-bd {
height: 525px;
}
.yui-log .yui-log-ft {
position: static;
}
.highlight-example {
display: inline;
float: left;
width: 650px;
}
.highlight-example h2 {
display: none;
}
.yui-log-bd h3 {
border-bottom: 1px solid #ccc;
color: #900;
margin: 0;
padding: 1em 0 0 1ex;
}
</style>
</head>
<body class="yui-skin-sam">
<h1>Tests</h1>
<div id="testbed"></div>
<form action=''>
<h3>Form used for field value extraction, stringification</h3>
<input type="text" id="empty_text">
<input type="text" id="text" value="text">
<input type="radio" name="radio" id="unchecked_radio" value="unchecked">
<input type="radio" name="radio" id="checked_radio" value="radio" checked="checked">
<input type="checkbox" name="box" id="unchecked_box" value="unchecked">
<input type="checkbox" name="box" id="checked_box" value="box" checked="checked">
<textarea id="empty_textarea"></textarea>
<textarea id="textarea">textarea</textarea>
<select id="select">
<option value="unselected">Unselected</option>
<option value="selected" selected="selected">Selected</option>
</select>
<select id="multiple_select" multiple="multiple" size="3">
<option value="unselected">Unselected</option>
<option value="selected" selected="selected">Selected</option>
<option value="selected also" selected="selected">Selected also</option>
</select>
<button id="button" type="button">content; no value</button>
<button id="button_with_value" type="button" value="button value">content and value</button>
<button id="button_submit" type="submit">content; no value</button>
<button id="button_submit_with_value" type="submit" value="submit button value">content and value</button>
<input type="button" id="input_button" value="input button">
<input type="submit" id="input_submit" value="input submit">
<input type="image" id="input_image" src="404.png" value="input image">
</form>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest-min.js"></script>
<script type="text/javascript" src="../../../build/json/json-debug.js"></script>
<script type="text/javascript">
(function () {
var d = document,
t = YAHOO.tool,
u = YAHOO.util,
w = YAHOO.widget,
l = YAHOO.lang,
TestSuite = t.TestSuite,
TestCase = t.TestCase,
TestLogger = t.TestLogger,
TestRunner = t.TestRunner,
Event = u.Event,
Dom = u.Dom,
JSON = l.JSON,
Assert = u.Assert,
ArrayAssert = u.ArrayAssert,
suite = new TestSuite("JSON Tests"),
JSON_STRING;
JSON_STRING = '[\
"JSON Test Pattern pass1",\
{"object with 1 member":["array with 1 element"]},\
{},\
[],\
-42,\
true,\
false,\
null,\
{\
"integer": 1234567890,\
"real": -9876.543210,\
"e": 0.123456789e-12,\
"E": 1.234567890E+34,\
"": 23456789012E66,\
"zero": 0,\
"one": 1,\
"space": " ",\
"quote": "\\"",\
"backslash": "\\\\",\
"controls": "\\b\\f\\n\\r\\t",\
"slash": "/ & \\/",\
"alpha": "abcdefghijklmnopqrstuvwxyz",\
"ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",\
"digit": "0123456789",\
"0123456789": "digit",\
"special": "`1~!@#$%^&*()_+-={\':[,]}|;.</>?",\
"hex": "\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A",\
"true": true,\
"false": false,\
"null": null,\
"array":[ ],\
"object":{ },\
"address": "50 St. James Street",\
"url": "http://www.JSON.org/",\
"comment": "// /* <!-- --",\
"# -- --> */": " ",\
" s p a c e d " :[1,2 , 3\
\
,\
\
4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],\
"jsontext": "{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}",\
"quotes": "&#34; \\u0022 %22 0x22 034 &#x22;",\
"\\/\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?" : "A key can be any string"\
},\
0.5 ,98.6\
,\
99.44\
,\
\
1066,\
1e1,\
0.1e1,\
1e-1,\
1e00,\
2e+00,\
2e-00,\
"rosebud"]';
/*****************************/
/* Tests begin here */
/*****************************/
// wrapped in a function to allow repeating tests with native behavior disabled
function addTests() {
suite.add(new TestCase({
name : "parse",
_should : {
error : {
test_failOnEmptyString : true,
test_failOnFunction : true,
test_failOnRegex : true,
test_failOnNew : true,
test_failOnUnquotedVal : true,
test_failOnUnquotedKey : true,
test_failOnUnclosedObject : true,
test_failOnUnclosedArray : true,
test_failOnExtraCommaInObject : true,
test_failOnDoubleExtraCommaInObject : true,
test_failOnExtraCommaInArray : true,
test_failOnDoubleExtraCommaInArray : true,
test_failOnMissingValue : true,
test_failOnCommaAfterClose : true,
test_failOnValueAfterClose : true,
test_failOnExtraClose : true,
test_failOnExpression : true,
test_failOnZeroPrefixedNumber : true,
test_failOnHex : true,
test_failOnIllegalBackslashEscape : true,
test_failOnMissingColon : true,
test_failOnDoubleColon : true,
test_failOnCommaInsteadOfColon : true,
test_failOnExtraClose : true,
test_failOnColonInsteadOfComma : true,
test_failOnSingleQuote : true,
test_failOnTabCharacter : true,
test_failOnLineBreakChar : true,
test_failOnMismatchedClose : true
}
},
test_emptyObject : function () {
Assert.isObject(JSON.parse("{}"));
},
test_emptyArray : function () {
Assert.isObject(JSON.parse("[]"));
},
test_JSONNatives : function () {
// Note: backslashes are double escaped to emulate string returned from
// server.
var data = JSON.parse('{"obj":{},"arr":[],"f":false,"t":true,"n":null,"int":12345,"fl":1.2345,"str":"String\\nwith\\tescapes"}');
Assert.isObject(data);
Assert.isObject(data.obj);
Assert.isArray(data.arr);
Assert.isNull(data.n);
Assert.areSame(false,data.f);
Assert.areSame(true,data.t);
Assert.areSame(12345,data.int);
Assert.areSame(1.2345,data.fl);
Assert.areSame("String\nwith\tescapes",data.str);
},
test_basics : function () {
var data = JSON.parse(JSON_STRING);
Assert.isArray(data);
Assert.areSame(20,data.length);
Assert.isString(data[0]);
Assert.isObject(data[1]);
Assert.isArray(data[1]["object with 1 member"]);
Assert.areSame(1,data[1]["object with 1 member"].length);
Assert.isNumber(data[4]);
Assert.isBoolean(data[5]);
Assert.isBoolean(data[6]);
Assert.isNull(data[7]);
Assert.areSame(1234567890,data[8].integer);
Assert.areSame(-9876.543210,data[8].real);
Assert.areSame(0.123456789e-12,data[8].e);
Assert.areSame(1.234567890e+34,data[8].E);
Assert.areSame(23456789012E66,data[8][""]);
Assert.areSame(0,data[8].zero);
Assert.areSame(1,data[8].one);
Assert.areSame(" ",data[8].space);
Assert.areSame('"',data[8].quote);
Assert.areSame("\\",data[8].backslash);
Assert.areSame("\b\f\n\r\t",data[8].controls);
Assert.areSame("/ & \/",data[8].slash);
Assert.areSame("abcdefghijklmnopqrstuvwxyz",data[8].alpha);
Assert.areSame("ABCDEFGHIJKLMNOPQRSTUVWXYZ",data[8].ALPHA);
Assert.areSame("0123456789",data[8].digit);
Assert.areSame("digit",data[8]["0123456789"]);
Assert.areSame(1234567890,data[8].integer);
Assert.areSame("`1~!@#$%^&*()_+-={':[,]}|;.</>?",data[8].special);
Assert.areSame("\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",data[8].hex);
Assert.areSame(true,data[8]["true"]);
Assert.areSame(false,data[8]["false"]);
Assert.isNull(data[8]["null"]);
Assert.isArray(data[8]["array"]);
Assert.isObject(data[8]["object"]);
Assert.areSame("http://www.JSON.org/",data[8].url);
Assert.areSame("// /* <!-- --",data[8].comment);
Assert.areSame(" ",data[8]["# -- --> */"]);
ArrayAssert.itemsAreSame([1,2,3,4,5,6,7],data[8][" s p a c e d "]);
ArrayAssert.itemsAreSame([1,2,3,4,5,6,7],data[8].compact);
Assert.areSame("{\"object with 1 member\":[\"array with 1 element\"]}",data[8].jsontext);
Assert.areSame("&#34; \u0022 %22 0x22 034 &#x22;",data[8].quotes);
Assert.areSame("A key can be any string",data[8]["\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]);
Assert.areSame(0.5,data[9]);
Assert.areSame(98.6,data[10]);
Assert.areSame(99.44,data[11]);
Assert.areSame(1066,data[12]);
Assert.areSame(1e1,data[13]);
Assert.areSame(0.1e1,data[14]);
Assert.areSame(1e-1,data[15]);
Assert.areSame(1e00,data[16]);
Assert.areSame(2e+00,data[17]);
Assert.areSame(2e-00,data[18]);
Assert.areSame("rosebud",data[19]);
},
test_nonObjectWrapper : function () {
//Assert.areSame('this is a string',JSON.parse('"this is a string"'));
//Assert.areSame(true,JSON.parse('true'));
//Assert.areSame(12345,JSON.parse("12345"));
//Assert.areSame(1.2345,JSON.parse("1.2345"));
Assert.areSame(null,JSON.parse("null"));
},
test_failOnEmptyString : function () {
// parse should throw an error
Assert.isString(JSON.parse(""));
YAHOO.log("Parsed empty string, but should have failed.","warn","TestRunner");
},
test_failOnFunction : function () {
// parse should throw an error
JSON.parse('{"fn":function(){}}');
YAHOO.log("Parsed a function, but should have failed.","warn","TestRunner");
},
test_failOnRegex : function () {
// parse should throw an error
JSON.parse('{"re":/abc/}');
YAHOO.log("Parsed regular expression literal, but should have failed.","warn","TestRunner");
},
test_failOnNew : function () {
// parse should throw an error
JSON.parse('{"dt":new Date()}');
YAHOO.log("Parsed <code>new Date()</code>, but should have failed.","warn","TestRunner");
},
test_failOnUnquotedVal : function () {
// parse should throw an error
JSON.parse('{"foo":bar}');
YAHOO.log("Parsed unquoted non-native value, but should have failed.","warn","TestRunner");
},
test_failOnUnquotedKey : function () {
// parse should throw an error
JSON.parse('{foo:1}');
YAHOO.log("Parsed unquoted object key, but should have failed.","warn","TestRunner");
},
test_failOnUnclosedObject : function () {
// parse should throw an error
JSON.parse('{"unclosed":"object"');
YAHOO.log("Parsed unclosed object, but should have failed.","warn","TestRunner");
},
test_failOnUnclosedArray : function () {
// parse should throw an error
JSON.parse('["unclosed array"');
YAHOO.log("Parsed unclosed array, but should have failed.","warn","TestRunner");
},
test_failOnExtraCommaInObject : function () {
// JS validator will allow, FF 3.1b2 native will allow. IE8 errors.
// eval will fail in IE6-7, but pass in others
// Trailing commas are invalid, but not a security risk, so acceptable
JSON.parse('{"extra":"comma",}');
YAHOO.log("Parsed object with extra comma, but should have failed.","warn","TestRunner");
throw new Error("Parsed object with extra comma, but should have failed.");
},
test_failOnDoubleExtraCommaInObject : function () {
// parse should throw an error
JSON.parse('{"extra":"commas",,}');
YAHOO.log("Parsed object with two extra commas, but should have failed.","warn","TestRunner");
},
test_failOnExtraCommaInArray : function () {
// Correct failure in IE6-8. FF accepts trailing commas without error
// Trailing commas are invalid, but not a security risk, so acceptable
JSON.parse('["extra","comma",]');
YAHOO.log("Parsed array with extra comma, but should have failed.","warn","TestRunner");
throw new Error("Parsed array with extra comma, but should have failed.");
},
test_failOnDoubleExtraCommaInArray : function () {
// Correct failure in IE6-8. FF accepts trailing commas without error
// Trailing commas are invalid, but not a security risk, so acceptable
JSON.parse('["extra","commas",,]');
YAHOO.log("Parsed array with two extra commas, but should have failed.","warn","TestRunner");
throw new Error("Parsed array with two extra commas, but should have failed.");
},
test_failOnMissingValue : function () {
// Correct failure in IE6-8. FF accepts trailing commas without error
// Trailing commas are invalid, but not a security risk, so acceptable
var data = JSON.parse('[,"<-- missing value"]');
YAHOO.log("Parsed array with missing value ("+data[0]+"), but should have failed.","warn","TestRunner");
throw new Error("Parsed array with missing value ("+data[0]+"), but should have failed.");
},
test_failOnCommaAfterClose : function () {
// parse should throw an error
JSON.parse('["comma","after","close"],');
YAHOO.log("Parsed comma after array close, but should have failed.","warn","TestRunner");
},
test_failOnValueAfterClose : function () {
// parse should throw an error
JSON.parse('{"misplaced":"value"}" after close"');
YAHOO.log("Parsed string value after object close, but should have failed.","warn","TestRunner");
},
test_failOnExtraClose : function () {
// parse should throw an error
var data = JSON.parse('{"foo":1}}');
YAHOO.log("Parsed extra closing curly brace on object, but should have failed.","warn","TestRunner");
YAHOO.log(JSON.stringify(data,null,4),"warn","TestLogger");
throw new Error("Parsed extra closing curly brace on object, but should have failed.");
},
test_failOnExpression : function () {
// parse should throw an error
JSON.parse('{"foo":1+2}');
YAHOO.log("Parsed expression, but should have failed.","warn","TestRunner");
},
test_failOnZeroPrefixedNumber : function () {
// Correct failure in IE8. FF accepts leading zeros without error
// Leading zeros are invalid, but not a security risk, so acceptable
JSON.parse('{"foo":01}');
YAHOO.log("Parsed zero prefixed number, but should have failed.","warn","TestRunner");
throw new Error("Parsed zero prefixed number, but should have failed.");
},
test_failOnHex : function () {
// parse should throw an error
JSON.parse('{"foo":0x14}');
YAHOO.log("Parsed hex value, but should have failed.","warn","TestRunner");
},
test_failOnIllegalBackslashEscape : function () {
// Correctly fails in all but IE8's native parse.
// The spec does not specify a limitation to the escape characters a
// decoder supports, so either is acceptable.
var data = JSON.parse('["illegal backslash escape: \\x15"]');
YAHOO.log("Parsed illegal backslash escape \\x15, but should have failed.","warn","TestRunner");
throw new Error("Parsed illegal backslash escape \\x15, but should have failed.");
},
test_failOnMissingColon : function () {
// parse should throw an error
JSON.parse('{"foo" null}');
YAHOO.log("Parsed object with missing colon, but should have failed.","warn","TestRunner");
},
test_failOnDoubleColon : function () {
// parse should throw an error
JSON.parse('{"foo"::1}');
YAHOO.log("Parsed double colon in object, but should have failed.","warn","TestRunner");
},
test_failOnCommaInsteadOfColon : function () {
// parse should throw an error
JSON.parse('{"foo",1}');
YAHOO.log("Parsed comma in place of colon, but should have failed.","warn","TestRunner");
},
test_failOnColonInsteadOfComma : function () {
// parse should throw an error
JSON.parse('["colon instead of":"comma"]');
YAHOO.log("Parsed colon in place of comma, but should have failed.","warn","TestRunner");
},
test_failOnSingleQuote : function () {
// parse should throw an error
JSON.parse("{'foo':1}");
YAHOO.log("Parsed single quote, but should have failed.","warn","TestRunner");
},
test_failOnLineBreakChar : function () {
// FF3.1b2 currently allows linebreak chars in native implementation
// Harmless, so permissable
JSON.parse("[\"line\nbreak\"]");
YAHOO.log("Parsed unescaped line break character, but should have failed.","warn","TestRunner");
throw new Error("Parsed unescaped line break character, but should have failed.");
},
test_failOnMismatchedClose : function () {
// parse should throw an error
JSON.parse('["mismatched"}');
YAHOO.log("Parsed curly brace close for array, but should have failed.","warn","TestRunner");
}
}));
suite.add(new TestCase({
name : "stringify",
_should : {
error : {
test_failOnStringifyCyclicalRef1 : true,
test_failOnStringifyCyclicalRef2 : true,
test_failOnStringifyCyclicalRef3 : true
}
},
test_stringifyNatives: function () {
Assert.areSame('[true,false,null,-0.12345,"string",{"object with one member":["array with one element"]}]',
JSON.stringify([true,false,null,-0.12345,"string",{"object with one member":["array with one element"]}]));
},
test_stringifyObject : function () {
// stringify sorts the keys
Assert.areSame('{"one":1,"two":true,"three":false,"four":null,"five":"String with\\nnewline","six":{"nested":-0.12345}}',
JSON.stringify({one:1,two:true,three:false,four:null,five:"String with\nnewline",six : {nested:-0.12345}}));
},
test_failOnStringifyCyclicalRef1 : function () {
var o = { key: 'value' };
o.recurse = o;
// Should throw an error
JSON.stringify(o);
YAHOO.log("Stringified Object with cyclical reference, but should have failed.","warn","TestRunner");
},
test_failOnStringifyCyclicalRef2 : function () {
var o = [1,2,3];
o[3] = o;
// Should throw an error
JSON.stringify(o);
YAHOO.log("Stringified Array with cyclical reference, but should have failed.","warn","TestRunner");
},
test_failOnStringifyCyclicalRef3 : function () {
var o = [1,2,3,{key:"value",nest:[4,5,6,{foo:"bar"}]}];
o[4] = o[3].x = o[3].nest[4] =
o[3].nest[3].y = o[3].nest[3].z = o;
// Should throw an error
JSON.stringify(o);
YAHOO.log("Stringified Object with cyclical reference, but should have failed.","warn","TestRunner");
},
test_stringifyFunction : function () {
Assert.areSame('{"arr":[null]}',
JSON.stringify({
functions : function (are,ignored) {},
arr : [ function () {} ]
}));
},
test_stringifyRegex : function () {
Assert.areSame('{"regex":{},"arr":[{}]}',
JSON.stringify({
regex : /are treated as objects/,
arr : [ new RegExp("in array") ]
}));
},
test_stringifyUndefined : function () {
Assert.areSame('{"arr":[null]}',
JSON.stringify({
undef : undefined,
arr : [ undefined ]
}));
},
test_stringifyDate : function () {
// native toJSON method should be called if available
var d = new Date(Date.UTC(1946,6,6)),
ref = d.toJSON ? d.toJSON() : "1946-07-06T00:00:00Z";
Assert.areSame('{"dt":"'+ref+'"}', JSON.stringify({dt : d}));
},
test_stringifyFormValue : function () {
function $(id) { return document.getElementById(id); }
var data = {
empty_text : $('empty_text').value,
text : $('text').value,
unchecked_radio : $('unchecked_radio').value,
checked_radio : $('checked_radio').value,
unchecked_box : $('unchecked_box').value,
checked_box : $('checked_box').value,
empty_textarea : $('empty_textarea').value,
textarea : $('textarea').value,
select : $('select').value,
multiple_select : $('multiple_select').value,
//button : $('button').value,
//button_with_value : $('button_with_value').value,
//button_submit : $('button_submit').value,
//button_submit_with_value: $('button_submit_with_value').value,
input_button : $('input_button').value,
input_submit : $('input_submit').value,
input_image : $('input_image').value
};
Assert.areSame('{'+
'"empty_text":"",'+
'"text":"text",'+
'"unchecked_radio":"unchecked",'+
'"checked_radio":"radio",'+
'"unchecked_box":"unchecked",'+
'"checked_box":"box",'+
'"empty_textarea":"",'+
'"textarea":"textarea",'+
'"select":"selected",'+
'"multiple_select":"selected",'+
//'"button":"",'+
//'"button_with_value":"button value",'+
//'"button_submit":"",'+
//'"button_submit_with_value":"submit button value",'+
'"input_button":"input button",'+
'"input_submit":"input submit",'+
'"input_image":"input image"}',
JSON.stringify(data));
}
}));
suite.add(new TestCase({
name : "whitelist",
test_emptyWhitelistArray : function () {
Assert.areSame('{}',
JSON.stringify({foo:1,bar:[1,2,3],baz:true},[]));
Assert.areSame('[1,true,null,{},["string",null,{}]]',
JSON.stringify([
1,true,null,{
foo : false,
bar : -0.12345
},["string",undefined,/some regex/]
],[]));
},
test_whitelistArray : function () {
Assert.areSame('{"foo":[1,2,3,{"foo":"FOO"}]}',
JSON.stringify({
foo : [
1,2,3,{
foo : "FOO",
baz : true
}
],
bar : [1,2,3],
baz : true
},["foo"]));
Assert.areSame('{"foo":[1,2,3,{"foo":"FOO","baz":true}],"baz":true}',
JSON.stringify({
foo : [
1,2,3,{
foo : "FOO",
baz : true
}
],
bar : [
1,2,3,{
foo : "FOO",
baz : true
}
],
baz : true},["foo","baz"]));
}
/*
// REMOVED for spec compatibility
test_whitelistObject : function () {
// (undocumented) supports an obj literal as well
Assert.areSame('{"foo":[1,2,3,{"foo":"FOO","baz":true}],"baz":true}',
JSON.stringify({
foo : [
1,2,3,{
foo : "FOO",
baz : true
}
],
bar : [
1,2,3,{
foo : "FOO",
baz : true
}
],
baz : true
}, {foo : true, baz : false})); // values ignored
}
*/
}));
suite.add(new TestCase({
name : "formatting",
test_falseyIndents : function () {
Assert.areSame('{"foo0":[2,{"bar":[4,{"baz":[6,{"deep enough":7}]}]}]}',
JSON.stringify({
foo0 : [ 2, {
bar : [ 4, {
baz : [ 6, {
"deep enough" : 7
}]
}]
}]
},null,0));
/* commented out because FF3.5 hangs on negative values
Assert.areSame('{"foo-4":[2,{"bar":[4,{"baz":[6,{"deep enough":7}]}]}]}',
JSON.stringify({
"foo-4" : [ 2, {
bar : [ 4, {
baz : [ 6, {
"deep enough" : 7
}]
}]
}]
},null,-4));
*/
Assert.areSame('{"foo_false":[2,{"bar":[4,{"baz":[6,{"deep enough":7}]}]}]}',
JSON.stringify({
foo_false : [ 2, {
bar : [ 4, {
baz : [ 6, {
"deep enough" : 7
}]
}]
}]
},null,false));
Assert.areSame('{"foo_empty":[2,{"bar":[4,{"baz":[6,{"deep enough":7}]}]}]}',
JSON.stringify({
foo_empty : [ 2, {
bar : [ 4, {
baz : [ 6, {
"deep enough" : 7
}]
}]
}]
},null,""));
},
test_indentNumber : function () {
Assert.areSame("{\n\
\"foo\": [\n\
2,\n\
{\n\
\"bar\": [\n\
4,\n\
{\n\
\"baz\": [\n\
6,\n\
{\n\
\"deep enough\": 7\n\
}\n\
]\n\
}\n\
]\n\
}\n\
]\n\
}",
JSON.stringify({
foo : [ 2, {
bar : [ 4, {
baz : [ 6, {
"deep enough" : 7
}]
}]
}]
},null,2));
},
test_indentString : function () {
Assert.areSame("{\n\
Xo\"foo\": [\n\
XoXo2,\n\
XoXo{\n\
XoXoXo\"bar\": [\n\
XoXoXoXo4,\n\
XoXoXoXo{\n\
XoXoXoXoXo\"baz\": [\n\
XoXoXoXoXoXo6,\n\
XoXoXoXoXoXo{\n\
XoXoXoXoXoXoXo\"deep enough\": 7\n\
XoXoXoXoXoXo}\n\
XoXoXoXoXo]\n\
XoXoXoXo}\n\
XoXoXo]\n\
XoXo}\n\
Xo]\n\
}",
JSON.stringify({
foo : [ 2, {
bar : [ 4, {
baz : [ 6, {
"deep enough" : 7
}]
}]
}]
},null,"Xo"));
}
}));
suite.add(new TestCase({
name : "reviver",
test_reviver : function () {
var data = JSON.parse(JSON_STRING, function (k,v) {
switch (k) {
case "alpha" : return "LOWER CASE";
case "ALPHA" : return "upper case";
case "true" :
case "false" :
case "null" : return undefined;
}
if (typeof v === 'number') {
return -(Math.abs(v|0));
}
if (l.isArray(v)) {
v[99] = "NEW ITEM";
}
return v;
});
Assert.areSame("LOWER CASE", data[8].alpha);
Assert.areSame("upper case", data[8].ALPHA);
Assert.isUndefined(data[8]["true"]);
Assert.isUndefined(data[8]["false"]);
Assert.isUndefined(data[8]["null"]);
Assert.areSame(-42, data[4]);
Assert.areSame(-1234567890, data[8].integer);
Assert.areSame(-9876, data[8].real);
Assert.areSame(-1, data[8].one);
Assert.areSame(-3, data[8][" s p a c e d "][2]);
Assert.areSame("NEW ITEM", data[99]);
Assert.areSame("NEW ITEM", data[8][" s p a c e d "][99]);
Assert.areSame("NEW ITEM", data[8].compact[99]);
}
}));
suite.add(new TestCase({
name : "toJSON",
test_toJSON_on_object: function () {
Assert.areSame('"toJSON"',
JSON.stringify({ toJSON: function () { return "toJSON" } }));
// TODO: complex object with toJSON
},
test_toJSON_on_proto: function () {
function A() {}
A.prototype.toJSON = function () { return "A" };
function B() {}
B.prototype = new A();
function C() {
this.x = "X";
this.y = "Y";
this.z = "Z";
}
C.prototype = new B();
Assert.areSame('"A"', JSON.stringify(new C()));
}
}));
suite.add(new TestCase({
name : "replacer",
test_replacer : function () {
// replacer applies to even simple value stringifications
Assert.areSame("20",
JSON.stringify(10,function (k,v) {
return typeof(v) === 'number' ? v * 2 : v;
}));
// replacer is applied to every nested property as well.
// can modify the host object en route
// executes from the context of the key:value container
Assert.areSame('{"num":2,"alpha":"ABC","obj":{"nested_num":100,"alpha":"abc"},"arr":[2,null,4]}',
JSON.stringify({
num: 1,
alpha: "abc",
ignore: "me",
change: "to a function",
toUpper: true,
obj: {
nested_num: 50,
undef: undefined,
alpha: "abc"
},
arr: [1, 7, 2]
}
,function (k,v) {
var t = typeof v;
if (k === 'change') {
// this property should then be ignored
return function () {};
} else if (k === 'ignore') {
// this property should then be ignored
return undefined;
} else if (t === 'number') {
// undefined returned to arrays should become null
return v % 7 ? v * 2 : undefined;
// this refers to the object containing the key:value
} else if (t === 'string' && (this.toUpper)) {
// modify the object during stringification
delete this.toUpper;
return v.toUpperCase();
} else {
return v;
}
}));
},
// replacer works in conjunction with indent
test_replacerPlusIndent : function () {
Assert.areSame("{\n_\"num\": 2,\n_\"alpha\": \"ABC\",\n_\"obj\": {\n__\"nested_num\": 100,\n__\"alpha\": \"abc\"\n_},\n_\"arr\": [\n__2,\n__null,\n__4\n_]\n}",
JSON.stringify({
num: 1,
alpha: "abc",
ignore: "me",
change: "to a function",
toUpper: true,
obj: {
nested_num: 50,
undef: undefined,
alpha: "abc"
},
arr: [1, 7, 2]
}
,function (k,v) {
var t = typeof v;
if (k === 'change') {
// this property should then be ignored
return function () {};
} else if (k === 'ignore') {
// this property should then be ignored
return undefined;
} else if (t === 'number') {
// undefined returned to arrays should become null
return v % 7 ? v * 2 : undefined;
// this refers to the object containing the key:value
} else if (t === 'string' && (this.toUpper)) {
// modify the object during stringification
delete this.toUpper;
return v.toUpperCase();
} else {
return v;
}
},'_'));
},
test_replacer_after_toJSON : function () {
Assert.areSame('{"a":"ABC"}',
JSON.stringify({a:{ toJSON: function () { return "abc"; } } },
function (k,v) {
return typeof v === 'string' ? v.toUpperCase() : v;
}));
// Date instances in ES5 have toJSON that outputs toISOString, which
// means the replacer should never receive a Date instance
var str = JSON.stringify([new Date()], function (k,v) {
return (v instanceof Date) ? "X" : v;
});
Assert.areSame(-1, str.indexOf("X"), "Date incorrectly received by replacer");
},
test_replacer_returning_Date : function () {
var d = new Date(),
ref = JSON.stringify(d);
Assert.areSame('{"dt":'+ref+',"date_from_replacer":{}}',
JSON.stringify({ dt: d, date_from_replacer: 1 },
function (k,v) {
return typeof v === 'number' ? d : v;
}));
}
}));
/*
suite.add(new TestCase({
name : "unicode",
test_ : function () {
Assert.areSame();
},
}));
*/
}
addTests();
// If native JSON is available, run the tests again without native calls
if (JSON.useNativeParse) {
suite.add(new TestCase({
test_disableNative : function () {
JSON.useNativeParse = false;
JSON.useNativeStringify = false;
YAHOO.log("Rerunning tests without native JSON API","section","TestRunner");
}
}));
addTests();
}
var logger = new TestLogger("log");
logger.hideCategory('info');
logger.formatMsg = function (e) {
if (e.category === 'section') {
return "<h3>"+e.msg+"</h3>";
} else if (e.category === "break") {
return "<br>";
} else {
return TestLogger.prototype.formatMsg.call(this,e);
}
};
YAHOO.log("Tests","section","TestRunner");
TestRunner.add(suite);
TestRunner.run();
})();
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js"></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,189 +0,0 @@
<html>
<head>
<title>YUI Logger Tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
</head>
<body class="yui-skin-sam">
<h1>Logger Tests</h1>
<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
<script type="text/javascript">
(function() {
var Dom=YAHOO.util.Dom,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert,
DateAssert=YAHOO.util.DateAssert,
UserAction=YAHOO.util.UserAction,
TestCase = YAHOO.tool.TestCase,
TestLogger = YAHOO.tool.TestLogger,
TestRunner = YAHOO.tool.TestRunner,
TestSuite = YAHOO.tool.TestSuite,
Logger = YAHOO.widget.Logger,
LogReader = YAHOO.widget.LogReader,
LogWriter = YAHOO.widget.LogWriter;
function LoggerTestCase(template) {
LoggerTestCase.superclass.constructor.call(this, template);
};
YAHOO.lang.extend(LoggerTestCase, TestCase);
var loggerTemplate = {
name: "Logger Tests",
testCreateNewCategory: function() {
Logger._createNewCategory("testcategory");
Assert.areSame(Logger.categories[Logger.categories.length-1], "testcategory", "Could not find new category");
}
};
var loggerTest = new LoggerTestCase(loggerTemplate);
function LogReaderTestCase(template) {
LogReaderTestCase.superclass.constructor.call(this, template);
this.container = null;
};
YAHOO.lang.extend(LogReaderTestCase, TestCase);
LogReaderTestCase.prototype.setUp = function() {
this.container = document.createElement("div");
this.container.id = "testLogReaderContainer";
document.body.appendChild(this.container);
};
LogReaderTestCase.prototype.tearDown = function() {
if (this.container != null) {
YAHOO.util.Event.purgeElement(this.container, true);
document.body.removeChild(this.container);
}
};
LogReaderTestCase.prototype.createInstance = function(oConfig) {
var lr = new LogReader(this.container, oConfig);
return lr;
};
var logreaderTemplate = {
name: "LogReader Tests",
testConstruction: function() {
var lr = this.createInstance();
Assert.isObject(lr, "Failed to create basic instance");
Assert.isInstanceOf(LogReader, lr, "Failed to create basic instance");
lr = null;
}
};
var logreaderTest = new LogReaderTestCase(logreaderTemplate);
function LogWriterTestCase(template) {
LogWriterTestCase.superclass.constructor.call(this, template);
};
YAHOO.lang.extend(LogWriterTestCase, TestCase);
LogWriterTestCase.prototype.setUp = function() {
};
LogWriterTestCase.prototype.tearDown = function() {
};
LogWriterTestCase.prototype.createInstance = function(oConfig) {
var lw = new LogWriter("testlogwriter", oConfig);
return lw;
};
var logwriterTemplate = {
name: "LogWriter Tests",
testConstruction: function() {
var lw = this.createInstance();
Assert.isObject(lw, "Failed to create basic instance");
Assert.isInstanceOf(LogWriter, lw, "Failed to create basic instance");
// bug 1699208
Assert.areSame("testlogwriter", lw.getSource());
lw.setSource("foo");
Assert.areSame("foo", lw.getSource());
lr = null;
}
};
var logwriterTest = new LogWriterTestCase(logwriterTemplate);
YAHOO.util.Event.addListener(window, "load", function() {
var logger = new TestLogger();
var loggersuite = new TestSuite("Logger Test Suite");
loggersuite.add(loggerTest);
loggersuite.add(logreaderTest);
loggersuite.add(logwriterTest);
loggersuite.add(new TestCase({
name : "LogReader test cont.",
setUp : function () {
this.full = new LogReader();
this.noFooter = new LogReader(null, {
footerEnabled: false
});
},
tearDown: function () {
delete this.full;
delete this.noFooter;
},
testPauseResume : function () {
try {
this.full.pause();
this.full.resume();
}
catch (e) {
Assert.fail(e);
}
try {
this.noFooter.pause();
this.noFooter.resume();
}
catch (e) {
Assert.fail(e);
}
}
}));
// for bug 1987607
loggersuite.add(new TestCase({
name : "Console logging test",
testConsoleLog : function () {
if (!YAHOO.env.ua.ie) {
YAHOO.widget.Logger.enableBrowserConsole();
YAHOO.log("Console logging info entry","info");
YAHOO.log("Console logging warn entry","warn");
YAHOO.log("Console logging error entry","error");
YAHOO.widget.Logger.disableBrowserConsole();
YAHOO.log("CHECK CONSOLE FOR MESSAGES","warn","TestLogger");
}
}
}));
TestRunner.add(loggersuite);
YAHOO.util.Event.addListener("btnRun", "click", function(){TestRunner.run();});
YAHOO.util.Dom.get("btnRun").disabled = false;
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
}
TestRunner.run();
});
})();
</script>
</body>
</html>

View file

@ -1,86 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Menu keepopen Configuration Property Test</title>
<link type="text/css" rel="stylesheet" href="../../../build/menu/assets/skins/sam/menu.css">
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu.js"></script>
<script type="text/javascript">
/*
Initialize and render the Menu when the element it is to be
rendered into is ready to be scripted.
*/
YAHOO.util.Event.onAvailable("rendertarget", function () {
/*
Instantiate a Menu: The first argument passed to the constructor
is the id for the Menu element to be created, the second is an
object literal of configuration properties.
*/
var oMenu = new YAHOO.widget.Menu("basicmenu", { fixedcenter: true, keepopen: true });
/*
Add items to the Menu instance by passing an array of object literals
(each of which represents a set of YAHOO.widget.MenuItem
configuration properties) to the "addItems" method.
*/
oMenu.addItems([
{ text: "MenuItem 1", submenu: {
id: "submenu-1", itemdata: [
"MenuItem 1",
"MenuItem 2",
"MenuItem 3",
"MenuItem 4",
]
} },
"MenuItem 2",
"MenuItem 3",
"MenuItem 4"
]);
/*
Since this Menu instance is built completely from script, call the
"render" method passing in the DOM element that it should be
appended to.
*/
oMenu.render("rendertarget");
YAHOO.util.Event.addListener("menutoggle", "click", oMenu.show, null, oMenu);
});
</script>
</head>
<body class="yui-skin-sam">
<h1>Menu keepopen Configuration Property Test</h1>
<p>Test case to demonstrate fix for <a href="http://yuilibrary.com/projects/yui2/ticket/2512349">bug 2512349</a>.</p>
<button id="menutoggle" type="button">Show Menu</button>
<div id="rendertarget"></div>
</body>
</html>

View file

@ -1,86 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Menu keepopen Configuration Property Test</title>
<link type="text/css" rel="stylesheet" href="http://yui.yahooapis.com/2.7.0/build/menu/assets/skins/sam/menu.css">
<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/container/container_core-min.js"></script>
<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/menu/menu.js"></script>
<script type="text/javascript">
/*
Initialize and render the Menu when the element it is to be
rendered into is ready to be scripted.
*/
YAHOO.util.Event.onAvailable("rendertarget", function () {
/*
Instantiate a Menu: The first argument passed to the constructor
is the id for the Menu element to be created, the second is an
object literal of configuration properties.
*/
var oMenu = new YAHOO.widget.Menu("basicmenu", { fixedcenter: true, keepopen: true });
/*
Add items to the Menu instance by passing an array of object literals
(each of which represents a set of YAHOO.widget.MenuItem
configuration properties) to the "addItems" method.
*/
oMenu.addItems([
{ text: "MenuItem 1", submenu: {
id: "submenu-1", itemdata: [
"MenuItem 1",
"MenuItem 2",
"MenuItem 3",
"MenuItem 4",
]
} },
"MenuItem 2",
"MenuItem 3",
"MenuItem 4"
]);
/*
Since this Menu instance is built completely from script, call the
"render" method passing in the DOM element that it should be
appended to.
*/
oMenu.render("rendertarget");
YAHOO.util.Event.addListener("menutoggle", "click", oMenu.show, null, oMenu);
});
</script>
</head>
<body class="yui-skin-sam">
<h1>Menu keepopen Configuration Property Test</h1>
<p>Test case to reproduce <a href="http://yuilibrary.com/projects/yui2/ticket/2512349">bug 2512349</a>.</p>
<button id="menutoggle" type="button">Show Menu</button>
<div id="rendertarget"></div>
</body>
</html>

View file

@ -1,116 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Button activeElement Test</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css" />
<link rel="stylesheet" type="text/css" href="../../../build/button/assets/skins/sam/button.css" />
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<style type="text/css">
#button-example-form fieldset {
border: 2px groove #ccc;
margin: .5em;
padding: .5em;
}
#menubutton3menu,
#menubutton4menu {
position: absolute;
visibility: hidden;
border: solid 1px #000;
padding: .5em;
background-color: #ccc;
}
#button-example-form-postdata {
border: dashed 1px #666;
background-color: #ccc;
padding: 1em;
}
#button-example-form-postdata h2 {
margin: 0 0 .5em 0;
padding: 0;
border: none;
}
</style>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript" src="../../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../../build/button/button-min.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop-min.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript">
(function () {
var Event = YAHOO.util.Event,
Dom = YAHOO.util.Dom;
Event.onDOMReady(function () {
var logReader = new YAHOO.widget.LogReader();
var oMenu = new YAHOO.widget.Menu("menu-1", { fixedcenter: true, visible: true });
oMenu.addItems([
"MenuItem 1",
"MenuItem 2",
"MenuItem 3",
]);
oMenu.render(document.body);
Event.on("text-field-1", "keydown", function (event) {
YAHOO.log("keydown: " + Event.getCharCode(event));
});
});
}());
</script>
</head>
<body class=" yui-skin-sam">
<h1>Button activeElement Test</h1>
<p>Test case for <a href="http://yuilibrary.com/projects/yui2/ticket/2528245">bug 2528245</a>.</p>
<p>
Clicking on the text box when the Button's Menu is open should result in the Menu closing,
the Button blurring and the text box being focused and becoming the activeElement.
After mousing down on the text box, it should have a black outline and
should fire key events.
</p>
<form id="button-example-form" name="button-example-form" method="post">
<input type="text" id="text-field-1" name="text-field-1">
</form>
</body>
</html>

View file

@ -1,103 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Menu Right Click Test</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css" />
<style type="text/css">
/*
Position and hide the Menu instance to prevent a flash of unstyled
content when the page is loading.
*/
div.yuimenu {
position: absolute;
visibility: hidden;
}
</style>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript">
/*
Initialize and render the Menu when its elements are ready
to be scripted.
*/
YAHOO.util.Event.onContentReady("basicmenu", function () {
/*
Instantiate a Menu: The first argument passed to the
constructor is the id of the element in the page
representing the Menu; the second is an object literal
of configuration properties.
*/
var oMenu = new YAHOO.widget.Menu("basicmenu", { fixedcenter: true });
/*
Call the "render" method with no arguments since the
markup for this Menu instance is already exists in the page.
*/
oMenu.render();
// Bind a "click" event handler to the Menu to test that
// the "click" event doesn't fire when the user right clicks
// on the the Menu instance.
oMenu.subscribe("click", function () {
alert("If you see this alert the bug is not fixed.");
});
YAHOO.util.Event.addListener("menutoggle", "click", oMenu.show, null, oMenu);
});
</script>
</head>
<body class=" yui-skin-sam">
<h1>Menu Right Click Test</h1>
<p>
This is a test case for <a href="http://yuilibrary.com/projects/yui2/ticket/2527869" title="#2527869 Menu click event incorrectly called for right click in Firefox :: YUI 2.x :: YUI Library">bug 2527869</a>.
</p>
<p>
Right click on the Menu using Firefox for Windows.
The Menu should remain visible, and the browser's context menu should
appear. If an alert pops up, the bug is not fixed.
</p>
<button id="menutoggle" type="button">Show Menu</button>
<div id="basicmenu" class="yuimenu">
<div class="bd">
<ul class="first-of-type">
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://mail.yahoo.com">Yahoo! Mail</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://addressbook.yahoo.com">Yahoo! Address Book</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://calendar.yahoo.com">Yahoo! Calendar</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://notepad.yahoo.com">Yahoo! Notepad</a></li>
</ul>
</div>
</div>
</body>
</html>

View file

@ -1,118 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>YUI MenuBar test</title>
<link rel="stylesheet" type="text/css" href="../../../build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css">
</head>
<body class="yui-skin-sam">
<div class="yuimenubar" id="h-menu">
<div class="bd">
<ul class="first-of-type">
<li class="yuimenubaritem first-of-type" id="h-menu-file">
<a href="#" class="yuimenubaritemlabel">File</a>
<div class="yuimenu">
<div class="bd">
<ul class="first-of-type">
<li class="yuimenuitem first-of-type" id="h-menu-file-new">
<a href="#" class="yuimenuitemlabel">New...</a>
</li>
<li class="yuimenuitem" id="h-menu-file-open">
<a href="#" class="yuimenuitemlabel">Open...</a>
</li>
<li class="yuimenuitem" id="h-menu-file-close">
<a href="#" class="yuimenuitemlabel">Close</a>
</li>
</ul>
<ul>
<li class="yuimenuitem first-of-type" id="h-menu-file-save">
<a href="#" class="yuimenuitemlabel">Save</a>
</li>
<li class="yuimenuitem" id="h-menu-file-saveas">
<a href="#" class="yuimenuitemlabel">Save As...</a>
</li>
</ul>
<ul>
<li class="yuimenuitem first-of-type" id="h-menu-file-manage">
<a href="#" class="yuimenuitemlabel">Manage Docs...</a>
</li>
<li class="yuimenuitem" id="h-menu-file-print">
<a href="#" class="yuimenuitemlabel">Print...</a>
</li>
<li class="yuimenuitem" id="h-menu-file-email">
<a href="#" class="yuimenuitemlabel">Email...</a>
</li>
</ul>
</div>
</div>
</li>
<li class="yuimenubaritem" id="h-menu-searches">
<a href="#h-menu-searches-submenu" class="yuimenubaritemlabel">Searches</a>
<div class="yuimenu" id="h-menu-searches-submenu">
<div class="bd">
<ul class="first-of-type">
<li class="yuimenuitem query first-of-type">
<a target="_blank" href="http://facthotcover.corp.search.yahoo.com/search?ei=UTF-8&amp;p=la+ponderosa" class="yuimenuitemlabel">la ponderosa</a>
</li>
</ul>
</div>
</div>
</li>
<li class="yuimenubaritem" id="h-menu-help">
<a href="#" class="yuimenubaritemlabel">Help</a>
<div class="yuimenu">
<div class="bd">
<ul class="first-of-type">
<li class="yuimenuitem" id="h-menu-help-about">
<a target="_blank" href="http://help.yahoo.com/l/us/yahoo/search/searchpad/;_ylt=AwpIeSAU17pJtOYA6TZXNyoA" class="yuimenuitemlabel">About Search Pad</a>
</li>
<li class="yuimenuitem" id="h-menu-help-feedback">
<a target="_blank" href="http://help.yahoo.com/l/us/yahoo/search/searchpad.html;_ylt=AwpIeSAU17pJtOYA6jZXNyoA" class="yuimenuitemlabel">Send Feedback</a>
</li>
</ul>
</div>
</div>
</li>
</ul>
</div>
</div>
<form action="./" method="get" style="margin-top: 200px;">
<p>
<textarea id="log" rows="10" cols="50"></textarea>
</p>
<p>
<label>MenuBar clicks:</label>
<input type="button" id="add" value="Subscribe">
<input type="button" id="remove" value="Unsubscribe">
</p>
</form>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core-min.js"></script>
<script type="text/javascript" src="../../../build/menu/menu-min.js"></script>
<script type="text/javascript">
(function () {
function handleClick(e, args) {
YAHOO.util.Dom.get('log').value += "Click: " + args[1].id + "\n";
}
var menubar = new YAHOO.widget.MenuBar('h-menu');
menubar.render();
YAHOO.util.Event.on('add', 'click', function () {
menubar.subscribe('click', handleClick);
YAHOO.util.Dom.get('log').value += "Subscribed to click events\n";
});
YAHOO.util.Event.on('remove', 'click', function () {
menubar.unsubscribe('click', handleClick);
YAHOO.util.Dom.get('log').value += "Unsubscribed from click events\n";
});
})();
</script>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,242 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Example: Website Top Nav With Submenus Built From Markup (YUI Library)</title>
<link rel="stylesheet" type="text/css" href="../../../build/reset-fonts-grids/reset-fonts-grids.css">
<link rel="stylesheet" type="text/css" href="../../../build/menu/assets/skins/sam/menu.css">
<style type="text/css">
a:visited {
color: yellow;
}
div.yui-b p {
margin: 0 0 .5em 0;
color: #999;
}
div.yui-b p strong {
font-weight: bold;
color: #000;
}
div.yui-b p em {
color: #000;
}
h1 {
font-weight: bold;
margin: 0 0 1em 0;
padding: .25em .5em;
background-color: #ccc;
}
#productsandservices {
margin: 0 0 10px 0;
}
</style>
<script type="text/javascript" src="../../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../../build/container/container_core.js"></script>
<script type="text/javascript" src="../../../build/menu/menu.js"></script>
<script type="text/javascript">
/*
Initialize and render the MenuBar when its elements are ready
to be scripted.
*/
YAHOO.util.Event.onContentReady("productsandservices", function () {
/*
Instantiate a MenuBar: The first argument passed to the constructor
is the id for the Menu element to be created, the second is an
object literal of configuration properties.
*/
var oMenuBar = new YAHOO.widget.MenuBar("productsandservices", {
autosubmenudisplay: true,
hidedelay: 750,
lazyload: true });
/*
Call the "render" method with no arguments since the
markup for this MenuBar instance is already exists in
the page.
*/
oMenuBar.render();
oMenuBar.getItem(1).cfg.setProperty('disabled', true);
});
</script>
</head>
<body class="yui-skin-sam" id="yahoo-com">
<div id="doc" class="yui-t1">
<div id="hd">
<!-- start: your content here -->
<h1>Example: Website Top Nav With Submenus Built From Markup (YUI Library)</h1>
<!-- end: your content here -->
</div>
<div id="bd">
<!-- start: primary column from outer template -->
<div id="yui-main">
<div class="yui-b">
<!-- start: stack grids here -->
<div id="productsandservices" class="yuimenubar yuimenubarnav">
<div class="bd">
<ul class="first-of-type">
<li class="yuimenubaritem first-of-type"><a class="yuimenubaritemlabel" href="#communication">Communication</a>
<div id="communication" class="yuimenu">
<div class="bd">
<ul>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://360.yahoo.com">360&#176;</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://alerts.yahoo.com">Alerts</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://avatars.yahoo.com">Avatars</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://groups.yahoo.com">Groups</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://promo.yahoo.com/broadband/">Internet Access</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="#">PIM</a>
<div id="pim" class="yuimenu">
<div class="bd">
<ul class="first-of-type">
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://mail.yahoo.com">Yahoo! Mail</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://addressbook.yahoo.com">Yahoo! Address Book</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://calendar.yahoo.com">Yahoo! Calendar</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://notepad.yahoo.com">Yahoo! Notepad</a></li>
</ul>
</div>
</div>
</li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://members.yahoo.com">Member Directory</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://messenger.yahoo.com">Messenger</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://mobile.yahoo.com">Mobile</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://www.flickr.com">Flickr Photo Sharing</a></li>
</ul>
</div>
</div>
</li>
<li class="yuimenubaritem"><a class="yuimenubaritemlabel" href="http://shopping.yahoo.com">Shopping</a>
<div id="shopping" class="yuimenu">
<div class="bd">
<ul>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://auctions.shopping.yahoo.com">Auctions</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://autos.yahoo.com">Autos</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://classifieds.yahoo.com">Classifieds</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://shopping.yahoo.com/b:Flowers%20%26%20Gifts:20146735">Flowers &#38; Gifts</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://realestate.yahoo.com">Real Estate</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://travel.yahoo.com">Travel</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://wallet.yahoo.com">Wallet</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://yp.yahoo.com">Yellow Pages</a></li>
</ul>
</div>
</div>
</li>
<li class="yuimenubaritem"><a class="yuimenubaritemlabel" href="http://entertainment.yahoo.com">Entertainment</a>
<div id="entertainment" class="yuimenu">
<div class="bd">
<ul>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://fantasysports.yahoo.com">Fantasy Sports</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://games.yahoo.com">Games</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://www.yahooligans.com">Kids</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://music.yahoo.com">Music</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://movies.yahoo.com">Movies</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://music.yahoo.com/launchcast">Radio</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://travel.yahoo.com">Travel</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://tv.yahoo.com">TV</a></li>
</ul>
</div>
</div>
</li>
<li class="yuimenubaritem"><a class="yuimenubaritemlabel" href="#information">Information</a>
<div id="information" class="yuimenu">
<div class="bd">
<ul>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://downloads.yahoo.com">Downloads</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://finance.yahoo.com">Finance</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://health.yahoo.com">Health</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://local.yahoo.com">Local</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://maps.yahoo.com">Maps &#38; Directions</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://my.yahoo.com">My Yahoo!</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://news.yahoo.com">News</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://search.yahoo.com">Search</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://smallbusiness.yahoo.com">Small Business</a></li>
<li class="yuimenuitem"><a class="yuimenuitemlabel" href="http://weather.yahoo.com">Weather</a></li>
</ul>
</div>
</div>
</li>
</ul>
</div>
</div>
<p id="note"><strong>NOTE:</strong> <em>This example demonstrates how to add submenus to a menu bar using existing markup.</em></p>
<form name="example">
<select name="test">
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
</select>
</form>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sit amet metus. Nunc quam elit, posuere nec, auctor in, rhoncus quis, dui. Aliquam erat volutpat. Ut dignissim, massa sit amet dignissim cursus, quam lacus feugiat dolor, id aliquam leo tortor eget odio. Pellentesque orci arcu, eleifend at, iaculis sit amet, posuere eu, lorem. Aliquam erat volutpat. Phasellus vulputate. Vivamus id erat. Nulla facilisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nunc gravida. Ut euismod, tortor eget convallis ullamcorper, arcu odio egestas pede, ut ornare urna elit vitae mauris. Aenean ullamcorper eros a lacus. Curabitur egestas tempus lectus. Donec et lectus et purus dapibus feugiat. Sed sit amet diam. Etiam ipsum leo, facilisis ac, rutrum nec, dignissim quis, tellus. Sed eleifend.</p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sit amet metus. Nunc quam elit, posuere nec, auctor in, rhoncus quis, dui. Aliquam erat volutpat. Ut dignissim, massa sit amet dignissim cursus, quam lacus feugiat dolor, id aliquam leo tortor eget odio. Pellentesque orci arcu, eleifend at, iaculis sit amet, posuere eu, lorem. Aliquam erat volutpat. Phasellus vulputate. Vivamus id erat. Nulla facilisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nunc gravida. Ut euismod, tortor eget convallis ullamcorper, arcu odio egestas pede, ut ornare urna elit vitae mauris. Aenean ullamcorper eros a lacus. Curabitur egestas tempus lectus. Donec et lectus et purus dapibus feugiat. Sed sit amet diam. Etiam ipsum leo, facilisis ac, rutrum nec, dignissim quis, tellus. Sed eleifend.</p>
<!-- end: stack grids here -->
</div>
</div>
<!-- end: primary column from outer template -->
<!-- start: secondary column from outer template -->
<div class="yui-b">
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sit amet metus. Nunc quam elit, posuere nec, auctor in, rhoncus quis, dui. Aliquam erat volutpat. Ut dignissim, massa sit amet dignissim cursus, quam lacus feugiat dolor, id aliquam leo tortor eget odio. Pellentesque orci arcu, eleifend at, iaculis sit amet, posuere eu, lorem. Aliquam erat volutpat. Phasellus vulputate. Vivamus id erat. Nulla facilisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Nunc gravida. Ut euismod, tortor eget convallis ullamcorper, arcu odio egestas pede, ut ornare urna elit vitae mauris. Aenean ullamcorper eros a lacus. Curabitur egestas tempus lectus. Donec et lectus et purus dapibus feugiat. Sed sit amet diam. Etiam ipsum leo, facilisis ac, rutrum nec, dignissim quis, tellus. Sed eleifend.</p>
</div>
<!-- end: secondary column from outer template -->
</div>
<div id="ft">
<p>FOOTER: Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sit amet metus. Nunc quam elit, posuere nec, auctor in, rhoncus quis, dui. Aliquam erat volutpat. Ut dignissim, massa sit amet dignissim cursus, quam lacus feugiat.</p>
</div>
</div>
</body>
</html>

View file

@ -1,206 +0,0 @@
<!doctype html>
<html>
<head>
<title>Paginator Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css">
<link type="text/css" rel="stylesheet" href="../../../build/paginator/assets/skins/sam/paginator.css">
<style type="text/css" class="highlight-ignore">
h1 {
font: normal 125%/1.4 Arial, sans-serif;
}
.yui-log {
display: inline;
float: right;
position: relative;
}
.yui-log .yui-log-bd {
height: 525px;
}
.highlight-example {
display: inline;
float: left;
width: 650px;
}
.highlight-example h2 {
display: none;
}
</style>
</head>
<body class="yui-skin-sam">
<h1>Paginator Tests</h1>
<input type="button" id="go" value="recordOffset -= 3">
<input type="button" id="del" value="totalRecords -= 3">
<input type="button" id="add" value="totalRecords += 3">
<div id="log"></div>
<div id="ex"></div>
<div id="testbed"></div>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest-min.js"></script>
<script type="text/javascript" src="../../../build/element/element-debug.js"></script>
<script type="text/javascript" src="../../../build/paginator/paginator-debug.js"></script>
<script type="text/javascript">
(function () {
var t = YAHOO.tool,
u = YAHOO.util,
TestSuite = t.TestSuite,
TestCase = t.TestCase,
TestLogger = t.TestLogger,
TestRunner = t.TestRunner,
Event = u.Event,
Dom = u.Dom,
Assert = u.Assert,
AAssert = u.ArrayAssert,
OAssert = u.ObjectAssert,
Paginator = YAHOO.widget.Paginator,
testbed = Dom.get('testbed'),
suite;
suite = new TestSuite("Paginator Tests");
suite.add(new TestCase({
name : "Construction",
testNoParams : function () {
this.paginator = new YAHOO.widget.Paginator();
Assert.isInstanceOf(YAHOO.widget.Paginator,this.paginator,"Constructor did not return a Paginator instance");
Assert.areSame(0,this.paginator.get('rowsPerPage'),"rowsPerPage attribute value did not default to 0");
},
testRowsPerPage : function () {
this.paginator = new YAHOO.widget.Paginator({ rowsPerPage : 10 });
Assert.isInstanceOf(YAHOO.widget.Paginator,this.paginator,"Constructor did not return a Paginator instance");
Assert.areSame(10,this.paginator.get('rowsPerPage'),"rowsPerPage assignment in constructor did not take");
Assert.areSame(0,this.paginator.get('totalRecords'),"totalRecords did not default to 0");
}
}));
suite.add(new TestCase({
name : "Render",
setUp : function () {
this.paginator = new YAHOO.widget.Paginator({
rowsPerPage : 10,
totalRecords : 50
});
},
tearDown : function () {
if (this.paginator && this.paginator.destroy) {
this.paginator.destroy();
}
Event.purgeElement(testbed);
testbed.innerHTML = '';
},
testRender : function () {
testbed.innerHTML = '';
Assert.areEqual("",testbed.innerHTML);
this.paginator.set('containers',[testbed]);
this.paginator.render();
Assert.areSame(true,this.paginator.get('rendered'));
Assert.areNotEqual("",testbed.innerHTML);
},
testMultipleContainers : function () {
}
}));
suite.add(new TestCase({
name : "Templates",
setUp : function () {
this.paginator = new YAHOO.widget.Paginator({
rowsPerPage : 10,
totalRecords : 50
});
},
tearDown : function () {
if (this.paginator && this.paginator.destroy) {
this.paginator.destroy();
}
Event.purgeElement(testbed);
testbed.innerHTML = '';
},
testDefaultTemplate : function () {
},
testRPPTemplate : function () {
},
testChangePropagatesToComponents : function () {
}
}));
/*
Needed tests
page links - current is centered
first/next deactivated when on 1
*/
YAHOO.util.Event.onDOMReady(function () {
var logger = new TestLogger("log");
logger.hideCategory('info');
var p = new YAHOO.widget.Paginator({
rowsPerPage :17,
totalRecords :10,
containers :'ex',
template : YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
pageLinks : 5,
rowsPerPageOptions : [10,17,33],
alwaysVisible : false
});
p.subscribe('changeRequest', function (state) {
this.setState(state);
});
p.subscribe('totalRecordsChange',function (e) {
if (window.console) {
console.log("totalRecords changed from "+e.prevValue+" to "+e.newValue);
}
});
p.subscribe('pageChange',function (e) {
if (window.console) {
console.log("Page changed from "+e.prevValue+" to page "+e.newValue);
}
});
p.render();
YAHOO.util.Event.on('go','click',function (e) {
YAHOO.util.Event.preventDefault(e);
p.set('recordOffset',Math.max(0,p.get('recordOffset') - 3));
});
YAHOO.util.Event.on('del','click',function (e) {
YAHOO.util.Event.preventDefault(e);
p.set('totalRecords',Math.max(0,p.get('totalRecords') - 3));
});
YAHOO.util.Event.on('add','click',function (e) {
YAHOO.util.Event.preventDefault(e);
p.set('totalRecords',p.get('totalRecords') + 3);
});
TestRunner.add(suite);
TestRunner.run();
});
})();
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js"></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,143 +0,0 @@
<!doctype html>
<html>
<head>
<title>Paginator Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/paginator/assets/skins/sam/paginator.css">
<style type="text/css" class="highlight-ignore">
h1 {
font: normal 125%/1.4 Arial, sans-serif;
}
</style>
</head>
<body class="yui-skin-sam">
<h1>Paginator Examples</h1>
<h2>rpp:10, tot:93</h2>
<div id="p1"></div>
<h2>rpp:10, tot:3</h2>
<div id="p2"></div>
<h2>rpp:10, tot:93, pageLinks: 5</h2>
<div id="p3"></div>
<h2>rpp:10, tot:93, recOff: 20, template: RPP</h2>
<div id="p4"></div>
<h2>rpp:10, tot:133, template: (custom)</h2>
<div id="p5"></div>
<h2>rpp:10, tot:93, ui.* manual render only</h2>
<div id="p6"></div>
<h2>rpp:10, tot:93, render() + ui.* manual render</h2>
<div id="p7-1"></div>
<div id="p7"></div>
<h2>rpp:10, tot:93, progressive enhance container and specific el</h2>
<div id="p8-container"></div>
<span id="p8-component" class="yui-pg-ui-NextPageLink"></span>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/element/element.js"></script>
<script type="text/javascript" src="../../../build/paginator/paginator-debug.js"></script>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var Paginator = YAHOO.widget.Paginator,
p;
function update(state) { this.setState(state); }
var p = new Paginator({
rowsPerPage :10,
totalRecords :93,
containers :'p1'
});
p.on('changeRequest',update);
p.render();
p = new Paginator({
rowsPerPage :10,
totalRecords :3,
containers :'p2'
});
p.on('changeRequest',update);
p.render();
p = new Paginator({
rowsPerPage :10,
totalRecords :93,
containers :'p3',
pageLinks :5
});
p.on('changeRequest',update);
p.render();
p = new Paginator({
rowsPerPage :10,
totalRecords :93,
containers :'p4',
recordOffset :20,
template :Paginator.TEMPLATE_ROWS_PER_PAGE,
rowsPerPageOptions: [10,25,50,'All']
});
p.on('changeRequest',update);
p.render();
p = new Paginator({
rowsPerPage :10,
totalRecords :133,
containers :'p5',
template : "{PreviousPageLink} <strong>{CurrentPageReport}</strong> {NextPageLink}"
});
p.on('changeRequest',update);
p.render();
var p6 = document.getElementById('p6'),
p6_pag = new Paginator({
rowsPerPage : 10,
totalRecords : Paginator.VALUE_UNLIMITED,
initialPage : 5,
pageReportTemplate : "<strong>{currentPage}</strong>",
nextPageLinkLabel : '&gt;'
});
p6_pag.on('changeRequest',update);
p6.appendChild(new Paginator.ui.CurrentPageReport(p6_pag).render('p6'));
p6.appendChild(new Paginator.ui.NextPageLink(p6_pag).render('p6'));
var p7 = new Paginator({
rowsPerPage :10,
totalRecords :93,
containers :'p7'
});
p7.on('changeRequest',update);
p7.subscribe('render', function () {
document.getElementById('p7-1').appendChild(
new Paginator.ui.CurrentPageReport(p7).render('p7'));
});
p7.render();
var p8 = new Paginator({
containers : document.createElement('div'),
template: '',
rowsPerPage: 10,
totalRecords: 93,
rowsPerPageOptions: [10,25,50]
});
p8.render();
p8.on('changeRequest',update);
p8._renderTemplate(document.getElementById('p8-container'),
"{PageLinks} {RowsPerPageDropdown} {LastPageLink}",
"p8_manual");
p8._renderUIComponent(document.getElementById('p8-component'), 'p8_component');
});
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js"></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,513 +0,0 @@
<html>
<head>
<title>profiler tests</title>
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/logger.css" />
<link type="text/css" rel="stylesheet" href="../../../build/yuitest/assets/testlogger.css" />
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/profiler/profiler.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
</head>
<body>
<h1>profile tests</h1>
<p><input type="button" value="Run Tests" id="btnRun" /></p>
<script type="text/javascript">
YAHOO.namespace("test");
//global function
function getMessage(){
return "hi";
}
//global object
var myObject = {
getName : function(){
return "myObject";
}
};
YAHOO.test.profiler_test = (function(){
var Assert = YAHOO.util.Assert;
var Profiler = YAHOO.tool.Profiler;
//-------------------------------------------------------------------------
// Information needed to run tests
//-------------------------------------------------------------------------
var testObject = {
factorial : function (num){
if (num > 1) {
return num * testObject.factorial(num-1);
} else {
return 1;
}
},
add : function (iterations){
var sum = 0;
for (var i=0; i < iterations; i++){
sum++;
}
}
};
var root = {};
root.SuperType = function(){
this.name = "SuperType";
}
root.SuperType.prototype.getName = function(){
return this.name;
};
root.SubType = function(){
this.age = 29;
root.SubType.superclass.constructor.call(this);
}
YAHOO.extend(root.SubType, root.SuperType, {
getAge : function (){
return this.age;
}
});
//-------------------------------------------------------------------------
// Base Test Suite
//-------------------------------------------------------------------------
var suite = new YAHOO.tool.TestSuite("Profiler Tests");
//-------------------------------------------------------------------------
// Test Case for basic function profiling
//-------------------------------------------------------------------------
suite.add(new YAHOO.tool.TestCase({
name : "Profiler Registration Tests",
tearDown: function(){
Profiler.clear();
},
//---------------------------------------------------------------------
// Special assertions for profiler
//---------------------------------------------------------------------
assertFunctionIsRegistered : function (fullFuncName, shortFuncName, owner, originalFunction, newFunction){
var containerFunc = Profiler.getOriginal(fullFuncName);
Assert.areNotEqual(originalFunction, newFunction, fullFuncName + " function was not replaced.");
Assert.areEqual(originalFunction, containerFunc, "Original " + fullFuncName + " function was not stored.");
Assert.areEqual(originalFunction.prototype, containerFunc.prototype, fullFuncName + " prototype was not copied.");
Assert.areEqual(shortFuncName, containerFunc.__yuiFuncName, fullFuncName + " function name was not stored.");
Assert.areEqual(owner, containerFunc.__yuiOwner, "Owner for " + fullFuncName + "was not stored.");
Assert.isObject(Profiler.getReport(fullFuncName), "Report for " + fullFuncName + " function was not created.");
},
assertFunctionIsNotRegistered : function(fullFuncName, shortFuncName, owner, originalFunction, newFunction){
Assert.areEqual(originalFunction, newFunction, "Original " + fullFuncName + " function was not placed back on owner.");
Assert.isUndefined(Profiler.getOriginal(fullFuncName), "Container for original " + fullFuncName + " function was not destroyed.");
},
//---------------------------------------------------------------------
// Tests
//---------------------------------------------------------------------
testInstrument: function(){
var original = function() { return "Hello"; };
var instrumented = Profiler.instrument("hello", original);
this.assertFunctionIsRegistered("hello", "hello", null, original, instrumented);
},
testRegisterFunction : function (){
var originalFunction = testObject.factorial;
var fullFuncName = "testObject.factorial";
Profiler.registerFunction(fullFuncName, testObject);
this.assertFunctionIsRegistered(fullFuncName, "factorial", testObject, originalFunction, testObject.factorial);
Profiler.unregisterFunction(fullFuncName);
this.assertFunctionIsNotRegistered(fullFuncName, "factorial", testObject, originalFunction, testObject.factorial);
},
testRegisterGlobalFunction : function (){
var originalFunction = getMessage;
var fullFuncName = "getMessage";
Profiler.registerFunction(fullFuncName, window);
this.assertFunctionIsRegistered(fullFuncName, "getMessage", window, originalFunction, getMessage);
Profiler.unregisterFunction(fullFuncName);
this.assertFunctionIsNotRegistered(fullFuncName, "getMessage", window, originalFunction, getMessage);
},
testRegisterGlobalFunctionOnGlobalObject : function (){
var originalFunction = myObject.getName;
var fullFuncName = "myObject.getName";
Profiler.registerFunction(fullFuncName);
this.assertFunctionIsRegistered(fullFuncName, "getName", myObject, originalFunction, myObject.getName);
Profiler.unregisterFunction(fullFuncName);
this.assertFunctionIsNotRegistered(fullFuncName, "getName", myObject, originalFunction, myObject.getName);
},
testRegisterObject : function (){
var funcNames = [];
var originalFuncs = {};
//get all methods
for (var propName in testObject){
if (typeof propName == "function"){
funcNames.push(propName);
originalFuncs[propName] = testObject[propName];
}
}
Profiler.registerObject("testObject", testObject);
Assert.isObject(Profiler.getOriginal("testObject"), "Object was not added to container.");
//check each method
for (var i=0; i < funcNames.length; i++){
var fullFuncName = "testobject." + funcNames[i];
var originalFunction = originalFuncs[funcNames[i]];
this.assertFunctionIsRegistered(fullFuncName, funcNames[i], testObject, originalFunction, testObject[funcNames[i]]);
}
Profiler.unregisterObject("testObject");
//check each method
for (var i=0; i < funcNames.length; i++){
var fullFuncName = "testobject." + funcNames[i];
var originalFunction = originalFuncs[funcNames[i]];
this.assertFunctionIsNotRegistered(fullFuncName, funcNames[i], testObject, originalFunction, testObject[funcNames[i]]);
}
Assert.isUndefined(Profiler.getOriginal("testObject"), "Object was not removed from container.");
},
testRegisterConstructor : function (){
var originalConstructor = root.SuperType;
//gather stuff on the prototype
var funcNames = [];
var originalFuncs = {};
for (var prop in root.SuperType.prototype){
if (YAHOO.lang.isFunction(root.SuperType.prototype)){
funcNames.push(prop);
originalFuncs[prop] = root.SuperType.prototype[prop];
}
}
Profiler.registerConstructor("root.SuperType", root);
this.assertFunctionIsRegistered("root.SuperType", "SuperType", root, originalConstructor, root.SuperType);
//check each method
for (var i=0; i < funcNames.length; i++){
var fullFuncName = "root.SuperType.prototype." + funcNames[i];
var originalFunction = originalFuncs[funcNames[i]];
this.assertFunctionIsRegistered(fullFuncName, funcNames[i], root.SuperType.prototype, originalFunction, root.SuperType.prototype[funcNames[i]]);
}
Profiler.unregisterConstructor("root.SuperType");
//check each method
for (var i=0; i < funcNames.length; i++){
var fullFuncName = "root.SuperType.prototype." + funcNames[i];
var originalFunction = originalFuncs[funcNames[i]];
this.assertFunctionIsNotRegistered(fullFuncName, funcNames[i], root.SuperType.prototype, originalFunction, root.SuperType.prototype[funcNames[i]]);
}
this.assertFunctionIsNotRegistered("root.SuperType", "SuperType", root, originalConstructor, root.SuperType);
},
testRegisterConstructorWithInheritance : function (){
var originalConstructor = root.SubType;
//gather stuff on the prototype
var funcNames = [];
var originalFuncs = {};
for (var prop in root.SubType.prototype){
if (YAHOO.lang.isFunction(root.SubType.prototype)){
funcNames.push(prop);
originalFuncs[prop] = root.SubType.prototype[prop];
}
}
Profiler.registerConstructor("root.SubType", root);
this.assertFunctionIsRegistered("root.SubType", "SubType", root, originalConstructor, root.SubType);
//check the superclass property
Assert.isObject(root.SubType.superclass, "SubType superclass should be an object.");
Assert.areEqual(root.SuperType, root.SubType.superclass.constructor, "SubType superclass constructor should be SuperType.");
//check each method
for (var i=0; i < funcNames.length; i++){
var fullFuncName = "root.SubType.prototype." + funcNames[i];
var originalFunction = originalFuncs[funcNames[i]];
this.assertFunctionIsRegistered(fullFuncName, funcNames[i], root.SubType.prototype, originalFunction, root.SubType.prototype[funcNames[i]]);
}
Profiler.unregisterConstructor("root.SubType");
//check each method
for (var i=0; i < funcNames.length; i++){
var fullFuncName = "root.SubType.prototype." + funcNames[i];
var originalFunction = originalFuncs[funcNames[i]];
this.assertFunctionIsNotRegistered(fullFuncName, funcNames[i], root.SubType.prototype, originalFunction, root.SubType.prototype[funcNames[i]]);
}
this.assertFunctionIsNotRegistered("root.SubType", "SubType", root, originalConstructor, root.SubType);
},
testFunctionAccuracy1 : function (){
Profiler.registerFunction("testObject.factorial", testObject);
var result = testObject.factorial(10);
Profiler.unregisterFunction("testObject.factorial");
Assert.areEqual(3628800, result, "Factorial result was incorrect.");
},
testFunctionAccuracy2 : function (){
Profiler.registerConstructor("root.SubType", root);
var o = new root.SubType();
var age = o.getAge();
var name = o.getName();
Assert.areEqual(29, age, "o.age was incorrect.");
Assert.areEqual("SuperType", name, "o.name was incorrect");
var o2 = new root.SubType();
age = o2.getAge();
name = o2.getName();
Assert.areEqual(29, age, "o2.Age was incorrect.");
Assert.areEqual("SuperType", name, "o2.Name was incorrect");
Profiler.unregisterConstructor("root.SubType");
}
}));
//-------------------------------------------------------------------------
// Test Case for stopwatch functions
//-------------------------------------------------------------------------
suite.add(new YAHOO.tool.TestCase({
name : "Profiler Stopwatch Tests",
tearDown: function(){
Profiler.clear();
},
testStartStop: function (){
Profiler.start("random.entry");
for (var i=0; i < 10000; i++){}
Profiler.stop("random.entry");
var report = Profiler.getReport("random.entry");
Assert.isObject(report, "Report should be an object.");
Assert.areEqual(1, report.calls, "Call count should be 1.");
Assert.isNumber(report.max, "Max should be a number.");
Assert.isNumber(report.min, "Min should be a number.");
Assert.isNumber(report.avg, "Average should be a number.");
},
testStartStopPause : function (){
Profiler.start("random.entry");
for (var i=0; i < 10000; i++){}
Profiler.pause("random.entry");
for (var i=0; i < 10000; i++){}
Profiler.start("random.entry");
for (var i=0; i < 10000; i++){}
Profiler.stop("random.entry");
var report = Profiler.getReport("random.entry");
Assert.isObject(report, "Report should be an object.");
Assert.areEqual(1, report.calls, "Call count should be 1.");
Assert.isNumber(report.max, "Max should be a number.");
Assert.isNumber(report.min, "Min should be a number.");
Assert.isNumber(report.avg, "Average should be a number.");
},
testStartTwice : function () {
Profiler.start("random.entry");
for (var i=0; i < 10000; i++){}
Profiler.stop("random.entry");
Profiler.start("random.entry");
for (var i=0; i < 10000; i++){}
Profiler.stop("random.entry");
var report = Profiler.getReport("random.entry");
Assert.isObject(report, "Report should be an object.");
Assert.areEqual(2, report.calls, "Call count should be 2.");
Assert.isNumber(report.max, "Max should be a number.");
Assert.isNumber(report.min, "Min should be a number.");
Assert.isNumber(report.avg, "Average should be a number.");
}
}));
//-------------------------------------------------------------------------
// Test Case for report data
//-------------------------------------------------------------------------
suite.add(new YAHOO.tool.TestCase({
name : "Profiler Report Data Tests",
testGetReport : function (){
Profiler.registerFunction("testObject.factorial", testObject);
testObject.factorial(10);
var report = Profiler.getReport("testObject.factorial");
Profiler.unregisterFunction("testObject.factorial");
Assert.isObject(report, "Report should be an object.");
Assert.isNumber(report.calls, "Call count should be a number.");
Assert.isNumber(report.max, "Max should be a number.");
Assert.isNumber(report.min, "Min should be a number.");
Assert.isNumber(report.avg, "Average should be a number.");
},
testGetCallCount : function (){
Profiler.registerFunction("testObject.factorial", testObject);
testObject.factorial(10);
var report = Profiler.getReport("testObject.factorial");
var callCount = Profiler.getCallCount("testObject.factorial");
Profiler.unregisterFunction("testObject.factorial");
Assert.isObject(report, "Report should be an object.");
Assert.areEqual(10, report.calls, "Report.calls is incorrect.");
Assert.areEqual(10, callCount, "Call count is incorrect.");
},
testGetReport : function () {
Profiler.registerConstructor("root.SubType", root);
var o = new root.SubType();
o.getAge();
o.getName();
var o2 = new root.SubType();
o2.getAge();
o2.getName();
o2.getAge();
o2.getName();
o2.getName();
var report = Profiler.getFullReport();
Profiler.unregisterConstructor("root.SubType");
Assert.isObject(report, "Report should be an object.");
Assert.isObject(report["root.SubType"], "There should be an entry for root.SubType.");
Assert.areEqual(2, report["root.SubType"].calls, "root.SubType should have a call count of 2.");
//Assert.isObject(report["root.SubType.prototype"], "There should be an entry for root.SubType.prototype.");
Assert.isObject(report["root.SubType.prototype.getAge"], "There should be an entry for getAge()");
Assert.areEqual(3, report["root.SubType.prototype.getAge"].calls, "getAge() should have a call count of 3.");
Assert.isObject(report["root.SubType.prototype.getName"], "There should be an entry for getName()");
Assert.areEqual(4, report["root.SubType.prototype.getName"].calls, "getName() should have a call count of 4.");
}
}));
//return it
return suite;
})();
(function (){
//create the logger
var logger = new YAHOO.tool.TestLogger();
//add the tests
YAHOO.tool.TestRunner.add(YAHOO.test.profiler_test);
//add event handler
YAHOO.util.Event.addListener("btnRun", "click", YAHOO.tool.TestRunner.run);
if (parent && parent != window) {
YAHOO.tool.TestManager.load();
} else {
YAHOO.tool.TestRunner.run();
}
})();
</script>
</body>
</html>

View file

@ -1,920 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Progress Bar Tests</title>
<!-- css -->
<link rel="stylesheet" type="text/css" href="../../build/reset-fonts-grids/reset-fonts-grids.css">
<link rel="stylesheet" type="text/css" href="../../build/base/base.css">
<link rel="stylesheet" type="text/css" href="../../build/logger/assets/logger.css">
<link rel="stylesheet" type="text/css" href="../../build/yuitest/assets/testlogger.css">
<link rel="stylesheet" type="text/css" href="../../build/progressbar/assets/progressbar-core.css">
<link rel="stylesheet" type="text/css" href="../../build/progressbar/assets/skins/sam/progressbar.css">
<!-- js -->
<script type="text/javascript" src="../../build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="../../build/animation/animation-min.js"></script>
<script type="text/javascript" src="../../build/element/element-min.js"></script>
<script type="text/javascript" src="../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../build/yuitest/yuitest-min.js"></script>
<script type="text/javascript" src="../../build/progressbar/progressbar-debug.js"></script>
<style type="text/css">
#plain.yui-pb {
height:25px;
width:250px;
}
#plain .yui-pb-mask td {
background-image: url(mask.gif);
}
#plain .yui-pb-bar {
background-image:url(bar.gif);
}
#plain.yui-pb .yui-pb-anim {
background-image:url(animbar.gif);
}
#test {
border: thin solid black;
}
#margins .yui-pb-bar {
margin: 5px 10px 15px 20px;
}
</style>
</head>
<body class="yui-skin-sam">
<div id="testLogger"></div>
<div id="test"></div>
<script type="text/javascript">
(function () {
var pb, t,
PB = YAHOO.widget.ProgressBar,
Dom = YAHOO.util.Dom,
Event = YAHOO.util.Event,
Lang = YAHOO.lang,
A = YAHOO.util.Assert;
var getEls = function() {
var get = Dom.getElementsByClassName,
test = Dom.get('test');
return {
pb: get('yui-pb','div',test)[0],
m : get('yui-pb-mask','div',test)[0],
b : get('yui-pb-bar','div',test)[0]
};
};
var getStyle = function(el,style) {
var st = Dom.getStyle(el,style);
while (st == '100%' && el) {
el = el.parentNode;
st = Dom.getStyle(el,style);
}
return st;
};
var oSuite = new YAHOO.tool.TestSuite("ProgressBar");
//add a test case
oSuite.add(new YAHOO.tool.TestCase({
name: "Initialization",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
testDefault : function () {
pb = new PB();
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value');
A.areEqual(0,pb.get('minValue'),'reported minValue');
A.areEqual(100,pb.get('maxValue'),'reported maxValue');
A.isNull(pb.get('anim'),'reported anim');
A.areEqual('{value}',pb.get('ariaTextTemplate'),'reported ariaTextTemplate');
A.areEqual('ltr',pb.get('direction'),'reported direction');
A.areEqual('200px',getStyle(t.pb,'width'),'widget width');
A.areEqual('20px',getStyle(t.pb,'height'),'widget height');
A.areEqual('200px',pb.get('width'),'reported width');
A.areEqual('20px',pb.get('height'),'reported height');
A.areEqual('200px',getStyle(t.m,'width'),'mask width');
A.areEqual('20px',getStyle(t.m,'height'),'mask height');
A.areEqual('0px',getStyle(t.b,'width'),'bar width');
A.areEqual('20px',getStyle(t.b,'height'),'bar height');
},
testSetupByCode : function () {
pb = new PB({height:'30px', width: 300});
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value');
A.areEqual(0,pb.get('minValue'),'reported minValue');
A.areEqual(100,pb.get('maxValue'),'reported maxValue');
A.isNull(pb.get('anim'),'reported anim');
A.areEqual('{value}',pb.get('ariaTextTemplate'),'reported ariaTextTemplate');
A.areEqual('ltr',pb.get('direction'),'reported direction');
A.areEqual('300px',getStyle(t.pb,'width'),'widget width');
A.areEqual('30px',getStyle(t.pb,'height'),'widget height');
A.areEqual('300px',pb.get('width'),'reported width');
A.areEqual('30px',pb.get('height'),'reported height');
A.areEqual('300px',getStyle(t.m,'width'),'mask width');
A.areEqual('30px',getStyle(t.m,'height'),'mask height');
A.areEqual('0px',getStyle(t.b,'width'),'bar width');
A.areEqual('30px',getStyle(t.b,'height'),'bar height');
},
testSetupByStyle: function () {
pb = new PB({id:'plain'});
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value');
A.areEqual(0,pb.get('minValue'),'reported minValue');
A.areEqual(100,pb.get('maxValue'),'reported maxValue');
A.isNull(pb.get('anim'),'reported anim');
A.areEqual('{value}',pb.get('ariaTextTemplate'),'reported ariaTextTemplate');
A.areEqual('ltr',pb.get('direction'),'reported direction');
A.areEqual('250px',pb.get('width'),'reported width');
A.areEqual('25px',pb.get('height'),'reported height');
A.areEqual('250px',getStyle(t.pb,'width'),'widget width');
A.areEqual('25px',getStyle(t.pb,'height'),'widget height');
A.areEqual('250px',getStyle(t.m,'width'),'mask width');
A.areEqual('25px',getStyle(t.m,'height'),'mask height');
A.areEqual('0px',getStyle(t.b,'width'),'bar width');
A.areEqual('25px',getStyle(t.b,'height'),'bar height');
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "value",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
test30onInit : function () {
pb = new PB({value:30});
pb.render('test');
t = getEls();
A.areEqual(30,pb.get('value'),'reported value');
A.areEqual('60px',Dom.getStyle(t.b,'width'),'bar width');
},
test30beforeRender : function () {
pb = new PB();
pb.set('value',30);
pb.render('test');
t = getEls();
A.areEqual(30,pb.get('value'),'reported value');
A.areEqual('60px',getStyle(t.b,'width'),'bar width');
},
test30afterRender : function () {
pb = new PB();
pb.render('test');
pb.set('value',30);
t = getEls();
A.areEqual(30,pb.get('value'),'reported value');
A.areEqual('60px',getStyle(t.b,'width'),'bar width');
},
test70onInit : function () {
pb = new PB({value:70});
pb.render('test');
t = getEls();
A.areEqual(70,pb.get('value'),'reported value');
A.areEqual('140px',getStyle(t.b,'width'),'bar width');
},
test70beforeRender : function () {
pb = new PB();
pb.set('value',70);
pb.render('test');
t = getEls();
A.areEqual(70,pb.get('value'),'reported value');
A.areEqual('140px',getStyle(t.b,'width'),'bar width');
},
test70afterRender : function () {
pb = new PB();
pb.render('test');
pb.set('value',70);
t = getEls();
A.areEqual(70,pb.get('value'),'reported value');
A.areEqual('140px',getStyle(t.b,'width'),'bar width');
},
test30_50_80_onInit : function () {
pb = new PB({value:50,minValue:30,maxValue:80});
pb.render('test');
t = getEls();
A.areEqual(50,pb.get('value'),'reported value');
A.areEqual('80px',getStyle(t.b,'width'),'bar width');
},
test30_50_80_beforeRender : function () {
pb = new PB();
pb.set('value',50);
pb.set('minValue',30);
pb.set('maxValue',80);
pb.render('test');
t = getEls();
A.areEqual(50,pb.get('value'),'reported value');
A.areEqual('80px',getStyle(t.b,'width'),'bar width');
},
test30_50_80_afterRender : function () {
pb = new PB();
pb.render('test');
t = getEls();
pb.set('value',50);
A.areEqual('100px',getStyle(t.b,'width'),'bar width - initial');
pb.set('minValue',30);
A.areEqual('57px',getStyle(t.b,'width'),'bar width - after minValue');
pb.set('maxValue',80);
A.areEqual('80px',getStyle(t.b,'width'),'bar width - after maxValue');
A.areEqual(50,pb.get('value'),'reported value');
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "Direction",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
testRtl : function () {
pb = new PB({direction:'rtl', value:30});
pb.render('test');
t = getEls();
A.areEqual(30,pb.get('value'),'reported value');
A.areEqual('60px',getStyle(t.b,'width'),'bar width');
A.areEqual('140px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('20px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
},
testTtb : function () {
pb = new PB({direction:'ttb', value:30,width:'40px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual(30,pb.get('value'),'reported value');
A.areEqual('40px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('30px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
},
testBtt : function () {
pb = new PB({direction:'btt', value:30,width:'40px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual(30,pb.get('value'),'reported value');
A.areEqual('40px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('30px',getStyle(t.b,'height'),'bar height');
A.areEqual('70px',Dom.getStyle(t.b,'top'),'bar top');
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "ARIA",
setUp : function () {
pb = new PB();
pb.render('test');
},
tearDown : function () {
pb.destroy();
},
testAria : function () {
t = getEls();
A.areEqual('progressbar',t.pb.getAttribute('role'),'ARIA role');
A.areEqual('0',t.pb.getAttribute('aria-valuemin'),'ARIA minValue');
A.areEqual('100',t.pb.getAttribute('aria-valuemax'),'ARIA maxValue');
A.areEqual('0',t.pb.getAttribute('aria-valuenow'),'ARIA value');
A.areEqual('0',t.pb.getAttribute('aria-valuetext'),'ARIA text');
pb.set('value',30);
A.areEqual('0',t.pb.getAttribute('aria-valuemin'),'ARIA minValue');
A.areEqual('100',t.pb.getAttribute('aria-valuemax'),'ARIA maxValue');
A.areEqual('30',t.pb.getAttribute('aria-valuenow'),'ARIA value 30');
A.areEqual('30',t.pb.getAttribute('aria-valuetext'),'ARIA text 30');
// changing the ariaTextTemplate doesn't have an immediate effect
// until the next redraw or value change
pb.set('ariaTextTemplate','|{minValue}=>{value}<={maxValue}|');
pb.redraw();
A.areEqual('|0=>30<=100|',t.pb.getAttribute('aria-valuetext'),'ARIA text 0-30-100');
pb.set('value',50);
pb.set('minValue',30);
pb.set('maxValue',80);
A.areEqual('|30=>50<=80|',t.pb.getAttribute('aria-valuetext'),'ARIA text 30-50-80');
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "Bar with margins",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
testLtr30 : function () {
pb = new PB({id:'margins',direction:'ltr', value:30,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('51px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('100px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
},
testLtr70 : function () {
pb = new PB({id:'margins',direction:'ltr', value:70,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('119px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('100px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
},
testRtl30 : function () {
pb = new PB({id:'margins',direction:'rtl', value:30,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('51px',getStyle(t.b,'width'),'bar width');
A.areEqual('119px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('100px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
},
testRtl70 : function () {
pb = new PB({id:'margins',direction:'rtl', value:70,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('119px',getStyle(t.b,'width'),'bar width');
A.areEqual('51px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('100px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
},
testBtt30 : function () {
pb = new PB({id:'margins',direction:'btt', value:30,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('200px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('24px',getStyle(t.b,'height'),'bar height');
A.areEqual('56px',Dom.getStyle(t.b,'top'),'bar top');
},
testBtt70 : function () {
pb = new PB({id:'margins',direction:'btt', value:70,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('200px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('56px',getStyle(t.b,'height'),'bar height');
A.areEqual('24px',Dom.getStyle(t.b,'top'),'bar top');
},
testTtb30 : function () {
pb = new PB({id:'margins',direction:'ttb', value:30,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('200px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('24px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
},
testTtb70 : function () {
pb = new PB({id:'margins',direction:'ttb', value:70,width:'200px',height:'100px'});
pb.render('test');
t = getEls();
A.areEqual('200px',getStyle(t.b,'width'),'bar width');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left');
A.areEqual('56px',getStyle(t.b,'height'),'bar height');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top');
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "Miscellaneous",
setUp : function () {
},
tearDown : function () {
pb.destroy();
Dom.get('test').innerHTML = '';
},
testRenderTwice : function () {
pb = new PB({direction:'rtl', value:30});
A.areEqual(0,Dom.get('test').childNodes.length,'before render nothing');
pb.render('test');
A.areEqual(1,Dom.get('test').childNodes.length,'first render');
pb.render('test');
A.areEqual(1,Dom.get('test').childNodes.length,'second render ignored');
},
testDirection: function() {
pb = new PB({direction:'rtl', value:30});
A.areEqual(true,pb.set('direction','btt'),'before rendering changing direction is fine');
A.areSame(pb,pb.render('test'),'render should return PB instance');
A.areEqual(false,pb.set('direction','ttb'),'after rendering you cannot change direction');
A.areEqual('btt',pb.get('direction'),'direction can be set until render is done');
},
testRenderBefore: function () {
var testEl = Dom.get('test');
testEl.innerHTML = '<p id="pepe">something</p>';
pb = new PB().render('test');
A.areEqual('pepe',testEl.firstChild.id,'first child must be pepe');
A.areSame(testEl.firstChild.nextSibling,pb.get('element'),'second element must be bar');
var pb1 = new PB().render('test','pepe');
A.areSame(testEl.firstChild,pb1.get('element'),'first element must be bar');
A.areEqual('pepe',testEl.firstChild.nextSibling.id,'second child must be pepe');
A.areSame(testEl.firstChild.nextSibling.nextSibling,pb.get('element'),'third element must be bar');
pb1.destroy();
}/* Attribute override test
,
testAttributeOverride: function () {
pb = new PB();
var config = pb.getAttributeConfig('direction');
YAHOO.log(config.validator.toString(),'qq','qq');
pb.setAttributeConfig('direction',{
validator:function(value) {
if (this._rendered) { return false; }
switch (value) {
case 'qqq':
case 'ltr':
return true;
default:
return false;
}
}
});
A.areEqual(true,pb.set('direction','qqq'),'direction override qqq');
A.areEqual(false,pb.set('direction','rtl'),'direction override rtl');
A.areEqual(true,pb.set('direction','ltr'),'direction override ltr');
pb.render('test');
}*/
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "Change width or height of rendered widget",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
testWidthChangeLtr: function() {
pb = new PB({value:30});
pb.render('test');
t = getEls();
A.areEqual('60px',getStyle(t.b,'width'),'bar width before');
A.areEqual('20px',getStyle(t.b,'height'),'bar height');
pb.set('width','300px');
A.areEqual('300px',getStyle(t.pb,'width'),'widget width');
A.areEqual('20px',getStyle(t.pb,'height'),'widget height');
A.areEqual('300px',pb.get('width'),'reported width');
A.areEqual('20px',pb.get('height'),'reported height');
A.areEqual('300px',getStyle(t.m,'width'),'mask width');
A.areEqual('20px',getStyle(t.m,'height'),'mask height');
A.areEqual('90px',getStyle(t.b,'width'),'bar width after');
A.areEqual('20px',getStyle(t.b,'height'),'bar height');
},
testHeightChangeLtr: function() {
pb = new PB({value:30});
pb.render('test');
t = getEls();
A.areEqual('60px',getStyle(t.b,'width'),'bar width');
A.areEqual('20px',getStyle(t.b,'height'),'bar height');
pb.set('height','50px');
A.areEqual('200px',getStyle(t.pb,'width'),'widget width');
A.areEqual('50px',getStyle(t.pb,'height'),'widget height');
A.areEqual('200px',pb.get('width'),'reported width');
A.areEqual('50px',pb.get('height'),'reported height');
A.areEqual('200px',getStyle(t.m,'width'),'mask width');
A.areEqual('50px',getStyle(t.m,'height'),'mask height');
A.areEqual('60px',getStyle(t.b,'width'),'bar width');
A.areEqual('50px',getStyle(t.b,'height'),'bar height');
},
testWidthChangeTtb: function() {
pb = new PB({value:30,direction:'ttb',height:100});
pb.render('test');
t = getEls();
A.areEqual('200px',getStyle(t.b,'width'),'bar width');
A.areEqual('30px',getStyle(t.b,'height'),'bar height');
pb.set('width','300px');
A.areEqual('300px',getStyle(t.pb,'width'),'widget width');
A.areEqual('100px',getStyle(t.pb,'height'),'widget height');
A.areEqual('300px',pb.get('width'),'reported width');
A.areEqual('100px',pb.get('height'),'reported height');
A.areEqual('300px',getStyle(t.m,'width'),'mask width');
A.areEqual('100px',getStyle(t.m,'height'),'mask height');
A.areEqual('300px',getStyle(t.b,'width'),'bar width');
A.areEqual('30px',getStyle(t.b,'height'),'bar height');
},
testHeightChangeTtb: function() {
pb = new PB({value:30,direction:'ttb',height:100});
pb.render('test');
t = getEls();
A.areEqual('200px',getStyle(t.b,'width'),'bar width');
A.areEqual('30px',getStyle(t.b,'height'),'bar height');
pb.set('height','150px');
A.areEqual('200px',getStyle(t.pb,'width'),'widget width');
A.areEqual('150px',getStyle(t.pb,'height'),'widget height');
A.areEqual('200px',pb.get('width'),'reported width');
A.areEqual('150px',pb.get('height'),'reported height');
A.areEqual('200px',getStyle(t.m,'width'),'mask width');
A.areEqual('150px',getStyle(t.m,'height'),'mask height');
A.areEqual('200px',getStyle(t.b,'width'),'bar width');
A.areEqual('45px',getStyle(t.b,'height'),'bar height');
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "Change of end values on a rendered widget",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
testMaxValue: function() {
pb = new PB({value:30});
pb.render('test');
t = getEls();
A.areEqual('60px',getStyle(t.b,'width'),'bar width before');
pb.set('maxValue',50);
A.areEqual('120px',getStyle(t.b,'width'),'bar width maxValue 50');
pb.set('maxValue',30);
A.areEqual('200px',getStyle(t.b,'width'),'bar width maxValue 30');
pb.set('maxValue',20);
A.areEqual('200px',getStyle(t.b,'width'),'bar width maxValue 20');
A.areEqual(20,pb.get('value'),'value should be cropped to maxValue');
},
testMinValue: function() {
pb = new PB({value:50});
pb.render('test');
t = getEls();
A.areEqual('100px',getStyle(t.b,'width'),'bar width before');
pb.set('minValue',20);
A.areEqual('75px',getStyle(t.b,'width'),'bar width minValue 20');
pb.set('minValue',50);
A.areEqual('0px',getStyle(t.b,'width'),'bar width minValue 50');
pb.set('minValue',80);
A.areEqual('0px',getStyle(t.b,'width'),'bar width minValue 80');
A.areEqual(80,pb.get('value'),'value should be cropped to minValue');
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "Animation",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
testLtr : function () {
pb = new PB({direction:'ltr',anim:true});
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value before');
A.areEqual('0px',getStyle(t.b,'width'),'bar width before');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left before');
A.areEqual('20px',getStyle(t.b,'height'),'bar height before');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top before');
pb.set('value',30);
this.wait(function() {
A.areEqual(30,pb.get('value'),'reported value 30');
A.areEqual('60px',getStyle(t.b,'width'),'bar width 30');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 30');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 30');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 30');
pb.set('value',60);
this.wait(function() {
A.areEqual(60,pb.get('value'),'reported value 60');
A.areEqual('120px',getStyle(t.b,'width'),'bar width 60');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 60');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 60');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 60');
pb.set('value',100);
this.wait(function() {
A.areEqual(100,pb.get('value'),'reported value 100');
A.areEqual('200px',getStyle(t.b,'width'),'bar width 100');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 100');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 100');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 100');
pb.set('value',0);
this.wait(function() {
A.areEqual(0,pb.get('value'),'reported value 0');
A.areEqual('0px',getStyle(t.b,'width'),'bar width 0');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 0');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 0');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 0');
},1200);
},1200);
},1200);
},1200);
},
testRtl : function () {
pb = new PB({direction:'rtl',anim:true});
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value before');
A.areEqual('0px',getStyle(t.b,'width'),'bar width before');
A.areEqual('200px',Dom.getStyle(t.b,'left'),'bar left before');
A.areEqual('20px',getStyle(t.b,'height'),'bar height before');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top before');
pb.set('value',30);
this.wait(function() {
A.areEqual(30,pb.get('value'),'reported value 30');
A.areEqual('60px',getStyle(t.b,'width'),'bar width 30');
A.areEqual('140px',Dom.getStyle(t.b,'left'),'bar left 30');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 30');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 30');
pb.set('value',60);
this.wait(function() {
A.areEqual(60,pb.get('value'),'reported value 60');
A.areEqual('120px',getStyle(t.b,'width'),'bar width 60');
A.areEqual('80px',Dom.getStyle(t.b,'left'),'bar left 60');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 60');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 60');
pb.set('value',100);
this.wait(function() {
A.areEqual(100,pb.get('value'),'reported value 100');
A.areEqual('200px',getStyle(t.b,'width'),'bar width 100');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 100');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 100');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 100');
pb.set('value',0);
this.wait(function() {
A.areEqual(0,pb.get('value'),'reported value 0');
A.areEqual('0px',getStyle(t.b,'width'),'bar width 0');
A.areEqual('200px',Dom.getStyle(t.b,'left'),'bar left 0');
A.areEqual('20px',getStyle(t.b,'height'),'bar height 0');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 0');
},1200);
},1200);
},1200);
},1200);
},
testTtb : function () {
pb = new PB({direction:'ttb',anim:true,width:20,height:200});
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value before');
A.areEqual('20px',getStyle(t.b,'width'),'bar width before');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left before');
A.areEqual('0px',getStyle(t.b,'height'),'bar height before');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top before');
pb.set('value',30);
this.wait(function() {
A.areEqual(30,pb.get('value'),'reported value 30');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 30');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 30');
A.areEqual('60px',getStyle(t.b,'height'),'bar height 30');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 30');
pb.set('value',60);
this.wait(function() {
A.areEqual(60,pb.get('value'),'reported value 60');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 60');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 60');
A.areEqual('120px',getStyle(t.b,'height'),'bar height 60');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 60');
pb.set('value',100);
this.wait(function() {
A.areEqual(100,pb.get('value'),'reported value 100');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 100');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 100');
A.areEqual('200px',getStyle(t.b,'height'),'bar height 100');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 100');
pb.set('value',0);
this.wait(function() {
A.areEqual(0,pb.get('value'),'reported value 0');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 0');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 0');
A.areEqual('0px',getStyle(t.b,'height'),'bar height 0');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 0');
},1200);
},1200);
},1200);
},1200);
},
testBtt : function () {
pb = new PB({direction:'btt',anim:true,width:20,height:200});
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value before');
A.areEqual('20px',getStyle(t.b,'width'),'bar width before');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left before');
A.areEqual('0px',getStyle(t.b,'height'),'bar height before');
A.areEqual('200px',Dom.getStyle(t.b,'top'),'bar top before');
pb.set('value',30);
this.wait(function() {
A.areEqual(30,pb.get('value'),'reported value 30');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 30');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 30');
A.areEqual('60px',getStyle(t.b,'height'),'bar height 30');
A.areEqual('140px',Dom.getStyle(t.b,'top'),'bar top 30');
pb.set('value',60);
this.wait(function() {
A.areEqual(60,pb.get('value'),'reported value 60');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 60');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 60');
A.areEqual('120px',getStyle(t.b,'height'),'bar height 60');
A.areEqual('80px',Dom.getStyle(t.b,'top'),'bar top 60');
pb.set('value',100);
this.wait(function() {
A.areEqual(100,pb.get('value'),'reported value 100');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 100');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 100');
A.areEqual('200px',getStyle(t.b,'height'),'bar height 100');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top 100');
pb.set('value',0);
this.wait(function() {
A.areEqual(0,pb.get('value'),'reported value 0');
A.areEqual('20px',getStyle(t.b,'width'),'bar width 0');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left 0');
A.areEqual('0px',getStyle(t.b,'height'),'bar height 0');
A.areEqual('200px',Dom.getStyle(t.b,'top'),'bar top 0');
},1200);
},1200);
},1200);
},1200);
},
testCancel : function () {
pb = new PB({anim:true});
pb.get('anim').duration = 2;
pb.render('test');
t = getEls();
A.areEqual(0,pb.get('value'),'reported value before');
A.areEqual('0px',getStyle(t.b,'width'),'bar width before');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left before');
A.areEqual('20px',getStyle(t.b,'height'),'bar height before');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top before');
pb.set('value',80);
this.wait(function() {
pb.set('value',25);
this.wait(function() {
A.areEqual(25,pb.get('value'),'reported value after');
A.areEqual('50px',getStyle(t.b,'width'),'bar width after');
A.areEqual('0px',Dom.getStyle(t.b,'left'),'bar left after');
A.areEqual('20px',getStyle(t.b,'height'),'bar height after');
A.areEqual('0px',Dom.getStyle(t.b,'top'),'bar top after');
},2100);
},1000);
}
}));
oSuite.add(new YAHOO.tool.TestCase({
name: "Events",
setUp : function () {
},
tearDown : function () {
pb.destroy();
},
testEvent : function () {
pb = new PB({anim:true});
pb.get('anim').duration = 2;
pb.render('test');
var startValue = null,
firstProg = null,
halfProg = null,
lastProg = null,
endValue = null;
pb.on('start',function(value) {
startValue = value;
});
pb.on('progress',function(value) {
if (firstProg === null) { firstProg = value; }
lastProg = value;
});
pb.on('complete',function (value) {
endValue = value;
});
pb.set('value',50);
this.wait(function () {
halfProg = lastProg;
this.wait(function () {
A.isNotNull(startValue,'start value still null');
A.isNotNull(firstProg,'firstProg value still null');
A.isNotNull(halfProg,'halfProg value still null');
A.isNotNull(lastProg,'lastProg value still null');
A.isNotNull(endValue,'end value stillnull');
A.areEqual(0,startValue,'start value not zero');
A.isTrue(firstProg <=1,'firstProg not close to zero');
A.isTrue(halfProg > 0 && halfProg < 50,'halfProg value not half way');
A.isTrue(50 - lastProg <= 1,'lastProg value not close to 50');
A.areEqual(50,endValue,'endValue value not 50');
startValue = firstProg = halfProg = lastProg = endValue = null;
pb.set('value',30);
this.wait(function () {
halfProg = lastProg;
this.wait(function () {
A.isNotNull(startValue,'start value still null');
A.isNotNull(firstProg,'firstProg value still null');
A.isNotNull(halfProg,'halfProg value still null');
A.isNotNull(lastProg,'lastProg value still null');
A.isNotNull(endValue,'end value stillnull');
A.areEqual(50,startValue,'start value not 50');
A.isTrue(50 - firstProg <=1,'firstProg not close to 50');
A.isTrue(halfProg > 30 && halfProg < 50,'halfProg value not half way');
A.isTrue(lastProg - 30 <= 1,'lastProg value not close to 30');
A.areEqual(30,endValue,'endValue value not 30');
},1200);
},1000);
},1200);
},1000);
}
}));
YAHOO.tool.TestRunner.add(oSuite);
Event.onDOMReady(function (){
var logger = new YAHOO.tool.TestLogger("testLogger");
logger.hideCategory('info');
if (1) {
YAHOO.tool.TestRunner.run();
} else {
// This section is for running individual tests. Set previous if to false.
pb = new PB({height:'30px', width: 300});
pb.render('test');
t = getEls();
}
});
})();
</script>
</body>
</html>

View file

@ -1,329 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Selector Test Suite</title>
<link rel="stylesheet" type="text/css" href="../../../build/logger/assets/logger.css">
<link rel="stylesheet" type="text/css" href="../../../build/yuitest/assets/testlogger.css">
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script id="selector-script" type="text/javascript" src="../../../build/selector/selector.js"></script>
<script type="text/javascript" src="../../../build/logger/logger-min.js"></script>
<script type="text/javascript" src="../../../build/yuitest/yuitest.js"></script>
<script id="foo-script" type="text/javascript" src="http://foo.com/bar.js"></script>
<script>
onload = function() {
var Y = YAHOO.util;
var logger = new YAHOO.tool.TestLogger(null, {height:'2000px'});
var suite = new YAHOO.tool.TestSuite("Selector Suite");
var Selector = Y.Selector;
var $ = Selector.query;
var demo = Y.Dom.get('demo');
children = Y.Dom.getChildren(demo);
var demoFirstChild = children[0];
var demoLastChild = children[children.length - 1];
var selectorQueryAll = new YAHOO.tool.TestCase({
name: 'Query All',
testTest: function() {
Y.Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), '[type=checkbox], button'), '[type=checkbox], button');
Y.Assert.isTrue(Selector.test(Y.Dom.get('test-lang-en-us'), '[lang|=en]'), '[lang|=en] (lang="en-us")');
Y.Assert.isTrue(Selector.test(Y.Dom.get('test-lang-en'), '[lang|=en]'), '[lang|=en] (lang="en")');
Y.Assert.isFalse(Selector.test(Y.Dom.get('test-lang-english'), '[lang|=en]'), '[lang|=en] (lang="en")');
Y.Assert.isFalse(Selector.test(Y.Dom.get('test-lang-none'), '[lang|=en]'), '[lang|=en] false pos');
Y.Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), 'for [type=checkbox]'), 'for [type=checkbox] false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), 'form [type=checkbox]'), 'form [type=checkbox]');
Y.Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), 'for [type=checkbox]'), 'for [type=checkbox] false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), '[type=checkbox], button'), '[type=checkbox], button');
Y.Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), 'button, [type=checkbox]'), 'button, [type=checkbox]');
Y.Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), 'foo, button'), 'foo, button');
Y.Assert.isTrue(Selector.test(Y.Dom.get('checkbox-checked'), '[type=checkbox]:checked'), 'type=checkbox:checked');
Y.Assert.isTrue(Selector.test(Y.Dom.get('radio-checked'), ':checked'), ':checked (radio)');
Y.Assert.isFalse(Selector.test(Y.Dom.get('radio-unchecked'), ':checked'), ':checked (radio) false pos');
Y.Assert.isFalse(Selector.test(Y.Dom.get('checkbox-unchecked'), '[type=checkbox]:checked'), 'type=checkbox:checked false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.get('checkbox-unchecked'), '[type=checkbox]:not(:checked)'), 'type=checkbox:not(:checked)');
},
testRootQuery: function() {
var all = Y.Dom.get('nth-test').getElementsByTagName('li');
Y.ArrayAssert.itemsAreEqual(all, $('li', 'nth-test'), 'id as root');
Y.ArrayAssert.itemsAreEqual([], $('li', 'nth-tes'), 'id as root false pos');
Y.ArrayAssert.itemsAreEqual(all, $('li', Y.Dom.get('nth-test')), 'node as root');
Y.ArrayAssert.itemsAreEqual(all, $('#nth-test li', Y.Dom.get('root-test')), 'id selector w/root');
Y.ArrayAssert.itemsAreEqual([], $('#root-test li', Y.Dom.get('nth-test')), 'id selector w/root false pos');
Y.ArrayAssert.itemsAreEqual([], $('#root-test li', Y.Dom.get('nth-test')), 'id selector w/root false pos');
Y.ArrayAssert.itemsAreEqual([Y.Dom.get('nth-test')], $('> ol', 'root-test'), "$('> ol', 'root-test')");
Y.ArrayAssert.itemsAreEqual([Y.Dom.get('root-test')], $('+ div', 'empty'), "$('+ div', 'empty')");
},
testNthLastChild: function() {
var all = Y.Dom.get('nth-test').getElementsByTagName('li');
var odd = Y.Dom.getElementsByClassName('even', 'li', 'nth-test');
var even = Y.Dom.getElementsByClassName('odd', 'li', 'nth-test');
var four1 = Y.Dom.getElementsByClassName('last-four-1', 'li', 'nth-test');
Y.ArrayAssert.itemsAreEqual(odd, $('li:nth-last-child(2n+1)'), '2n+1');
Y.ArrayAssert.itemsAreEqual(odd, $('li:nth-last-child(odd)'), 'odd');
Y.ArrayAssert.itemsAreEqual(even, $('li:nth-last-child(2n+0)'), '2n+0');
Y.ArrayAssert.itemsAreEqual(even, $('li:nth-last-child(2n)'), '2n');
Y.ArrayAssert.itemsAreEqual(even, $('li:nth-last-child(even)'), 'even');
Y.ArrayAssert.itemsAreEqual(four1, $('li:nth-last-child(4n+1)'), '4n+1');
},
testNthType: function() {
var all = Y.Dom.get('nth-test').getElementsByTagName('li');
var odd = Y.Dom.getElementsByClassName('odd', 'li', 'nth-test');
var even = Y.Dom.getElementsByClassName('even', 'li', 'nth-test');
var three1 = Y.Dom.getElementsByClassName('three-1', 'li', 'nth-test');
var four1 = Y.Dom.getElementsByClassName('four-1', 'li', 'nth-test');
var four2 = Y.Dom.getElementsByClassName('four-2', 'li', 'nth-test');
var four3 = Y.Dom.getElementsByClassName('four-3', 'li', 'nth-test');
var four4 = Y.Dom.getElementsByClassName('four-4', 'li', 'nth-test');
Y.ArrayAssert.itemsAreEqual(odd, $('li:nth-of-type(odd)'), 'odd');
},
testNthChild: function() {
var all = Y.Dom.get('nth-test').getElementsByTagName('li');
var odd = Y.Dom.getElementsByClassName('odd', 'li', 'nth-test');
var even = Y.Dom.getElementsByClassName('even', 'li', 'nth-test');
var three1 = Y.Dom.getElementsByClassName('three-1', 'li', 'nth-test');
var four1 = Y.Dom.getElementsByClassName('four-1', 'li', 'nth-test');
var four2 = Y.Dom.getElementsByClassName('four-2', 'li', 'nth-test');
var four3 = Y.Dom.getElementsByClassName('four-3', 'li', 'nth-test');
var four4 = Y.Dom.getElementsByClassName('four-4', 'li', 'nth-test');
Y.ArrayAssert.itemsAreEqual(even[1], $('li:nth-child(2)'), '2');
Y.ArrayAssert.itemsAreEqual(even[1], $('li:nth-child(0n+2)'), '0n+2');
Y.ArrayAssert.itemsAreEqual(three1, $('li:nth-child(3n+1)'), '3n+1');
Y.ArrayAssert.itemsAreEqual(all, $('li:nth-child(n+1)'), 'n+1');
// from http://www.w3.org/TR/css3-selectors/#nth-child-pseudo examples
Y.ArrayAssert.itemsAreEqual(odd, $('li:nth-child(2n+1)'), '2n+1');
Y.ArrayAssert.itemsAreEqual(odd, $('li:nth-child(odd)'), 'odd');
Y.ArrayAssert.itemsAreEqual(even, $('li:nth-child(2n+0)'), '2n+0');
Y.ArrayAssert.itemsAreEqual(even, $('li:nth-child(2n)'), '2n');
Y.ArrayAssert.itemsAreEqual(even, $('li:nth-child(even)'), 'even');
Y.ArrayAssert.itemsAreEqual(four1, $('li:nth-child(4n+1)'), '4n+1');
Y.ArrayAssert.itemsAreEqual(four2, $('li:nth-child(4n+2)'), '4n+2');
Y.ArrayAssert.itemsAreEqual(four3, $('li:nth-child(4n+3)'), '4n+3');
Y.ArrayAssert.itemsAreEqual(four4, $('li:nth-child(4n+4)'), '4n+4');
Y.ArrayAssert.itemsAreEqual(even[0], $('li:nth-child(0n+1)'), '0n+1');
Y.ArrayAssert.itemsAreEqual(even[0], $('li:nth-child(1)'), '1');
Y.ArrayAssert.itemsAreEqual(all, $('li:nth-child(1n+0)'), '1n+0');
Y.ArrayAssert.itemsAreEqual(all, $('li:nth-child(n+0)'), 'n+0');
},
testSelector: function() {
Y.ArrayAssert.itemsAreEqual($('.not-button', 'test-inputs'), $('input:not([type=button])', 'test-inputs'), 'input[type=radio], input[type=checkbox] = input:not([type=button])');
Y.ArrayAssert.itemsAreEqual($('p, p'), document.getElementsByTagName('p'), 'p, p');
Y.ArrayAssert.itemsAreEqual($('p', null, true), document.getElementsByTagName('p')[0], 'p (firstOnly)');
Y.ArrayAssert.itemsAreEqual($('.Foo'), [], '.Foo');
Y.ArrayAssert.itemsAreEqual($('p ~ p'), [children[1], children[2]], 'p ~ p');
Y.ArrayAssert.itemsAreEqual([], $('#demo.bar p'), '#demo.bar p');
Y.ArrayAssert.itemsAreEqual(Y.Dom.get('demo').getElementsByTagName('p'), $('#demo.foo p'), '#demo.foo p');
Y.ArrayAssert.itemsAreEqual(Y.Dom.get('demo').getElementsByTagName('p'), $('.foo p'), '.foo p');
Y.ArrayAssert.itemsAreEqual(Y.Dom.get('demo').getElementsByTagName('p'), $('#demo p'), '#demo p');
Y.ArrayAssert.itemsAreEqual($('p > em'), [Y.Dom.getFirstChild('demo-first-child')], 'p > em');
Y.ArrayAssert.itemsAreEqual(Y.Dom.getElementsByClassName('para'), $('[class~=para]'), '[class=~para]');
Y.ArrayAssert.itemsAreEqual(document.body.getElementsByTagName('p'), $('body div p'), 'body div p');
Y.ArrayAssert.itemsAreEqual([], $('#demo .madeup'), '#demo .madeup');
Y.ArrayAssert.itemsAreEqual(Y.Dom.getElementsByClassName('para', 'p'), $('div .para'), 'div .para');
Y.ArrayAssert.itemsAreEqual(Y.Dom.getElementsByClassName('first', null, 'demo'), $('#demo .first'), '#demo .first');
Y.ArrayAssert.itemsAreEqual(document.getElementsByTagName('div'), $('div'), 'div');
Y.ArrayAssert.itemsAreEqual(document.body.getElementsByTagName('div'), $('body div'), 'body div');
Y.ArrayAssert.itemsAreEqual([demoFirstChild, Y.Dom.getNextSibling(demoFirstChild)], $('#demo p:not(.last)'), '#demo p:not(.last)');
Y.ArrayAssert.itemsAreEqual(Y.Dom.get('demo2').getElementsByTagName('div'), $('div:contains(child of demo2)', 'demo2'), 'div:contains:(child of demo2) ');
Y.ArrayAssert.itemsAreEqual([Y.Dom.get('class-bar')], $('.Bar'), '.Bar');
Y.ArrayAssert.itemsAreEqual([Y.Dom.get('root-test')], $('#empty + div'), "$('#empty + div')");
Y.Assert.areEqual(Y.Dom.get('empty'), $('div[custom]', null, true), "$('div[custom]', null, true)");
Y.ArrayAssert.itemsAreEqual([Y.Dom.get('test-obj')], $('object[custom]'), "$('object[custom]')");
Y.Assert.areEqual(Y.Dom.get('empty'), $('div[customAttr]', null, true), "$('div[customAttr]', null, true)");
Y.ArrayAssert.itemsAreEqual([Y.Dom.get('test-obj')], $('object[customAttr]'), "$('object[customAttr]')");
Y.Assert.areEqual(Y.Dom.get('href-test'), $('[href=foo.html]', null, true), '[href=foo.html]');
Y.Assert.areEqual(Y.Dom.get('href-test'), $('a[href=foo.html]', null, true), 'a[href=foo.html]');
Y.Assert.areEqual(Y.Dom.get('href-test2'), $('[href=http://foo.com/foo.html]', null, true), 'href=http://foo.com/foo.html');
Y.Assert.areEqual(Y.Dom.get('href-test3'), $('[href=http://foo.com/foo.html?foo=foo&bar=bar]', null, true), 'href=http://foo.com/foo.html?foo=foo&bar=baz');
Y.Assert.areEqual(Y.Dom.get('selector-script'), $('head > script[src=../../../build/selector/selector.js]', null, true), 'head > script[src=../../../build/selector/selector.js]');
Y.Assert.areEqual(Y.Dom.get('href-test'), $('a[href]', null, true), 'a[href]');
Y.Assert.areEqual(Y.Dom.get('href-test'), $('body [href]', null, true), 'body [href]');
Y.Assert.areEqual(Y.Dom.get('foo-script'), $('head > script[src=http://foo.com/bar.js]', null, true), 'head > script[src=http://foo.com/bar.js]');
}
});
var simpleTest = new YAHOO.tool.TestCase({
name: 'Simple Node Test',
testPseudo: function() {
//Y.Assert.isTrue(Selector.test(Y.Dom.get('empty'), ':empty'), 'empty');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo2'), ':empty'), 'empty false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.getLastChild('demo'), ':last-child'), 'last-child');
Y.Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), 'p:first-child'), 'first-child tag');
Y.Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), ':first-child'), 'first-child');
Y.Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), ':only-of-type'), 'only-of-type false pos');
Y.Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), ':first-child.last'), 'first-child class false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), ':first-child.first'), 'first-child class');
Y.Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), ':only-child'), 'only-child');
Y.Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), ':first-of-type'), 'first-of-type');
Y.Assert.isTrue(Selector.test(Y.Dom.getLastChild('demo'), ':last-of-type'), 'last-of-type');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), ':not(.foo)'), 'not(.foo)');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), ':not(p)'), 'not(p)');
Y.Assert.isTrue(Selector.test(demoFirstChild, ':not(.last)'), 'not(.last)');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo2'), ':contains(demo2)'), 'contains(demo2)');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo2'), ':not(:contains(demo2))'), ':not(:contains(demo2))');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo2'), ':not(:contains(demo1))'), ':not(:contains(demo1))');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo2'), ':contains(child of demo2)'), 'contains(child of demo2)');
},
testAttr: function() {
Y.Assert.isTrue(Selector.test(Y.Dom.get('href-test'), '[href=foo.html]'), 'href=foo.html');
Y.Assert.isTrue(Selector.test(Y.Dom.get('href-test2'), '[href=http://foo.com/foo.html]'), 'href=http://foo.com/foo.html');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[title]'), 'title exists');
Y.Assert.isFalse(Selector.test(Y.Dom.getFirstChild('demo'), '[title]'), 'title exists false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id=demo]'), 'id equality');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id|=de]'), '[id|=de]');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id|=me]'), 'id starts with false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id~=demo]'), 'id includes');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[title~=demo]'), 'title includes');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id!=demo]'), 'id negation');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id!=bar]'), 'id negation');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id^=de]'), 'id starts with');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id$=mo]'), 'id ends with');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id$=m]'), 'id ends with false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id*=em]'), 'id substr');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), '[id*=ex]'), 'id substr false pos');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '[id=demo][title~=demo]'), 'multiple attributes');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div[id=demo][title~=demo]'), 'tag & multiple attributes');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div[title=this is a demo]'), 'attribute with spaces');
var img = document.createElement('img');
img.className = 'testing';
img.src = 'http://upload.wikimedia.org/wikipedia/en/3/3b/Gokukidadult.jpg';
Y.Assert.isTrue(Selector.test(img, 'img[src=' + img.src + ']'), 'img[src=');
Y.Assert.isTrue(Selector.test(img, 'img[src=' + img.src + '].testing'), 'img[src=...][class=testing]');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo2'), '[title="this is a \[demo\]"]'), '[title="this is a [demo]"]');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo2'), '[id=demo2][title="this is a [demo]"]'), '[id=demo2][title="this is a [demo]"]');
},
testClass: function() {
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '.foo'), 'class match');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div.foo'), 'tag match');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'span.foo'), 'tag false positive');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '#demo.foo'), 'id match');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), '.baz'), 'class false positive');
Y.Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), '.first.para'), 'multiple class match');
Y.Assert.isTrue(Selector.test(Y.Dom.getFirstChild('demo'), 'p.first.para'), 'tag & multiple class match');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), '.foo.bar'), 'multiple class false pos');
},
testId: function() {
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '#demo'), 'id match');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div#demo'), 'tag match');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'div#dmo'), 'id false positive');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'span#demo'), 'tag false positive');
},
testTag: function() {
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), 'div'), 'tag match');
Y.Assert.isFalse(Selector.test(Y.Dom.get('demo'), 'span'), 'tag false positive');
Y.Assert.isTrue(Selector.test(Y.Dom.get('demo'), '*'), 'universal tag');
},
testOffDom: function() {
var html = '<div class="foo"><p id="foo-p">i am <em class="em1">foo</em>, who are <em class="em2">you</em>?</p></div>';
var node = document.createElement('div');
node.innerHTML = html;
Y.Assert.areEqual('foo', $('[class]', node, true).className, "$('[class]', node, true)");
Y.Assert.areEqual('foo', $('.foo', node, true).className, "$('.foo', node, true)");
Y.Assert.areEqual('foo', $('div.foo', node, true).className, "$('div.foo', node, true)");
Y.Assert.areEqual('foo', $('> div', node, true).className, "$('> div', node, true)");
Y.Assert.areEqual('P', $('> div > p', node, true).tagName, "$('> div > p', node, true)");
Y.Assert.areEqual('P', $('#foo-p', node, true).tagName, "$('#foo-p', node, true)");
Y.Assert.areEqual('P', $('div #foo-p', node, true).tagName, "$('div #foo-p', node, true)");
Y.Assert.areEqual('P', $('div > #foo-p', node, true).tagName, "$('div > #foo-p', node, true)");
Y.Assert.areEqual('em1', $('em', node, true).className, "$('em', node, true)");
Y.Assert.areEqual('em1', $('.em1', node, true).className, "$('.em1', node, true)");
Y.Assert.areEqual('em1', $('em[class]', node, true).className, "$('em[class]', node, true)");
Y.Assert.areEqual('em1', $('.em1', node, true).className, "$('.em1', node, true)");
Y.Assert.areEqual('em2', $('> div p > em + em', node, true).className, "$('> div p > em + em', node, true)");
Y.Assert.areEqual('em2', $('> div > p > em + em', node, true).className, "$('> div > p > em + em', node, true)");
Y.Assert.areEqual('em2', $('em + em', node, true).className, "$('em + em', node, true)");
Y.Assert.areEqual('em2', $('em ~ em', node, true).className, "$('em ~ em', node, true)");
Y.Assert.isNull($('+ em', node, true), "($('+ em', node, true)");
Y.Assert.isNull($('~ em', node, true), "($('~ em', node, true)");
}
});
suite.add(selectorQueryAll);
suite.add(simpleTest);
YAHOO.tool.TestRunner.add(suite);
YAHOO.tool.TestRunner.run();
};
</script>
<style type="text/css">
#root-test > ol > li > ol li {
color: red;
}
</style>
</head>
<body>
<div id="demo" class="foo" title="this is a demo">
<p class="para first" id="demo-first-child"><em>lorem ipsum</em></p>
<p class="para">lorem ipsum</p>
<p class="para last">lorem ipsum</p>
</div>
<div id="demo2" title="this is a [demo]">
<div>child of demo2</div>
</div>
<div id="demo3">
<div>
<p id="demo3-grandchild">grandchild of demo3</p>
</div>
</div>
<object id="test-obj" custom="custom attribute" customAttr="mixed case custom attribute"></object>
<div id="empty" custom="custom attribute" customAttr="mixed case custom attribute"></div>
<div id="root-test">
<ol id="nth-test">
<li class="odd three-1 four-1">foo</li>
<li class="even four-2 last-four-1">foo</li>
<li class="odd four-3">foo</li>
<li class="even three-1 four-4">foo</li>
<li class="odd four-1">foo</li>
<li class="even four-2 last-four-1">foo</li>
<li class="odd three-1 four-3" id="test-lang-english" lang="english">foo</li>
<li class="even four-4" id="test-lang-none">foo</li>
<li class="odd four-1" lang="en-US" id="test-lang-en-us">foo</li>
<li class="even three-1 four-2 last-four-1" lang="en" id="test-lang-en">foo</li>
</ol>
</div>
<a id="href-test" href="foo.html">foo</a>
<a id="href-test2" href="http://foo.com/foo.html">foo</a>
<a id="href-test3" href="http://foo.com/foo.html?foo=foo&bar=bar">foo</a>
<form id="test-inputs">
<input type="checkbox" id="checkbox-unchecked" class="not-button">
<input type="checkbox" checked id="checkbox-checked-noval" class="not-button">
<input type="checkbox" checked="true" id="checkbox-checked" class="not-button">
<input type="radio" id="radio-unchecked" class="not-button">
<input type="radio" checked="true" id="radio-checked" class="not-button">
<input type="button" value="foo">
</form>
<div class="Bar" id="class-bar"></div>
</body>
</html>

View file

@ -1,54 +0,0 @@
<!doctype html>
<html>
<head>
<title>Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/slider/assets/skins/sam/slider.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<style type="text/css">
#bg1 {
height: 28px;
width: 228px;
}
</style>
</head>
<body class="yui-skin-sam">
<div id="log"></div>
<div class="markup">
<div id="bg1" class="yui-h-slider">
<div id="t1" class="yui-slider-thumb"><img src="../../../build/slider/assets/skins/sam/thumb-n.gif" alt="slider thumb"></div>
</div>
</div>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/animation/animation.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop.js"></script>
<script type="text/javascript" src="../../../build/slider/slider.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var log = new YAHOO.widget.LogReader('log',{ newestOnTop: false }),
s1,
startCount = 1,
endCount = 1;
var s1 = YAHOO.widget.Slider.getHorizSlider('bg1','t1',0,200);
s1.backgroundEnabled = false;
s1.subscribe('slideStart', function () {
YAHOO.log('slideStart: ' + (startCount++));
});
s1.subscribe('slideEnd', function () {
YAHOO.log('slideEnd: ' + (endCount++));
});
});
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js" ></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,231 +0,0 @@
<!doctype html>
<html>
<head>
<title>Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/slider/assets/skins/sam/slider.css">
<style type="text/css">
fieldset { border: 0 none; }
#log { position: absolute; top: 10px; right: 10px; }
span.go { background: #090; color: #fff; }
span.stop { background: #900; color: #fff; }
.yui-skin-sam .yui-region-slider {
background: #ccc;
}
.markup {
overflow: hidden;
width: 600px;
}
.ex {
float: left;
border: 3px solid #ccc;
margin: 1ex;
padding: 10px;
width: 250px;
height: 350px;
}
.h { height: 150px; }
</style>
</head>
<body class="yui-skin-sam">
<div id="log"></div>
<div class="markup">
<div class="ex h">
<h3>Horizontal</h3>
<p>
<label><input type="checkbox" checked="checked" id="bg_s1"> backgroundEnabled</label>
<label><input type="checkbox" checked="checked" id="anim_s1"> animate</label>
<label for="v_s1">Value</label>
<input type="text" size="3" id="v_s1" name="v" value="0">
<input type="button" id="go_s1" value="go">
<em id="rpt_s1">0</em>
</p>
<div id="rail_s1" class="yui-h-slider" tabindex="-1">
<div id="t_s1" class="yui-slider-thumb">
<img src="../../../build/slider/assets/thumb-n.gif" alt="slider thumb">
</div>
</div>
</div>
<div class="ex h">
<h3>Graduated Horizontal</h3>
<p>
<label><input type="checkbox" checked="checked" id="bg_s2"> backgroundEnabled</label>
<label><input type="checkbox" checked="checked" id="anim_s2"> animate</label>
<label for="v_s2">Value</label>
<input type="text" size="3" id="v_s2" name="v" value="0">
<input type="button" id="go_s2" value="go">
<em id="rpt_s2">0</em>
</p>
<div id="rail_s2" class="yui-h-slider" tabindex="-1">
<div id="t_s2" class="yui-slider-thumb">
<img src="../../../build/slider/assets/thumb-n.gif" alt="slider thumb">
</div>
</div>
</div>
<div class="ex">
<h3>Vertical</h3>
<p>
<label><input type="checkbox" checked="checked" id="bg_s3"> backgroundEnabled</label>
<label><input type="checkbox" checked="checked" id="anim_s3"> animate</label>
<label for="v_s3">Value</label>
<input type="text" size="3" id="v_s3" name="v" value="0">
<input type="button" id="go_s3" value="go">
<em id="rpt_s3">0</em>
</p>
<div id="rail_s3" class="yui-v-slider" tabindex="-1">
<div id="t_s3" class="yui-slider-thumb">
<img src="../../../build/slider/assets/thumb-bar.gif" alt="slider thumb">
</div>
</div>
</div>
<div class="ex">
<h3>Graduated Vertical</h3>
<p>
<label><input type="checkbox" checked="checked" id="bg_s4"> backgroundEnabled</label>
<label><input type="checkbox" checked="checked" id="anim_s4"> animate</label>
<label for="v_s4">Value</label>
<input type="text" size="3" id="v_s4" name="v" value="0">
<input type="button" id="go_s4" value="go">
<em id="rpt_s4">0</em>
</p>
<div id="rail_s4" class="yui-v-slider" tabindex="-1">
<div id="t_s4" class="yui-slider-thumb">
<img src="../../../build/slider/assets/thumb-bar.gif" alt="slider thumb">
</div>
</div>
</div>
<div class="ex">
<h3>Region</h3>
<p>
<label><input type="checkbox" checked="checked" id="bg_s5"> backgroundEnabled</label>
<label><input type="checkbox" checked="checked" id="anim_s5"> animate</label>
<label for="v_s5">Value</label>
<input type="text" size="3" id="v_s5" name="v" value="0,0">
<input type="button" id="go_s5" value="go">
<em id="rpt_s5">0,0</em>
</p>
<div id="rail_s5" class="yui-region-slider" tabindex="-1">
<div id="t_s5" class="yui-slider-thumb">
<img src="../../../build/slider/assets/thumb-n.gif" alt="slider thumb">
</div>
</div>
</div>
<div class="ex">
<h3>Graduated Region</h3>
<p>
<label><input type="checkbox" checked="checked" id="bg_s6"> backgroundEnabled</label>
<label><input type="checkbox" checked="checked" id="anim_s6"> animate</label>
<label for="v_s6">Value</label>
<input type="text" size="3" id="v_s6" name="v" value="0,0">
<input type="button" id="go_s6" value="go">
<em id="rpt_s6">0,0</em>
</p>
<div id="rail_s6" class="yui-region-slider" tabindex="-1">
<div id="t_s6" class="yui-slider-thumb">
<img src="../../../build/slider/assets/thumb-n.gif" alt="slider thumb">
</div>
</div>
</div>
</div>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop.js"></script>
<script type="text/javascript" src="../../../build/slider/slider-debug.js"></script>
<!--script type="text/javascript" src="http://yui.yahooapis.com/2.6.0/build/slider/slider-debug.js"></script-->
<script type="text/javascript" src="../../../build/animation/animation.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var log = new YAHOO.widget.LogReader('log',{ newestOnTop: false }),
$ = YAHOO.util.Dom.get,
Event = YAHOO.util.Event,
horiz, vert, region, horiz_g, vert_g, region_g,
startCount = 1,
endCount = 1;
YAHOO.log('','warn');
YAHOO.log('','error');
YAHOO.log('','time');
YAHOO.log('','window');
log.hideCategory('info');
log.hideCategory('warn');
log.hideCategory('error');
log.hideCategory('time');
log.hideCategory('window');
log.hideSource('global');
log.hideSource('LogReader');
horiz = YAHOO.widget.Slider.getHorizSlider('rail_s1','t_s1',0,200);
horiz_g = YAHOO.widget.Slider.getHorizSlider('rail_s2','t_s2',0,200,20);
vert = YAHOO.widget.Slider.getVertSlider('rail_s3','t_s3',0,200);
vert_g = YAHOO.widget.Slider.getVertSlider('rail_s4','t_s4',0,200,20);
region = YAHOO.widget.Slider.getSliderRegion('rail_s5','t_s5',0,200,0,200);
region_g = YAHOO.widget.Slider.getSliderRegion('rail_s6','t_s6',0,200,0,200,20);
function init(slider,i) {
slider.subscribe('slideStart', function () {
YAHOO.log('slideStart: ' + (startCount++),'GO','debug');
});
slider.subscribe('change', (slider.thumb._isRegion ?
function (val) {
$('rpt_s'+i).innerHTML = val.x + ', ' + val.y;
} :
function (val) {
$('rpt_s'+i).innerHTML = val;
}));
slider.subscribe('slideEnd', function () {
YAHOO.log('slideEnd: ' + (endCount++),'STOP','debug');
});
Event.on('bg_s'+i,'click', function (e) {
if (slider) {
slider.backgroundEnabled = this.checked;
}
});
Event.on('anim_s'+i,'click', function (e) {
if (slider) {
slider.animate = this.checked;
}
});
Event.on('go_s'+i,'click', (slider.thumb._isRegion ?
function () {
var v = $('v_s'+i).value.split(/,/);
slider.setRegionValue(+v[0],+v[1]);
} :
function () {
slider.setValue(+($('v_s'+i).value));
}));
slider.animate = $('anim_s'+i).checked;
slider.backgroundEnabled = $('bg_s'+i).checked;
}
init(horiz,1);
init(horiz_g,2);
init(vert,3);
init(vert_g,4);
init(region,5);
init(region_g,6);
});
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js" ></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

View file

@ -1,40 +0,0 @@
<!doctype html>
<html>
<head>
<title>Test Page</title>
<link type="text/css" rel="stylesheet" href="/assets/dpSyntaxHighlighter.css">
<link type="text/css" rel="stylesheet" href="../../../build/logger/assets/skins/sam/logger.css">
<link type="text/css" rel="stylesheet" href="../../../build/slider/assets/skins/sam/slider.css">
<style type="text/css">
</style>
</head>
<body class="yui-skin-sam">
<div id="log"></div>
<div class="markup">
<div id="bg" class="yui-h-slider" tabindex="-1">
<div id="t" class="yui-slider-thumb">
<img src="../../../build/slider/assets/thumb-n.gif" alt="slider thumb">
</div>
</div>
</div>
<script type="text/javascript" src="../../../build/yahoo/yahoo.js"></script>
<script type="text/javascript" src="../../../build/dom/dom.js"></script>
<script type="text/javascript" src="../../../build/event/event.js"></script>
<script type="text/javascript" src="../../../build/dragdrop/dragdrop.js"></script>
<script type="text/javascript" src="../../../build/animation/animation.js"></script>
<script type="text/javascript" src="../../../build/slider/slider.js"></script>
<script type="text/javascript" src="../../../build/logger/logger.js"></script>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var log = new YAHOO.widget.LogReader('log',{ newestOnTop: false }),s;
var s = YAHOO.widget.Slider.getHorizSlider('bg','t',0,200);
});
</script>
<script type="text/javascript" src="/assets/dpSyntaxHighlighter.js" ></script>
<script type="text/javascript" src="/assets/dpSyntaxHighlightExample.js"></script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show more