-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
5 #comment Added Asserts Folder to test. All sample files are downloa…
…ded from https://filesamples.com/
- Loading branch information
1 parent
7627912
commit 47447a1
Showing
18 changed files
with
1,944 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,34 @@ | ||
p.one { | ||
border-style: solid; | ||
border-width: 5px; | ||
} | ||
|
||
p.two { | ||
border-style: solid; | ||
border-width: medium; | ||
} | ||
|
||
p.three { | ||
border-style: dotted; | ||
border-width: 2px; | ||
} | ||
|
||
p.four { | ||
border-style: dotted; | ||
border-width: thick; | ||
} | ||
|
||
p.five { | ||
border-style: double; | ||
border-width: 15px; | ||
} | ||
|
||
p.six { | ||
border-style: double; | ||
border-width: thick; | ||
} | ||
|
||
p.seven { | ||
border-style: solid; | ||
border-width: 2px 10px 4px 20px; | ||
} |
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,8 @@ | ||
div { | ||
border: 1px solid black; | ||
background-color: lightblue; | ||
padding-top: 50px; | ||
padding-right: 30px; | ||
padding-bottom: 50px; | ||
padding-left: 80px; | ||
} |
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,43 @@ | ||
html, body, div, span, applet, object, iframe, | ||
h1, h2, h3, h4, h5, h6, p, blockquote, pre, | ||
a, abbr, acronym, address, big, cite, code, | ||
del, dfn, em, img, ins, kbd, q, s, samp, | ||
small, strike, strong, sub, sup, tt, var, | ||
b, u, i, center, | ||
dl, dt, dd, ol, ul, li, | ||
fieldset, form, label, legend, | ||
table, caption, tbody, tfoot, thead, tr, th, td, | ||
article, aside, canvas, details, embed, | ||
figure, figcaption, footer, header, hgroup, | ||
menu, nav, output, ruby, section, summary, | ||
time, mark, audio, video { | ||
margin: 0; | ||
padding: 0; | ||
border: 0; | ||
font-size: 100%; | ||
font: inherit; | ||
vertical-align: baseline; | ||
} | ||
/* HTML5 display-role reset for older browsers */ | ||
article, aside, details, figcaption, figure, | ||
footer, header, hgroup, menu, nav, section { | ||
display: block; | ||
} | ||
body { | ||
line-height: 1; | ||
} | ||
ol, ul { | ||
list-style: none; | ||
} | ||
blockquote, q { | ||
quotes: none; | ||
} | ||
blockquote:before, blockquote:after, | ||
q:before, q:after { | ||
content: ''; | ||
content: none; | ||
} | ||
table { | ||
border-collapse: collapse; | ||
border-spacing: 0; | ||
} |
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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,105 @@ | ||
'use strict' | ||
|
||
function isArguments (thingy) { | ||
return thingy != null && typeof thingy === 'object' && thingy.hasOwnProperty('callee') | ||
} | ||
|
||
var types = { | ||
'*': {label: 'any', check: function () { return true }}, | ||
A: {label: 'array', check: function (thingy) { return Array.isArray(thingy) || isArguments(thingy) }}, | ||
S: {label: 'string', check: function (thingy) { return typeof thingy === 'string' }}, | ||
N: {label: 'number', check: function (thingy) { return typeof thingy === 'number' }}, | ||
F: {label: 'function', check: function (thingy) { return typeof thingy === 'function' }}, | ||
O: {label: 'object', check: function (thingy) { return typeof thingy === 'object' && thingy != null && !types.A.check(thingy) && !types.E.check(thingy) }}, | ||
B: {label: 'boolean', check: function (thingy) { return typeof thingy === 'boolean' }}, | ||
E: {label: 'error', check: function (thingy) { return thingy instanceof Error }}, | ||
Z: {label: 'null', check: function (thingy) { return thingy == null }} | ||
} | ||
|
||
function addSchema (schema, arity) { | ||
var group = arity[schema.length] = arity[schema.length] || [] | ||
if (group.indexOf(schema) === -1) group.push(schema) | ||
} | ||
|
||
var validate = module.exports = function (rawSchemas, args) { | ||
if (arguments.length !== 2) throw wrongNumberOfArgs(['SA'], arguments.length) | ||
if (!rawSchemas) throw missingRequiredArg(0, 'rawSchemas') | ||
if (!args) throw missingRequiredArg(1, 'args') | ||
if (!types.S.check(rawSchemas)) throw invalidType(0, ['string'], rawSchemas) | ||
if (!types.A.check(args)) throw invalidType(1, ['array'], args) | ||
var schemas = rawSchemas.split('|') | ||
var arity = {} | ||
|
||
schemas.forEach(function (schema) { | ||
for (var ii = 0; ii < schema.length; ++ii) { | ||
var type = schema[ii] | ||
if (!types[type]) throw unknownType(ii, type) | ||
} | ||
if (/E.*E/.test(schema)) throw moreThanOneError(schema) | ||
addSchema(schema, arity) | ||
if (/E/.test(schema)) { | ||
addSchema(schema.replace(/E.*$/, 'E'), arity) | ||
addSchema(schema.replace(/E/, 'Z'), arity) | ||
if (schema.length === 1) addSchema('', arity) | ||
} | ||
}) | ||
var matching = arity[args.length] | ||
if (!matching) { | ||
throw wrongNumberOfArgs(Object.keys(arity), args.length) | ||
} | ||
for (var ii = 0; ii < args.length; ++ii) { | ||
var newMatching = matching.filter(function (schema) { | ||
var type = schema[ii] | ||
var typeCheck = types[type].check | ||
return typeCheck(args[ii]) | ||
}) | ||
if (!newMatching.length) { | ||
var labels = matching.map(function (schema) { | ||
return types[schema[ii]].label | ||
}).filter(function (schema) { return schema != null }) | ||
throw invalidType(ii, labels, args[ii]) | ||
} | ||
matching = newMatching | ||
} | ||
} | ||
|
||
function missingRequiredArg (num) { | ||
return newException('EMISSINGARG', 'Missing required argument #' + (num + 1)) | ||
} | ||
|
||
function unknownType (num, type) { | ||
return newException('EUNKNOWNTYPE', 'Unknown type ' + type + ' in argument #' + (num + 1)) | ||
} | ||
|
||
function invalidType (num, expectedTypes, value) { | ||
var valueType | ||
Object.keys(types).forEach(function (typeCode) { | ||
if (types[typeCode].check(value)) valueType = types[typeCode].label | ||
}) | ||
return newException('EINVALIDTYPE', 'Argument #' + (num + 1) + ': Expected ' + | ||
englishList(expectedTypes) + ' but got ' + valueType) | ||
} | ||
|
||
function englishList (list) { | ||
return list.join(', ').replace(/, ([^,]+)$/, ' or $1') | ||
} | ||
|
||
function wrongNumberOfArgs (expected, got) { | ||
var english = englishList(expected) | ||
var args = expected.every(function (ex) { return ex.length === 1 }) | ||
? 'argument' | ||
: 'arguments' | ||
return newException('EWRONGARGCOUNT', 'Expected ' + english + ' ' + args + ' but got ' + got) | ||
} | ||
|
||
function moreThanOneError (schema) { | ||
return newException('ETOOMANYERRORTYPES', | ||
'Only one error type per argument signature is allowed, more than one found in "' + schema + '"') | ||
} | ||
|
||
function newException (code, msg) { | ||
var e = new Error(msg) | ||
e.code = code | ||
if (Error.captureStackTrace) Error.captureStackTrace(e, validate) | ||
return e | ||
} |
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,105 @@ | ||
'use strict' | ||
|
||
function isArguments (thingy) { | ||
return thingy != null && typeof thingy === 'object' && thingy.hasOwnProperty('callee') | ||
} | ||
|
||
var types = { | ||
'*': {label: 'any', check: function () { return true }}, | ||
A: {label: 'array', check: function (thingy) { return Array.isArray(thingy) || isArguments(thingy) }}, | ||
S: {label: 'string', check: function (thingy) { return typeof thingy === 'string' }}, | ||
N: {label: 'number', check: function (thingy) { return typeof thingy === 'number' }}, | ||
F: {label: 'function', check: function (thingy) { return typeof thingy === 'function' }}, | ||
O: {label: 'object', check: function (thingy) { return typeof thingy === 'object' && thingy != null && !types.A.check(thingy) && !types.E.check(thingy) }}, | ||
B: {label: 'boolean', check: function (thingy) { return typeof thingy === 'boolean' }}, | ||
E: {label: 'error', check: function (thingy) { return thingy instanceof Error }}, | ||
Z: {label: 'null', check: function (thingy) { return thingy == null }} | ||
} | ||
|
||
function addSchema (schema, arity) { | ||
var group = arity[schema.length] = arity[schema.length] || [] | ||
if (group.indexOf(schema) === -1) group.push(schema) | ||
} | ||
|
||
var validate = module.exports = function (rawSchemas, args) { | ||
if (arguments.length !== 2) throw wrongNumberOfArgs(['SA'], arguments.length) | ||
if (!rawSchemas) throw missingRequiredArg(0, 'rawSchemas') | ||
if (!args) throw missingRequiredArg(1, 'args') | ||
if (!types.S.check(rawSchemas)) throw invalidType(0, ['string'], rawSchemas) | ||
if (!types.A.check(args)) throw invalidType(1, ['array'], args) | ||
var schemas = rawSchemas.split('|') | ||
var arity = {} | ||
|
||
schemas.forEach(function (schema) { | ||
for (var ii = 0; ii < schema.length; ++ii) { | ||
var type = schema[ii] | ||
if (!types[type]) throw unknownType(ii, type) | ||
} | ||
if (/E.*E/.test(schema)) throw moreThanOneError(schema) | ||
addSchema(schema, arity) | ||
if (/E/.test(schema)) { | ||
addSchema(schema.replace(/E.*$/, 'E'), arity) | ||
addSchema(schema.replace(/E/, 'Z'), arity) | ||
if (schema.length === 1) addSchema('', arity) | ||
} | ||
}) | ||
var matching = arity[args.length] | ||
if (!matching) { | ||
throw wrongNumberOfArgs(Object.keys(arity), args.length) | ||
} | ||
for (var ii = 0; ii < args.length; ++ii) { | ||
var newMatching = matching.filter(function (schema) { | ||
var type = schema[ii] | ||
var typeCheck = types[type].check | ||
return typeCheck(args[ii]) | ||
}) | ||
if (!newMatching.length) { | ||
var labels = matching.map(function (schema) { | ||
return types[schema[ii]].label | ||
}).filter(function (schema) { return schema != null }) | ||
throw invalidType(ii, labels, args[ii]) | ||
} | ||
matching = newMatching | ||
} | ||
} | ||
|
||
function missingRequiredArg (num) { | ||
return newException('EMISSINGARG', 'Missing required argument #' + (num + 1)) | ||
} | ||
|
||
function unknownType (num, type) { | ||
return newException('EUNKNOWNTYPE', 'Unknown type ' + type + ' in argument #' + (num + 1)) | ||
} | ||
|
||
function invalidType (num, expectedTypes, value) { | ||
var valueType | ||
Object.keys(types).forEach(function (typeCode) { | ||
if (types[typeCode].check(value)) valueType = types[typeCode].label | ||
}) | ||
return newException('EINVALIDTYPE', 'Argument #' + (num + 1) + ': Expected ' + | ||
englishList(expectedTypes) + ' but got ' + valueType) | ||
} | ||
|
||
function englishList (list) { | ||
return list.join(', ').replace(/, ([^,]+)$/, ' or $1') | ||
} | ||
|
||
function wrongNumberOfArgs (expected, got) { | ||
var english = englishList(expected) | ||
var args = expected.every(function (ex) { return ex.length === 1 }) | ||
? 'argument' | ||
: 'arguments' | ||
return newException('EWRONGARGCOUNT', 'Expected ' + english + ' ' + args + ' but got ' + got) | ||
} | ||
|
||
function moreThanOneError (schema) { | ||
return newException('ETOOMANYERRORTYPES', | ||
'Only one error type per argument signature is allowed, more than one found in "' + schema + '"') | ||
} | ||
|
||
function newException (code, msg) { | ||
var e = new Error(msg) | ||
e.code = code | ||
if (Error.captureStackTrace) Error.captureStackTrace(e, validate) | ||
return e | ||
} |
Oops, something went wrong.