-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 6b045dc
Showing
5 changed files
with
1,775 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
var Cornish = (function() { | ||
function ParseError(message) { this.message = message; } | ||
|
||
function getSegmentPart(part) { | ||
if (part.length == 0) | ||
return Infinity; | ||
var timeParts = part.split(':'); | ||
realTimeParts = []; | ||
timeParts.forEach(function(number) { | ||
if (number.length == 0) | ||
number = '00'; | ||
var floatNumber = parseFloat(number); | ||
if (isNaN(floatNumber)) | ||
throw new ParseError('unable to parse time: ' + part); | ||
realTimeParts.push(floatNumber); | ||
}); | ||
switch (realTimeParts.length) { | ||
case 1: | ||
// It's a pure seconds-based offset. | ||
return realTimeParts[0]; | ||
|
||
case 2: | ||
// It's in MM:SS format. | ||
return realTimeParts[0] * 60 + realTimeParts[1]; | ||
|
||
case 3: | ||
// It's in HH:MM:SS format. | ||
return ((realTimeParts[0] * 60) + realTimeParts[1]) * 60 + | ||
realTimeParts[2]; | ||
|
||
default: | ||
throw new ParseError('too many colons in time: ' + part); | ||
} | ||
} | ||
|
||
var self = { | ||
parseDurations: function parseDurations(str) { | ||
var durations = []; | ||
if (typeof(str) == 'string') { | ||
var segments = str.split(','); | ||
segments.forEach(function(segment) { | ||
segment = segment.trim(); | ||
segment = segment.split('-'); | ||
if (segment.length > 2) { | ||
throw new ParseError("multiple dashes in segment:" + str); | ||
} else if (segment.length == 1) { | ||
throw new ParseError("missing dash in segment:" + str); | ||
} | ||
var duration = { | ||
start: getSegmentPart(segment[0]), | ||
end: getSegmentPart(segment[1]) | ||
}; | ||
if (duration.start == Infinity) | ||
duration.start = 0; | ||
durations.push(duration); | ||
}); | ||
return durations; | ||
} | ||
|
||
throw new ParseError("unable to parse time durations: " + str); | ||
}, | ||
ParseError: ParseError | ||
}; | ||
|
||
return self; | ||
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>Hello there.</title> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>Cornish Unit Tests</title> | ||
<link rel="stylesheet" href="qunit.css"> | ||
|
||
<script src="qunit.js"></script> | ||
<script src="../cornish.js"></script> | ||
|
||
<script> | ||
module("Cornish.parseDurations()"); | ||
|
||
test("errors thrown when input can't be parsed", function() { | ||
function ensureFails(str) { | ||
raises(function() { | ||
Cornish.parseDurations(str); | ||
}, Cornish.ParseError, "'" + str + "' fails"); | ||
} | ||
|
||
ensureFails("blah"); | ||
ensureFails(); | ||
ensureFails(''); | ||
ensureFails("1"); | ||
ensureFails("1-2-3"); | ||
ensureFails("1,2-3"); | ||
ensureFails("1:05"); | ||
ensureFails("1:05:24:23-"); | ||
ensureFails("1:05-1:fooble"); | ||
}); | ||
|
||
test("durations provided when input can be parsed", function() { | ||
function ensureWorks(str, expected) { | ||
deepEqual(Cornish.parseDurations(str), expected, | ||
"Cornish.parseDurations('" + str + "') works"); | ||
} | ||
|
||
ensureWorks("1-5", [{start: 1, end: 5}]); | ||
ensureWorks("1:05-1:20", [{start: 65, end: 80}]); | ||
ensureWorks("-1:00:20", [{start: 0, end: 3620}]); | ||
ensureWorks("20-", [{start: 20, end: Infinity}]); | ||
ensureWorks("1:05-1:20", [{start: 65, end: 80}]); | ||
}); | ||
</script> | ||
|
||
<h1 id="qunit-header">Cornish Unit Tests</h1> | ||
<h2 id="qunit-banner"></h2> | ||
<div id="qunit-testrunner-toolbar"></div> | ||
<h2 id="qunit-userAgent"></h2> | ||
<ol id="qunit-tests"></ol> | ||
<div id="qunit-fixture"></div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,215 @@ | ||
/** Font Family and Sizes */ | ||
|
||
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { | ||
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; | ||
} | ||
|
||
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } | ||
#qunit-tests { font-size: smaller; } | ||
|
||
|
||
/** Resets */ | ||
|
||
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult { | ||
margin: 0; | ||
padding: 0; | ||
} | ||
|
||
|
||
/** Header */ | ||
|
||
#qunit-header { | ||
padding: 0.5em 0 0.5em 1em; | ||
|
||
color: #8699a4; | ||
background-color: #0d3349; | ||
|
||
font-size: 1.5em; | ||
line-height: 1em; | ||
font-weight: normal; | ||
|
||
border-radius: 15px 15px 0 0; | ||
-moz-border-radius: 15px 15px 0 0; | ||
-webkit-border-top-right-radius: 15px; | ||
-webkit-border-top-left-radius: 15px; | ||
} | ||
|
||
#qunit-header a { | ||
text-decoration: none; | ||
color: #c2ccd1; | ||
} | ||
|
||
#qunit-header a:hover, | ||
#qunit-header a:focus { | ||
color: #fff; | ||
} | ||
|
||
#qunit-banner { | ||
height: 5px; | ||
} | ||
|
||
#qunit-testrunner-toolbar { | ||
padding: 0.5em 0 0.5em 2em; | ||
color: #5E740B; | ||
background-color: #eee; | ||
} | ||
|
||
#qunit-userAgent { | ||
padding: 0.5em 0 0.5em 2.5em; | ||
background-color: #2b81af; | ||
color: #fff; | ||
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; | ||
} | ||
|
||
|
||
/** Tests: Pass/Fail */ | ||
|
||
#qunit-tests { | ||
list-style-position: inside; | ||
} | ||
|
||
#qunit-tests li { | ||
padding: 0.4em 0.5em 0.4em 2.5em; | ||
border-bottom: 1px solid #fff; | ||
list-style-position: inside; | ||
} | ||
|
||
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { | ||
display: none; | ||
} | ||
|
||
#qunit-tests li strong { | ||
cursor: pointer; | ||
} | ||
|
||
#qunit-tests li a { | ||
padding: 0.5em; | ||
color: #c2ccd1; | ||
text-decoration: none; | ||
} | ||
#qunit-tests li a:hover, | ||
#qunit-tests li a:focus { | ||
color: #000; | ||
} | ||
|
||
#qunit-tests ol { | ||
margin-top: 0.5em; | ||
padding: 0.5em; | ||
|
||
background-color: #fff; | ||
|
||
border-radius: 15px; | ||
-moz-border-radius: 15px; | ||
-webkit-border-radius: 15px; | ||
|
||
box-shadow: inset 0px 2px 13px #999; | ||
-moz-box-shadow: inset 0px 2px 13px #999; | ||
-webkit-box-shadow: inset 0px 2px 13px #999; | ||
} | ||
|
||
#qunit-tests table { | ||
border-collapse: collapse; | ||
margin-top: .2em; | ||
} | ||
|
||
#qunit-tests th { | ||
text-align: right; | ||
vertical-align: top; | ||
padding: 0 .5em 0 0; | ||
} | ||
|
||
#qunit-tests td { | ||
vertical-align: top; | ||
} | ||
|
||
#qunit-tests pre { | ||
margin: 0; | ||
white-space: pre-wrap; | ||
word-wrap: break-word; | ||
} | ||
|
||
#qunit-tests del { | ||
background-color: #e0f2be; | ||
color: #374e0c; | ||
text-decoration: none; | ||
} | ||
|
||
#qunit-tests ins { | ||
background-color: #ffcaca; | ||
color: #500; | ||
text-decoration: none; | ||
} | ||
|
||
/*** Test Counts */ | ||
|
||
#qunit-tests b.counts { color: black; } | ||
#qunit-tests b.passed { color: #5E740B; } | ||
#qunit-tests b.failed { color: #710909; } | ||
|
||
#qunit-tests li li { | ||
margin: 0.5em; | ||
padding: 0.4em 0.5em 0.4em 0.5em; | ||
background-color: #fff; | ||
border-bottom: none; | ||
list-style-position: inside; | ||
} | ||
|
||
/*** Passing Styles */ | ||
|
||
#qunit-tests li li.pass { | ||
color: #5E740B; | ||
background-color: #fff; | ||
border-left: 26px solid #C6E746; | ||
} | ||
|
||
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } | ||
#qunit-tests .pass .test-name { color: #366097; } | ||
|
||
#qunit-tests .pass .test-actual, | ||
#qunit-tests .pass .test-expected { color: #999999; } | ||
|
||
#qunit-banner.qunit-pass { background-color: #C6E746; } | ||
|
||
/*** Failing Styles */ | ||
|
||
#qunit-tests li li.fail { | ||
color: #710909; | ||
background-color: #fff; | ||
border-left: 26px solid #EE5757; | ||
} | ||
|
||
#qunit-tests > li:last-child { | ||
border-radius: 0 0 15px 15px; | ||
-moz-border-radius: 0 0 15px 15px; | ||
-webkit-border-bottom-right-radius: 15px; | ||
-webkit-border-bottom-left-radius: 15px; | ||
} | ||
|
||
#qunit-tests .fail { color: #000000; background-color: #EE5757; } | ||
#qunit-tests .fail .test-name, | ||
#qunit-tests .fail .module-name { color: #000000; } | ||
|
||
#qunit-tests .fail .test-actual { color: #EE5757; } | ||
#qunit-tests .fail .test-expected { color: green; } | ||
|
||
#qunit-banner.qunit-fail { background-color: #EE5757; } | ||
|
||
|
||
/** Result */ | ||
|
||
#qunit-testresult { | ||
padding: 0.5em 0.5em 0.5em 2.5em; | ||
|
||
color: #2b81af; | ||
background-color: #D2E0E6; | ||
|
||
border-bottom: 1px solid white; | ||
} | ||
|
||
/** Fixture */ | ||
|
||
#qunit-fixture { | ||
position: absolute; | ||
top: -10000px; | ||
left: -10000px; | ||
} |
Oops, something went wrong.