| a/landingpage/index.html | b/landingpage/index.html | ||
|---|---|---|---|
... |
... |
||
| 27 | </a> |
27 | </a> |
| 28 | </div> <!-- /.navbar-header --> |
28 | </div> <!-- /.navbar-header --> |
| 29 | 29 | ||
| 30 | <div class="collapse navbar-collapse navbar-ex1-collapse"> |
30 | <div class="collapse navbar-collapse navbar-ex1-collapse"> |
| 31 | <ul class="nav navbar-nav navbar-right"> |
31 | <ul class="nav navbar-nav navbar-right"> |
| 32 | <li><a href="#features" class="nav-link">Features</a></li> |
32 | <li><a href="#jumbotron" class="nav-link">About</a></li> |
| 33 | <li><a href="#tour-head" class="nav-link">Tour</a></li> |
33 | <li><a href="#features" class="nav-link">Features</a></li> |
| 34 | <li><a href="#Download">Download</a></li> |
34 | <li><a href="#tour-head" class="nav-link">Tour</a></li> |
| 35 | <li><a href="#start" class="nav-link">Getting started</a></li> |
35 | <li><a href="#Download">Download</a></li> |
| 36 | <li><a href="#tuturial" class="nav-link">Tutorial</a></li> |
36 | <li><a href="#start" class="nav-link">Getting started</a></li> |
| 37 | <li><a href="#about" class="nav-link">About</a></li> |
37 | <li><a href="#Resources" class="nav-link">Resources</a></li> |
| 38 | </ul> |
38 | </ul> |
| 39 | </div> <!-- /.navbar-collapse --> |
39 | </div> <!-- /.navbar-collapse --> |
| 40 | </div> <!-- /.container --> |
40 | </div> <!-- /.container --> |
| 41 | </nav> <!-- /.navbar --> |
41 | </nav> <!-- /.navbar --> |
| 42 | 42 | ||
| 43 | 43 | ||
| 44 | <div id="top" class="jumbotron"> |
44 | <div id="top" class="jumbotron"> |
| 45 | <div class="container"> |
45 | <div class="container"> |
| 46 | <h1>CfUnit — CODESYS Forge Unit Testing framework</h1> |
46 | <h1> |
| 47 | <h2>'CfUnit' is motivated by absence of 'good and free' open source IEC61131-3 automated unit-testing solutions. Developed in ST for CODESYS based PLC systems. MIT-Licensed</h2> |
47 | CfUnit — CODESYS Forge Unit Testing framework |
| 48 | <p><a class="btn btn-primary btn-lg" href="#Download">Download <span class="glyphicon glyphicon-circle-arrow-right"></span></a></p> |
48 | </h1> |
| 49 | </div> <!-- /.container --> |
49 | <h2> |
| 50 | </div> <!-- /.jumbotron --> |
50 | 'CfUnit' is motivated by absence of 'good and free' open source IEC61131-3 automated unit-testing solutions. |
| 51 | 51 | Written in Structured-Text for CODESYS based PLC systems. MIT-licensed. |
|
| 52 | 52 | </h2> |
|
| 53 | <div class="container"> |
53 | <p><a class="btn btn-primary btn-lg" href="#Download">Download <span class="glyphicon glyphicon-circle-arrow-right"></span></a></p> |
| 54 | <h3 id="features" class="subhead">Features</h3> |
54 | <br> |
| 55 | <div class="row benefits"> |
55 | <h4> |
| 56 | <div class="col-md-4 col-sm-6 benefit"> |
56 | Forked from <a href="https://www.tcunit.org">TcUnit</a> by Jakob Sagatowski for TwinCAT3. Assistance provided |
| 57 | <div class="benefit-ball"> |
57 | by zer0g & Ingo was greatly appreciated. Without their assistance, porting alone would have taken me several |
| 58 | <span class="glyphicon glyphicon-star"></span> |
58 | months. Kudos for helping me out with various tickets and providing invalueable feedback! |
| 59 | </div> |
59 | <h4> |
| 60 | <h3>Easy</h3> |
60 | </div> <!-- /.container --> |
| 61 | Download,<br>Install,<br>Reference,<br>Ready! |
61 | </div> <!-- /.jumbotron --> |
| 62 | </div> <!-- /.benefit --> |
62 | |
| 63 | <div class="col-md-4 col-sm-6 benefit"> |
63 | |
| 64 | <div class="benefit-ball"> |
64 | <div class="container"> |
| 65 | <span class="glyphicon glyphicon-ok"></span> |
65 | <h3 id="features" class="subhead">Features</h3> |
| 66 | </div> |
66 | <div class="row benefits"> |
| 67 | <h3>Powerful</h3> |
67 | <div class="col-md-4 col-sm-6 benefit"> |
| 68 | Higher productivity,<br>Fewer bugs,<br>Cleaner code,<br>CI/CD integration*<br>*under development</p> |
68 | <div class="benefit-ball"> |
| 69 | </div> <!-- /.benefit --> |
69 | <span class="glyphicon glyphicon-star"></span> |
| 70 | <div class="col-md-4 col-sm-6 benefit"> |
70 | </div> |
| 71 | <div class="benefit-ball"> |
71 | <h3>Easy</h3> |
| 72 | <span class="glyphicon glyphicon-heart"></span> |
72 | Download,<br>Install,<br>Reference,<br>Ready! |
| 73 | </div> |
73 | </div> <!-- /.benefit --> |
| 74 | <h3>Free</h3> |
74 | <div class="col-md-4 col-sm-6 benefit"> |
| 75 | <p>MIT-Licensed</p> |
75 | <div class="benefit-ball"> |
| 76 | </div> <!-- /.benefit --> |
76 | <span class="glyphicon glyphicon-ok"></span> |
| 77 | </div> <!-- /.row --> |
77 | </div> |
| 78 | </div> <!-- /.container --> |
78 | <h3>Powerful</h3> |
| 79 | 79 | Higher productivity,<br>Fewer bugs,<br>Cleaner code,<br>CI/CD integration*<br>*under development</p> |
|
| 80 | 80 | </div> <!-- /.benefit --> |
|
| 81 | <div class="container-alternate"> |
81 | <div class="col-md-4 col-sm-6 benefit"> |
| 82 | <div class="container"> |
82 | <div class="benefit-ball"> |
| 83 | <h3 id="tour-head" class="subhead">Tour</h3> |
83 | <span class="glyphicon glyphicon-heart"></span> |
| 84 | <div class="row"> |
84 | </div> |
| 85 | <div class="col-md-12"> |
85 | <h3>Free</h3> |
| 86 | <div id="tour" class="carousel slide"> |
86 | <p>MIT-Licensed</p> |
| 87 | <ol class="carousel-indicators"> |
87 | </div> <!-- /.benefit --> |
| 88 | <li data-target="#tour" data-slide-to="0" class="active"></li> |
88 | </div> <!-- /.row --> |
| 89 | <li data-target="#tour" data-slide-to="1"></li> |
89 | </div> <!-- /.container --> |
| 90 | <li data-target="#tour" data-slide-to="2"></li> |
90 | |
| 91 | <li data-target="#tour" data-slide-to="3"></li> |
91 | |
| 92 | <li data-target="#tour" data-slide-to="4"></li> |
92 | <div class="container-alternate"> |
| 93 | </ol> |
93 | <div class="container"> |
| 94 | <div class="carousel-inner"> |
94 | <h3 id="tour-head" class="subhead">Tour</h3> |
| 95 | <div class="item active"> |
95 | <div class="row"> |
| 96 | <img src="img/installpackage.gif"> |
96 | <div class="col-md-12"> |
| 97 | <div class="carousel-caption d-md-block"> |
97 | <div id="tour" class="carousel slide"> |
| 98 | Step 1: Installation |
98 | <ol class="carousel-indicators"> |
| 99 | </div> |
99 | <li data-target="#tour" data-slide-to="0" class="active"></li> |
| 100 | </div> |
100 | <li data-target="#tour" data-slide-to="1"></li> |
| 101 | <div class="item"> |
101 | <li data-target="#tour" data-slide-to="2"></li> |
| 102 | <img src="img/TestSuite.png"> |
102 | <li data-target="#tour" data-slide-to="3"></li> |
| 103 | <div class="carousel-caption d-md-block"> |
103 | <li data-target="#tour" data-slide-to="4"></li> |
| 104 | Step 2: Define a Test Suite |
104 | </ol> |
| 105 | </div> |
105 | <div class="carousel-inner"> |
| 106 | </div> |
106 | <div class="item active"> |
| 107 | <div class="item"> |
107 | <img src="img/installpackage.gif"> |
| 108 | <img src="img/TestMethod.png"> |
108 | <div class="carousel-caption d-md-block"> |
| 109 | <div class="carousel-caption d-md-block"> |
109 | Step 1: Installation |
| 110 | Step 3: Define Test Method |
110 | </div> |
| 111 | </div> |
111 | </div> |
| 112 | </div> |
112 | <div class="item"> |
| 113 | <div class="item"> |
113 | <img src="img/TestSuite.png"> |
| 114 | <img src="img/programcall.png"> |
114 | <div class="carousel-caption d-md-block"> |
| 115 | <div class="carousel-caption d-md-block"> |
115 | Step 2: Define Test Suite(s) |
| 116 | Step 4: Define Program and call TestSuite |
116 | </div> |
| 117 | </div> |
117 | </div> |
| 118 | </div> |
118 | <div class="item"> |
| 119 | <div class="item"> |
119 | <img src="img/TestMethod.png"> |
| 120 | <img src="img/SimpleCfUnitExample.gif"> |
120 | <div class="carousel-caption d-md-block"> |
| 121 | <div class="carousel-caption d-md-block"> |
121 | Step 3: Define Test Method(s) |
| 122 | Step 5: Run Program and check TestLog |
122 | </div> |
| 123 | </div> |
123 | </div> |
| 124 | </div> |
124 | <div class="item"> |
| 125 | </div> |
125 | <img src="img/programcall.png"> |
| 126 | <a class="left carousel-control" href="#tour" data-slide="prev"> |
126 | <div class="carousel-caption d-md-block"> |
| 127 | <span class="glyphicon glyphicon-chevron-left"></span> |
127 | Step 4: Define TestProgram, call Test Suite |
| 128 | </a> |
128 | </div> |
| 129 | <a class="right carousel-control" href="#tour" data-slide="next"> |
129 | </div> |
| 130 | <span class="glyphicon glyphicon-chevron-right"></span> |
130 | <div class="item"> |
| 131 | </a> |
131 | <img src="img/SimpleCfUnitExample.gif"> |
| 132 | </div> <!-- #tour --> |
132 | <div class="carousel-caption d-md-block"> |
| 133 | </div> <!-- /.col-md-12 --> |
133 | Step 5: Run TestProgram and check TestLog |
| 134 | </div> <!-- /.row --> |
134 | </div> |
| 135 | </div> <!-- /.container --> |
135 | </div> |
| 136 | </div> <!-- /.container-alternate --> |
136 | </div> |
| 137 | 137 | <a class="left carousel-control" href="#tour" data-slide="prev"> |
|
| 138 | 138 | <span class="glyphicon glyphicon-chevron-left"></span> |
|
| 139 | <div class="container"> |
139 | </a> |
| 140 | <h3 id="Download" class="subhead">Download</h3> |
140 | <a class="right carousel-control" href="#tour" data-slide="next"> |
| 141 | <div class="row download"> |
141 | <span class="glyphicon glyphicon-chevron-right"></span> |
| 142 | <p class="col-md-4 col-sm-6"> |
142 | </a> |
| 143 | 143 | </div> <!-- #tour --> |
|
| 144 | </p> |
144 | </div> <!-- /.col-md-12 --> |
| 145 | <p> |
145 | </div> <!-- /.row --> |
| 146 | <ul class="col-md-4 col-sm-6"> |
146 | </div> <!-- /.container --> |
| 147 | <strong>Contains all you need:</strong> |
147 | </div> <!-- /.container-alternate --> |
| 148 | <ul> |
148 | |
| 149 | <li>CfUnit v1.0.0.0 Library</li> |
149 | |
| 150 | <li>Verifier Project</li> |
150 | <div class="container"> |
| 151 | <li>Simple Example Project</li> |
151 | <h3 id="Download" class="subhead">Download</h3> |
| 152 | </ul><br> |
152 | <div class="row download" > |
| 153 | <center> |
153 | <p> |
| 154 | <a href="https://forge.codesys.com/prj/cfunit/code/HEAD/tree/tags/v1.0.0.0/CfUnit.package?format=raw" class="btn btn-primary">Download Package</a> |
154 | <ul class="col-md-4 col-sm-6 text-center"> |
| 155 | </center> |
155 | <p> |
| 156 | </p> |
156 | <a href="https://forge.codesys.com/prj/cfunit/code/HEAD/tree/tags/v1.0.0.0/CfUnit.package?format=raw" class="btn btn-primary">CfUnit v1.0.0.0 Package</a> |
| 157 | </div> <!-- /.row Download --> |
157 | </p> |
| 158 | </div> <!-- /.container --> |
158 | <strong>Contains</strong> |
| 159 | 159 | <br>CfUnit Library |
|
| 160 | 160 | <br>Verifier Project |
|
| 161 | <div class="container"> |
161 | <br>Simple Example Project |
| 162 | <h3 id="start" class="subhead">Getting started</h3> |
162 | </p> |
| 163 | <div class="row start" align="center"> |
163 | </div> <!-- /.row Download --> |
| 164 | <div class="col-md-10 col-md-offset-1"> |
164 | |
| 165 | <ul> |
165 | |
| 166 | <li>Extend your test with <code>CfUnit.FB_TestSuite</code>,</li> |
166 | </div> <!-- /.container --> |
| 167 | <li>Add the attribute-pragma <code>{attribute ‘call_after_init’}</code>,</li> |
167 | <div class="container"> |
| 168 | <li>Define the inputs and define the expected output (result),</li> |
168 | <h3 id="start" class="subhead">Getting started</h3> |
| 169 | <li>Call the CfUnit-assert methods to compare the expected output to the actual output,</li> |
169 | <div class="row start" > |
| 170 | <li>Close the test with <code>TEST_FINISHED()</code> when finished.</li> |
170 | <p> |
| 171 | <li>Call the test method from the main FB Body</li> |
171 | <ul class="col-md-4 col-sm-6 text-center"> |
| 172 | </ul> |
172 | <strong>A detailed step by step tutorial for the Simple CfUnit example project can be found <a href="https://forge.codesys.com/prj/cfunit/home/Home/">here</a>.</strong> |
| 173 | </div> |
173 | <br>Extend your test with <code>CfUnit.FB_TestSuite</code>, |
| 174 | </div> <!-- /.start --> |
174 | <br>Add the attribute-pragma <code>{attribute ‘call_after_init’}</code>, |
| 175 | </div> <!-- /.container --> |
175 | <br>Define the inputs and define the expected output (result), |
| 176 | 176 | <br>Call the CfUnit-assert methods to compare the expected output to the actual output,i> |
|
| 177 | <div class="container"> |
177 | <br>Close the test with <code>TEST_FINISHED()</code> when finished. |
| 178 | <h3 id="tuturial" class="subhead">Tutorial</h3> |
178 | <br>Call the test method from the main FB Body |
| 179 | <div class="row tutorial"> |
179 | </p> |
| 180 | <div class="col-md-10 col-md-offset-1 text-center"> |
180 | </div> |
| 181 | </p> |
181 | </div> <!-- /.start --> |
| 182 | A step by step tutorial for the Simple CfUnit example project can be <a href="https://forge.codesys.com/prj/cfunit/home/Home/">found here.</a> |
182 | </div> <!-- /.container --> |
| 183 | </p> |
183 | |
| 184 | <p class="col-md-4 col-sm-6"> |
184 | |
| 185 | <strong>API</strong><br> |
185 | <div class="container"> |
| 186 | Online API reference can be <a href="https://forge.codesys.com/prj/cfunit/home/CfUnit%20API%20Reference/"> found here</a>. |
186 | <h3 id="Resources" class="subhead">Resources</h3> |
| 187 | </p> |
187 | <div class="row Resources"> |
| 188 | <p class="col-md-4 col-sm-6"> |
188 | <div class="col-md-10 col-md-offset-1 text-center"> |
| 189 | <strong>Q&A</strong><br> |
189 | <p class="col-md-4 col-sm-6"> |
| 190 | If you have any questions, you can drop <a href="https://forge.codesys.com/prj/cfunit/questions/">them here</a>.<br> |
190 | <strong>API</strong><br> |
| 191 | If you cannot find your anwser, you can always drop a question in the comment.<br> |
191 | Online API reference can be found <a href="https://forge.codesys.com/prj/cfunit/home/CfUnit%20API%20Reference/">here</a>. |
| 192 | Posted questions will be modderated into the Q&A for future reference. |
192 | </p> |
| 193 | </p> |
193 | <p class="col-md-4 col-sm-6"> |
| 194 | <p class="col-md-4 col-sm-6"> |
194 | <strong>Q&A</strong><br> |
| 195 | <strong>Bugs</strong><br> |
195 | If you have any questions, you can drop them <a href="https://forge.codesys.com/prj/cfunit/questions/">here</a>.<br> |
| 196 | Bugs can be reported by opening a <a href="https://forge.codesys.com/prj/cfunit/tickets/">ticket here</a>. |
196 | If you cannot find your anwser, you can always drop a question in the comment.<br> |
| 197 | </p> |
197 | Posted questions will be modderated into the Q&A for future reference. |
| 198 | </div> <!-- /.col-md-10 --> |
198 | </p> |
| 199 | </div> <!-- /.row --> |
199 | <p class="col-md-4 col-sm-6"> |
| 200 | </div> <!-- /.tutorial --> |
200 | <strong>Bugs</strong><br> |
| 201 | </div> <!-- /.container --> |
201 | Bugs can be reported by opening a ticket <a href="https://forge.codesys.com/prj/cfunit/tickets/">here</a>. |
| 202 | 202 | </p> |
|
| 203 | 203 | </div> <!-- /.col-md-10 --> |
|
| 204 | <div class="container-alternate"> |
204 | </div> <!-- /.row --> |
| 205 | <div class="container"> |
205 | </div> <!-- /.Resources --> |
| 206 | <h3 id="about" class="subhead">About</h3> |
206 | </div> <!-- /.container --> |
| 207 | <div class="row about"> |
207 | |
| 208 | <div class="col-md-10 col-md-offset-1 text-center"> |
208 | <br> |
| 209 | </p> |
209 | <footer> |
| 210 | Kudos to Jakob Sagatowski for his kind permission to port his testing framework to CODESYS. |
210 | <div class="container clearfix"> |
| 211 | Assistance provided by zer0g & Ingo was greatly appreciated. Without their assistance the porting alone would have taken me several months. |
211 | <p class="pull-left"> |
| 212 | Kudos for helping out with various tickets and providing valueable feedback! |
212 | </p> |
| 213 | </p> |
213 | <p class="pull-right"> |
| 214 | <p> |
214 | <a href="https://forge.codesys.com/u/aliazzz/profile/"><img src="img/aliazzz.png" alt="Brains ... & Anything IEC61131-3"></a>Brains ... & Anything IEC61131-3<br>Aliazzz |
| 215 | Forked and ported from <a href="https://www.tcunit.org">TcUnit</a>, originally written for TwinCAT3 by Jakob Sagatowski. |
215 | </p> |
| 216 | <p> |
216 | </div> <!-- /.container --> |
| 217 | </div> <!-- /.col-md-10 --> |
217 | </footer> |
| 218 | </div> <!-- /.row --> |
218 | |
| 219 | </div> <!-- /.container --> |
219 | |
| 220 | </div> <!-- /.container-alternate --> |
220 | <script src="js/jquery.js"></script> |
| 221 | 221 | <script src="js/bootstrap.min.js"></script> |
|
| 222 | 222 | <script> |
|
| 223 | <footer> |
223 | $(".nav-link").click(function(e) { |
| 224 | <div class="container clearfix"> |
224 | e.preventDefault(); |
| 225 | <p class="pull-left"> |
225 | var link = $(this); |
| 226 | </p> |
226 | var href = link.attr("href"); |
| 227 | <p class="pull-right"> |
227 | $("html,body").animate({scrollTop: $(href).offset().top - 80}, 500); |
| 228 | <a href="https://forge.codesys.com/u/aliazzz/profile/"><img src="img/aliazzz.png" alt="Brains ... & Anything IEC61131-3"></a>Brains ... & Anything IEC61131-3<br>Aliazzz |
228 | link.closest(".navbar").find(".navbar-toggle:not(.collapsed)").click(); |
| 229 | </p> |
229 | }); |
| 230 | </div> <!-- /.container --> |
230 | </script> |
| 231 | </footer> |
||
| 232 | |||
| 233 | |||
| 234 | <script src="js/jquery.js"></script> |
||
| 235 | <script src="js/bootstrap.min.js"></script> |
||
| 236 | <script> |
||
| 237 | $(".nav-link").click(function(e) { |
||
| 238 | e.preventDefault(); |
||
| 239 | var link = $(this); |
||
| 240 | var href = link.attr("href"); |
||
| 241 | $("html,body").animate({scrollTop: $(href).offset().top - 80}, 500); |
||
| 242 | link.closest(".navbar").find(".navbar-toggle:not(.collapsed)").click(); |
||
| 243 | }); |
||
| 244 | </script> |
||
| 245 | |||
| 246 | </body> |
231 | </body> |
| 247 | </html> |
232 | </html> |