mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-09-29 06:59:10 +02:00
* Testinsight demo
This commit is contained in:
parent
c1e983137d
commit
0240ac2c82
6
demo/testinsight/TestInsightSettings.json
Normal file
6
demo/testinsight/TestInsightSettings.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"BaseUrl" : "http://127.0.0.1:6789/tests",
|
||||
"ExecuteTests" : true,
|
||||
"ShowProgress" : true,
|
||||
"Suite" : ""
|
||||
}
|
92
demo/testinsight/clienttest.lpi
Normal file
92
demo/testinsight/clienttest.lpi
Normal file
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="clienttest"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<CustomData Count="4">
|
||||
<Item0 Name="MaintainHTML" Value="1"/>
|
||||
<Item1 Name="Pas2JSProject" Value="1"/>
|
||||
<Item2 Name="PasJSLocation" Value="$NameOnly($(ProjFile))"/>
|
||||
<Item3 Name="PasJSWebBrowserProject" Value="1"/>
|
||||
</CustomData>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="clienttest.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="index.html"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<CustomData Count="1">
|
||||
<Item0 Name="PasJSIsProjectHTMLFile" Value="1"/>
|
||||
</CustomData>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<Target>
|
||||
<Filename Value="clienttest"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="js"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<AllowLabel Value="False"/>
|
||||
<UseAnsiStrings Value="False"/>
|
||||
<CPPInline Value="False"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<CodeGeneration>
|
||||
<TargetOS Value="browser"/>
|
||||
</CodeGeneration>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<GenerateDebugInfo Value="False"/>
|
||||
<UseLineInfoUnit Value="False"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
<Other>
|
||||
<ConfigFile>
|
||||
<WriteConfigFilePath Value=""/>
|
||||
</ConfigFile>
|
||||
<CustomOptions Value="-Jeutf-8 -Jirtl.js -Jc -Jminclude"/>
|
||||
<CompilerPath Value="$(pas2js)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
37
demo/testinsight/clienttest.lpr
Normal file
37
demo/testinsight/clienttest.lpr
Normal file
@ -0,0 +1,37 @@
|
||||
program clienttest;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
Classes, fpjsonjs, browserconsole, consoletestrunner, tcTests, testinsightclient, fpcunittestinsight;
|
||||
|
||||
type
|
||||
TMyTestRunner = class(TTestRunner)
|
||||
protected
|
||||
// override the protected methods of TTestRunner to customize its behavior
|
||||
end;
|
||||
|
||||
Procedure DoRunTests(aClient : TAbstractTestInsightClient);
|
||||
|
||||
begin
|
||||
RunRegisteredTests(aClient)
|
||||
end;
|
||||
|
||||
|
||||
Procedure DoRunText(aClient : TAbstractTestInsightClient);
|
||||
|
||||
var
|
||||
Application: TMyTestRunner;
|
||||
|
||||
begin
|
||||
Application := TMyTestRunner.Create(nil);
|
||||
Application.Initialize;
|
||||
Application.Title := 'FPCUnit Console test runner';
|
||||
Application.Run;
|
||||
Application.Free;
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
IsTestInsightListening(@DoRunTests,@DoRunText,'','');
|
||||
end.
|
370
demo/testinsight/fpcunit.css
Normal file
370
demo/testinsight/fpcunit.css
Normal file
@ -0,0 +1,370 @@
|
||||
@charset "utf-8";
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
}
|
||||
|
||||
#fpcunit {
|
||||
font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
margin: 60px 50px;
|
||||
}
|
||||
|
||||
#fpcunit ul,
|
||||
#fpcunit li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#fpcunit ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
#fpcunit h1,
|
||||
#fpcunit h2 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#fpcunit h1 {
|
||||
margin-top: 15px;
|
||||
font-size: 1em;
|
||||
font-weight: 200;
|
||||
}
|
||||
|
||||
#fpcunit h1 a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
#fpcunit h1 a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#fpcunit .suite .suite h1 {
|
||||
margin-top: 0;
|
||||
font-size: .8em;
|
||||
}
|
||||
|
||||
#fpcunit .suite .suite .suite h1 {
|
||||
margin-top: 0;
|
||||
font-size: .8em;
|
||||
}
|
||||
|
||||
#fpcunit .suite h1 {
|
||||
margin-top: 0;
|
||||
font-size: .8em;
|
||||
}
|
||||
|
||||
#fpcunit .hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#fpcunit h2 {
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#fpcunit .suite {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
#fpcunit .test {
|
||||
margin-left: 15px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#fpcunit .test.pending:hover h2::after {
|
||||
content: '(pending)';
|
||||
font-family: arial, sans-serif;
|
||||
}
|
||||
|
||||
#fpcunit .test.pass.medium .duration {
|
||||
background: #c09853;
|
||||
}
|
||||
|
||||
#fpcunit .test.pass.slow .duration {
|
||||
background: #b94a48;
|
||||
}
|
||||
|
||||
#fpcunit .test.pass::before {
|
||||
content: '✓';
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
color: #00d6b2;
|
||||
}
|
||||
|
||||
#fpcunit .test.pass .duration {
|
||||
font-size: 9px;
|
||||
margin-left: 5px;
|
||||
padding: 2px 5px;
|
||||
color: #fff;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
|
||||
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
|
||||
box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
-ms-border-radius: 5px;
|
||||
-o-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#fpcunit .test.pass.fast .duration {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#fpcunit .test.pending {
|
||||
color: #0b97c4;
|
||||
}
|
||||
|
||||
#fpcunit .test.pending::before {
|
||||
content: '◦';
|
||||
color: #0b97c4;
|
||||
}
|
||||
|
||||
#fpcunit .test.fail {
|
||||
color: #B00;
|
||||
}
|
||||
|
||||
#fpcunit .test.fail pre {
|
||||
color: black;
|
||||
}
|
||||
|
||||
#fpcunit .test.fail::before {
|
||||
content: '✖';
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
color: #B00;
|
||||
}
|
||||
|
||||
#fpcunit .test.ignore {
|
||||
color: #FF7F50;
|
||||
}
|
||||
|
||||
#fpcunit .test.ignore pre {
|
||||
color: #FF7F50;
|
||||
}
|
||||
|
||||
#fpcunit .test.ignore::before {
|
||||
content: '✖';
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
color: #FF7F50;
|
||||
}
|
||||
|
||||
#fpcunit .test.error {
|
||||
color: #F00;
|
||||
}
|
||||
|
||||
#fpcunit .test.error pre {
|
||||
color: #F00;
|
||||
}
|
||||
|
||||
#fpcunit .test.error::before {
|
||||
content: '✖';
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
color: #F00;
|
||||
}
|
||||
|
||||
#fpcunit .test pre.error {
|
||||
color: #c00;
|
||||
max-height: 300px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
#fpcunit .test .html-error {
|
||||
overflow: auto;
|
||||
color: black;
|
||||
line-height: 1.5;
|
||||
display: block;
|
||||
float: left;
|
||||
clear: left;
|
||||
font: 12px/1.5 monaco, monospace;
|
||||
margin: 5px;
|
||||
padding: 15px;
|
||||
border: 1px solid #eee;
|
||||
max-width: 85%; /*(1)*/
|
||||
max-width: -webkit-calc(100% - 42px);
|
||||
max-width: -moz-calc(100% - 42px);
|
||||
max-width: calc(100% - 42px); /*(2)*/
|
||||
max-height: 300px;
|
||||
word-wrap: break-word;
|
||||
border-bottom-color: #ddd;
|
||||
-webkit-box-shadow: 0 1px 3px #eee;
|
||||
-moz-box-shadow: 0 1px 3px #eee;
|
||||
box-shadow: 0 1px 3px #eee;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
#fpcunit .test .html-error pre.error {
|
||||
border: none;
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
-webkit-box-shadow: 0;
|
||||
-moz-box-shadow: 0;
|
||||
box-shadow: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-top: 18px;
|
||||
max-height: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* (1): approximate for browsers not supporting calc
|
||||
* (2): 42 = 2*15 + 2*10 + 2*1 (padding + margin + border)
|
||||
* ^^ seriously
|
||||
*/
|
||||
#fpcunit .test pre {
|
||||
display: block;
|
||||
float: left;
|
||||
clear: left;
|
||||
font: 12px/1.5 monaco, monospace;
|
||||
margin: 5px;
|
||||
padding: 15px;
|
||||
border: 1px solid #eee;
|
||||
max-width: 85%; /*(1)*/
|
||||
max-width: -webkit-calc(100% - 42px);
|
||||
max-width: -moz-calc(100% - 42px);
|
||||
max-width: calc(100% - 42px); /*(2)*/
|
||||
word-wrap: break-word;
|
||||
border-bottom-color: #ddd;
|
||||
-webkit-box-shadow: 0 1px 3px #eee;
|
||||
-moz-box-shadow: 0 1px 3px #eee;
|
||||
box-shadow: 0 1px 3px #eee;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
#fpcunit .test h2 {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#fpcunit .test a.replay {
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
right: 0;
|
||||
text-decoration: none;
|
||||
vertical-align: middle;
|
||||
display: block;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
line-height: 15px;
|
||||
text-align: center;
|
||||
background: #eee;
|
||||
font-size: 15px;
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
-webkit-transition:opacity 200ms;
|
||||
-moz-transition:opacity 200ms;
|
||||
-o-transition:opacity 200ms;
|
||||
transition: opacity 200ms;
|
||||
opacity: 0.3;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
#fpcunit .test:hover a.replay {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#fpcunit-report.pass .test.fail {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#fpcunit-report.fail .test.pass {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#fpcunit-report.pending .test.pass,
|
||||
#fpcunit-report.pending .test.fail {
|
||||
display: none;
|
||||
}
|
||||
#fpcunit-report.pending .test.pass.pending {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#fpcunit-error {
|
||||
color: #c00;
|
||||
font-size: 1.5em;
|
||||
font-weight: 100;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
#fpcunit-stats {
|
||||
position: fixed;
|
||||
top: 15px;
|
||||
right: 10px;
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
color: #888;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#fpcunit-stats .progress {
|
||||
float: right;
|
||||
padding-top: 0;
|
||||
|
||||
/**
|
||||
* Set safe initial values, so mochas .progress does not inherit these
|
||||
* properties from Bootstrap .progress (which causes .progress height to
|
||||
* equal line height set in Bootstrap).
|
||||
*/
|
||||
height: auto;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
background-color: initial;
|
||||
}
|
||||
|
||||
#fpcunit-stats em {
|
||||
color: black;
|
||||
}
|
||||
|
||||
#fpcunit-stats a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
#fpcunit-stats a:hover {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
#fpcunit-stats li {
|
||||
display: inline-block;
|
||||
margin: 0 5px;
|
||||
list-style: none;
|
||||
padding-top: 11px;
|
||||
}
|
||||
|
||||
#fpcunit-stats canvas {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
#fpcunit code .comment { color: #ddd; }
|
||||
#fpcunit code .init { color: #2f6fad; }
|
||||
#fpcunit code .string { color: #5890ad; }
|
||||
#fpcunit code .keyword { color: #8a6343; }
|
||||
#fpcunit code .number { color: #2f6fad; }
|
||||
|
||||
@media screen and (max-device-width: 480px) {
|
||||
#fpcunit {
|
||||
margin: 60px 0px;
|
||||
}
|
||||
|
||||
#fpcunit #stats {
|
||||
position: absolute;
|
||||
}
|
||||
}
|
9
demo/testinsight/index.html
Normal file
9
demo/testinsight/index.html
Normal file
@ -0,0 +1,9 @@
|
||||
<HTML>
|
||||
<Title>FPCUnit Test demo</Title>
|
||||
<script SRC="clienttest.js" type="application/javascript"></script>
|
||||
<link href="fpcunit.css" rel="stylesheet">
|
||||
</body>
|
||||
<script>
|
||||
rtl.run();
|
||||
</script>
|
||||
</HTML>
|
61
demo/testinsight/tctests.pas
Normal file
61
demo/testinsight/tctests.pas
Normal file
@ -0,0 +1,61 @@
|
||||
unit tcTests;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, fpcunit, testregistry;
|
||||
|
||||
type
|
||||
Suite1 = class(TTestCase)
|
||||
published
|
||||
procedure Test1;
|
||||
procedure Test2;
|
||||
end;
|
||||
|
||||
{ Suite2 }
|
||||
|
||||
Suite2 = class(TTestCase)
|
||||
published
|
||||
procedure Test1;
|
||||
procedure Test2;
|
||||
procedure Test3;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ Suite2 }
|
||||
|
||||
procedure Suite2.Test1;
|
||||
begin
|
||||
Fail('Test 1 fails');
|
||||
end;
|
||||
|
||||
procedure Suite2.Test2;
|
||||
begin
|
||||
AssertTrue('Test 2 OK',True);
|
||||
end;
|
||||
|
||||
procedure Suite2.Test3;
|
||||
begin
|
||||
Raise Exception.Create('test 3 errors');
|
||||
end;
|
||||
|
||||
|
||||
procedure Suite1.Test1;
|
||||
begin
|
||||
Fail('Test 1 fails');
|
||||
end;
|
||||
|
||||
procedure Suite1.Test2;
|
||||
begin
|
||||
AssertTrue('Test 2 OK',True);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
initialization
|
||||
RegisterTests([Suite1,Suite2]);
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user