Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Created gh-pages branch via GitHub

  • Loading branch information...
commit 29504c1789b83e3720db349d55b0e8ae8da983cd 0 parents
@finnsson authored
160 index.html
@@ -0,0 +1,160 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="chrome=1">
+ <title>Test-generator by finnsson</title>
+
+ <link rel="stylesheet" href="stylesheets/styles.css">
+ <link rel="stylesheet" href="stylesheets/pygment_trac.css">
+ <script src="javascripts/scale.fix.js"></script>
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="wrapper">
+ <header>
+ <h1>Test-generator</h1>
+ <p>Automagically (using Template Haskell) generates the Haskell-code you need when using HUnit</p>
+ <p class="view"><a href="https://github.com/finnsson/test-generator">View the Project on GitHub <small>finnsson/test-generator</small></a></p>
+ <ul>
+ <li><a href="https://github.com/finnsson/test-generator/zipball/master">Download <strong>ZIP File</strong></a></li>
+ <li><a href="https://github.com/finnsson/test-generator/tarball/master">Download <strong>TAR Ball</strong></a></li>
+ <li><a href="https://github.com/finnsson/test-generator">Fork On <strong>GitHub</strong></a></li>
+ </ul>
+ </header>
+ <section>
+ <h1>test-framework-th</h1>
+
+<p>Haskell-module to automagically generate repetetive code when writing HUnit/Quickcheck/Quickcheck2-tests.</p>
+
+<h2>testGroupGenerator</h2>
+
+<h3>signature</h3>
+
+<pre><code>testGroupGenerator :: ExpQ
+</code></pre>
+
+<h3>usage</h3>
+
+<pre><code>myTestGroup = $(testGroupGenerator)
+</code></pre>
+
+<h3>example</h3>
+
+<pre><code>-- file SomeModule.hs
+{-# LANGUAGE TemplateHaskell #-}
+module SomeModule where
+import Test.Framework.TH
+import Test.Framework
+import Test.HUnit
+import Test.Framework.Providers.HUnit
+import Test.Framework.Providers.QuickCheck2
+
+-- observe this line!
+fooTestGroup = $(testGroupGenerator)
+main = defaultMain [fooTestGroup]
+case_1 = do 1 @=? 1
+case_2 = do 2 @=? 2
+prop_reverse xs = reverse (reverse xs) == xs
+ where types = xs::[Int]
+</code></pre>
+
+<p>is the same as</p>
+
+<pre><code>-- file SomeModule.hs
+{-# LANGUAGE TemplateHaskell #-}
+module SomeModule where
+import Test.Framework.TH
+import Test.Framework
+import Test.HUnit
+import Test.Framework.Providers.HUnit
+import Test.Framework.Providers.QuickCheck2
+
+-- observe this line!
+fooTestGroup = testGroup "SomeModule" [testCase "1" case_1, testCase "2" case_2, testProperty "reverse" prop_reverse]
+main = defaultMain [fooTestGroup]
+case_1 = do 1 @=? 1
+case_2 = do 2 @=? 2
+prop_reverse xs = reverse (reverse xs) == xs
+ where types = xs::[Int]
+</code></pre>
+
+<h2>defaultMainGenerator</h2>
+
+<h3>signature</h3>
+
+<pre><code>defaultMainGenerator :: ExpQ
+</code></pre>
+
+<h3>usage</h3>
+
+<pre><code>main = $(defaultMainGenerator)
+</code></pre>
+
+<h3>example</h3>
+
+<pre><code>-- file SomeModule.hs
+{-# LANGUAGE TemplateHaskell #-}
+module SomeModule where
+import Test.Framework.TH
+import Test.Framework
+import Test.HUnit
+import Test.Framework.Providers.HUnit
+import Test.Framework.Providers.QuickCheck2
+
+-- observe this line!
+main = $(defaultMainGenerator)
+case_1 = do 1 @=? 1
+case_2 = do 2 @=? 2
+prop_reverse xs = reverse (reverse xs) == xs
+ where types = xs::[Int]
+</code></pre>
+
+<p>will automagically extract prop_reverse, case_1 and case_2 and run them as well as present them as belonging to the testGroup 'SomeModule'. The above code is the same as</p>
+
+<pre><code>-- file SomeModule.hs
+{-# LANGUAGE TemplateHaskell #-}
+module SomeModule where
+import Test.Framework.TH
+import Test.Framework
+import Test.HUnit
+import Test.Framework.Providers.HUnit
+import Test.Framework.Providers.QuickCheck2
+
+-- observe this line!
+main =
+ defaultMain [
+ testGroup "SomeModule" [ testCase "1" case_1, testCase "2" case_2, testProperty "reverse" prop_reverse]
+ ]
+
+case_1 = do 1 @=? 1
+case_2 = do 2 @=? 2
+prop_reverse xs = reverse (reverse xs) == xs
+ where types = xs::[Int]
+</code></pre>
+
+<p>and will give the following result</p>
+
+<pre><code>me: runghc MyModuleTest.hs
+MyModuleTest:
+ reverse: [OK, passed 100 tests]
+ 1: [OK]
+ 2: [OK]
+
+ Properties Test Cases Total
+Passed 1 2 3
+Failed 0 0 0
+Total 1 2 3
+</code></pre>
+ </section>
+ <footer>
+ <p>This project is maintained by <a href="https://github.com/finnsson">finnsson</a></p>
+ <p><small>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/orderedlist">orderedlist</a></small></p>
+ </footer>
+ </div>
+ <!--[if !IE]><script>fixScale(document);</script><!--<![endif]-->
+ </body>
+</html>
20 javascripts/scale.fix.js
@@ -0,0 +1,20 @@
+fixScale = function(doc) {
+
+ var addEvent = 'addEventListener',
+ type = 'gesturestart',
+ qsa = 'querySelectorAll',
+ scales = [1, 1],
+ meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : [];
+
+ function fix() {
+ meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1];
+ doc.removeEventListener(type, fix, true);
+ }
+
+ if ((meta = meta[meta.length - 1]) && addEvent in doc) {
+ fix();
+ scales = [.25, 1.6];
+ doc[addEvent](type, fix, true);
+ }
+
+};
1  params.json
@@ -0,0 +1 @@
+{"name":"Test-generator","body":"# test-framework-th\r\n\r\nHaskell-module to automagically generate repetetive code when writing HUnit/Quickcheck/Quickcheck2-tests.\r\n\r\n## testGroupGenerator\r\n\r\n### signature\r\n\r\n testGroupGenerator :: ExpQ\r\n\r\n### usage\r\n\r\n myTestGroup = $(testGroupGenerator)\r\n\r\n### example\r\n\r\n -- file SomeModule.hs\r\n {-# LANGUAGE TemplateHaskell #-}\r\n module SomeModule where\r\n import Test.Framework.TH\r\n import Test.Framework\r\n import Test.HUnit\r\n import Test.Framework.Providers.HUnit\r\n import Test.Framework.Providers.QuickCheck2\r\n \r\n -- observe this line! \r\n fooTestGroup = $(testGroupGenerator)\r\n main = defaultMain [fooTestGroup]\r\n case_1 = do 1 @=? 1\r\n case_2 = do 2 @=? 2\r\n prop_reverse xs = reverse (reverse xs) == xs\r\n where types = xs::[Int]\r\n\r\nis the same as\r\n\r\n\r\n -- file SomeModule.hs\r\n {-# LANGUAGE TemplateHaskell #-}\r\n module SomeModule where\r\n import Test.Framework.TH\r\n import Test.Framework\r\n import Test.HUnit\r\n import Test.Framework.Providers.HUnit\r\n import Test.Framework.Providers.QuickCheck2\r\n \r\n -- observe this line!\r\n fooTestGroup = testGroup \"SomeModule\" [testCase \"1\" case_1, testCase \"2\" case_2, testProperty \"reverse\" prop_reverse]\r\n main = defaultMain [fooTestGroup]\r\n case_1 = do 1 @=? 1\r\n case_2 = do 2 @=? 2\r\n prop_reverse xs = reverse (reverse xs) == xs\r\n where types = xs::[Int]\r\n\r\n\r\n## defaultMainGenerator\r\n\r\n### signature\r\n\r\n defaultMainGenerator :: ExpQ\r\n\r\n### usage\r\n\r\n main = $(defaultMainGenerator)\r\n\r\n### example\r\n\r\n\r\n -- file SomeModule.hs\r\n {-# LANGUAGE TemplateHaskell #-}\r\n module SomeModule where\r\n import Test.Framework.TH\r\n import Test.Framework\r\n import Test.HUnit\r\n import Test.Framework.Providers.HUnit\r\n import Test.Framework.Providers.QuickCheck2\r\n \r\n -- observe this line! \r\n main = $(defaultMainGenerator)\r\n case_1 = do 1 @=? 1\r\n case_2 = do 2 @=? 2\r\n prop_reverse xs = reverse (reverse xs) == xs\r\n where types = xs::[Int]\r\n\r\n\r\nwill automagically extract prop_reverse, case_1 and case_2 and run them as well as present them as belonging to the testGroup 'SomeModule'. The above code is the same as\r\n\r\n -- file SomeModule.hs\r\n {-# LANGUAGE TemplateHaskell #-}\r\n module SomeModule where\r\n import Test.Framework.TH\r\n import Test.Framework\r\n import Test.HUnit\r\n import Test.Framework.Providers.HUnit\r\n import Test.Framework.Providers.QuickCheck2\r\n \r\n -- observe this line! \r\n main =\r\n defaultMain [\r\n testGroup \"SomeModule\" [ testCase \"1\" case_1, testCase \"2\" case_2, testProperty \"reverse\" prop_reverse]\r\n ]\r\n\r\n case_1 = do 1 @=? 1\r\n case_2 = do 2 @=? 2\r\n prop_reverse xs = reverse (reverse xs) == xs\r\n where types = xs::[Int]\r\n\r\n\r\nand will give the following result\r\n\r\n me: runghc MyModuleTest.hs \r\n MyModuleTest:\r\n reverse: [OK, passed 100 tests]\r\n 1: [OK]\r\n 2: [OK]\r\n \r\n Properties Test Cases Total \r\n Passed 1 2 3 \r\n Failed 0 0 0 \r\n Total 1 2 3 \r\n","tagline":"Automagically (using Template Haskell) generates the Haskell-code you need when using HUnit","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}
69 stylesheets/pygment_trac.css
@@ -0,0 +1,69 @@
+.highlight { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+.type-csharp .highlight .k { color: #0000FF }
+.type-csharp .highlight .kt { color: #0000FF }
+.type-csharp .highlight .nf { color: #000000; font-weight: normal }
+.type-csharp .highlight .nc { color: #2B91AF }
+.type-csharp .highlight .nn { color: #000000 }
+.type-csharp .highlight .s { color: #A31515 }
+.type-csharp .highlight .sc { color: #A31515 }
251 stylesheets/styles.css
@@ -0,0 +1,251 @@
+@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700);
+
+body {
+ padding:50px;
+ font:14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color:#777;
+ font-weight:300;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color:#222;
+ margin:0 0 20px;
+}
+
+p, ul, ol, table, pre, dl {
+ margin:0 0 20px;
+}
+
+h1, h2, h3 {
+ line-height:1.1;
+}
+
+h1 {
+ font-size:28px;
+}
+
+h2 {
+ color:#393939;
+}
+
+h3, h4, h5, h6 {
+ color:#494949;
+}
+
+a {
+ color:#39c;
+ font-weight:400;
+ text-decoration:none;
+}
+
+a small {
+ font-size:11px;
+ color:#777;
+ margin-top:-0.6em;
+ display:block;
+}
+
+.wrapper {
+ width:860px;
+ margin:0 auto;
+}
+
+blockquote {
+ border-left:1px solid #e5e5e5;
+ margin:0;
+ padding:0 0 0 20px;
+ font-style:italic;
+}
+
+code, pre {
+ font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal;
+ color:#333;
+ font-size:12px;
+}
+
+pre {
+ padding:8px 15px;
+ background: #f8f8f8;
+ border-radius:5px;
+ border:1px solid #e5e5e5;
+ overflow-x: auto;
+}
+
+table {
+ width:100%;
+ border-collapse:collapse;
+}
+
+th, td {
+ text-align:left;
+ padding:5px 10px;
+ border-bottom:1px solid #e5e5e5;
+}
+
+dt {
+ color:#444;
+ font-weight:700;
+}
+
+th {
+ color:#444;
+}
+
+img {
+ max-width:100%;
+}
+
+header {
+ width:270px;
+ float:left;
+ position:fixed;
+}
+
+header ul {
+ list-style:none;
+ height:40px;
+
+ padding:0;
+
+ background: #eee;
+ background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
+ background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+ background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+
+ border-radius:5px;
+ border:1px solid #d2d2d2;
+ box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0;
+ width:270px;
+}
+
+header li {
+ width:89px;
+ float:left;
+ border-right:1px solid #d2d2d2;
+ height:40px;
+}
+
+header ul a {
+ line-height:1;
+ font-size:11px;
+ color:#999;
+ display:block;
+ text-align:center;
+ padding-top:6px;
+ height:40px;
+}
+
+strong {
+ color:#222;
+ font-weight:700;
+}
+
+header ul li + li {
+ width:88px;
+ border-left:1px solid #fff;
+}
+
+header ul li + li + li {
+ border-right:none;
+ width:89px;
+}
+
+header ul a strong {
+ font-size:14px;
+ display:block;
+ color:#222;
+}
+
+section {
+ width:500px;
+ float:right;
+ padding-bottom:50px;
+}
+
+small {
+ font-size:11px;
+}
+
+hr {
+ border:0;
+ background:#aaa;
+ height:1px;
+ margin:0 0 20px;
+}
+
+footer {
+ width:270px;
+ float:left;
+ position:fixed;
+ bottom:50px;
+}
+
+@media print, screen and (max-width: 960px) {
+
+ div.wrapper {
+ width:auto;
+ margin:0;
+ }
+
+ header, section, footer {
+ float:none;
+ position:static;
+ width:auto;
+ }
+
+ header {
+ padding-right:320px;
+ }
+
+ section {
+ border:1px solid #e5e5e5;
+ border-width:1px 0;
+ padding:20px 0;
+ margin:0 0 20px;
+ }
+
+ header a small {
+ display:inline;
+ }
+
+ header ul {
+ position:absolute;
+ right:50px;
+ top:52px;
+ }
+}
+
+@media print, screen and (max-width: 720px) {
+ body {
+ word-wrap:break-word;
+ }
+
+ header {
+ padding:0;
+ }
+
+ header ul, header p.view {
+ position:static;
+ }
+}
+
+@media print, screen and (max-width: 480px) {
+ body {
+ padding:15px;
+ }
+
+ header ul {
+ display:none;
+ }
+}
+
+@media print {
+ body {
+ padding:0.4in;
+ font-size:12pt;
+ color:#444;
+ }
+}
Please sign in to comment.
Something went wrong with that request. Please try again.