Compare commits
18 Commits
3b277f4397
...
f8fcba9858
Author | SHA1 | Date |
---|---|---|
Achim D. Brucker | f8fcba9858 | |
Achim D. Brucker | 71aece6de5 | |
Achim D. Brucker | 75acf31ed1 | |
Achim D. Brucker | f7467c1ab7 | |
Achim D. Brucker | deb397bdf9 | |
Achim D. Brucker | c7a06116f8 | |
Achim D. Brucker | efbb132d65 | |
Achim D. Brucker | a232cb4a6a | |
Achim D. Brucker | f2b442eac2 | |
Achim D. Brucker | 286ab499fd | |
Achim D. Brucker | e3811224dd | |
Achim D. Brucker | 93dc373316 | |
Achim D. Brucker | f4eef51319 | |
Achim D. Brucker | 8e91b727fd | |
Achim D. Brucker | 5b1e16bce3 | |
Achim D. Brucker | 4f04eaaa45 | |
Achim D. Brucker | 9baebec392 | |
Achim D. Brucker | c316f1802d |
|
@ -1,3 +1,5 @@
|
|||
# Auto detect text files
|
||||
* text=auto
|
||||
|
||||
# Custom for Visual Studio
|
||||
*.cs diff=csharp text=auto eol=lf
|
||||
|
@ -10,7 +12,6 @@
|
|||
*.vbproj merge=union
|
||||
*.fsproj merge=union
|
||||
*.dbproj merge=union
|
||||
*.sh text eol=lf
|
||||
|
||||
# Standard to msysgit
|
||||
*.doc diff=astextplain
|
||||
|
|
|
@ -1,11 +1,3 @@
|
|||
# ---> C Sharp
|
||||
# Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
|
||||
# mstest test results
|
||||
TestResults
|
||||
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
|
@ -20,6 +12,7 @@ TestResults
|
|||
*.exe.mdb
|
||||
|
||||
# Build results
|
||||
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
x64/
|
||||
|
@ -107,13 +100,8 @@ publish/
|
|||
# Publish Web Output
|
||||
*.Publish.xml
|
||||
|
||||
# NuGet Packages Directory
|
||||
packages
|
||||
# Enable nuget.exe in the .nuget folder (though normally executables are not tracked)
|
||||
!.nuget/NuGet.exe
|
||||
# Packet lock file
|
||||
paket.lock
|
||||
.paket/paket.exe
|
||||
|
||||
# Windows Azure Build Output
|
||||
csx
|
||||
|
@ -126,11 +114,7 @@ AppPackages/
|
|||
.vscode/
|
||||
|
||||
# Others
|
||||
[Bb]in
|
||||
[Oo]bj
|
||||
sql/
|
||||
TestResults
|
||||
[Tt]est[Rr]esult*
|
||||
*.Cache
|
||||
ClientBin/
|
||||
[Ss]tyle[Cc]op.*
|
||||
|
@ -140,6 +124,7 @@ ClientBin/
|
|||
*.[Pp]ublish.xml
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
|
@ -150,8 +135,6 @@ Backup*/
|
|||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# Default archive directory
|
||||
archive
|
||||
# SQL Server files
|
||||
App_Data/*.mdf
|
||||
App_Data/*.ldf
|
||||
|
@ -193,16 +176,25 @@ TestResults.xml
|
|||
nuget/*.nupkg
|
||||
release.cmd
|
||||
release.sh
|
||||
docs
|
||||
localpackages/
|
||||
paket-files
|
||||
*.orig
|
||||
.paket/paket.exe
|
||||
docsrc/content/license.md
|
||||
docsrc/content/release-notes.md
|
||||
.fake
|
||||
docsrc/tools/FSharp.Formatting.svclog
|
||||
|
||||
# misc paket files
|
||||
.paket/paket.exe
|
||||
paket.lock
|
||||
|
||||
# docs
|
||||
docs
|
||||
|
||||
# ignore app.config
|
||||
src/LogicalHacking.ExtensionDsLab/app.config
|
||||
|
||||
# ignore superfluous directories created by FSLab
|
||||
*/*/DesignTimeURIs/
|
||||
*/*/WorldBankSchema/
|
||||
|
||||
# local resources
|
||||
src/resources/extensions-schema.sqlite
|
||||
|
|
|
@ -0,0 +1,299 @@
|
|||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<!-- Prevent dotnet template engine to parse this file -->
|
||||
<!--/-:cnd:noEmit-->
|
||||
<PropertyGroup>
|
||||
<!-- make MSBuild track this file for incremental builds. -->
|
||||
<!-- ref https://blogs.msdn.microsoft.com/msbuild/2005/09/26/how-to-ensure-changes-to-a-custom-target-file-prompt-a-rebuild/ -->
|
||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||
<!-- Mark that this target file has been loaded. -->
|
||||
<IsPaketRestoreTargetsFileLoaded>true</IsPaketRestoreTargetsFileLoaded>
|
||||
<PaketToolsPath>$(MSBuildThisFileDirectory)</PaketToolsPath>
|
||||
<PaketRootPath>$(MSBuildThisFileDirectory)..\</PaketRootPath>
|
||||
<PaketRestoreCacheFile>$(PaketRootPath)paket-files\paket.restore.cached</PaketRestoreCacheFile>
|
||||
<PaketLockFilePath>$(PaketRootPath)paket.lock</PaketLockFilePath>
|
||||
<MonoPath Condition="'$(MonoPath)' == '' And Exists('/Library/Frameworks/Mono.framework/Commands/mono')">/Library/Frameworks/Mono.framework/Commands/mono</MonoPath>
|
||||
<MonoPath Condition="'$(MonoPath)' == ''">mono</MonoPath>
|
||||
<!-- Paket command -->
|
||||
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketRootPath)paket.exe')">$(PaketRootPath)paket.exe</PaketExePath>
|
||||
<PaketExePath Condition=" '$(PaketExePath)' == '' ">$(PaketToolsPath)paket.exe</PaketExePath>
|
||||
<PaketCommand Condition=" '$(OS)' == 'Windows_NT'">"$(PaketExePath)"</PaketCommand>
|
||||
<PaketCommand Condition=" '$(OS)' != 'Windows_NT' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"</PaketCommand>
|
||||
|
||||
<!-- .net core fdd -->
|
||||
<_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)"))</_PaketExeExtension>
|
||||
<PaketCommand Condition=" '$(_PaketExeExtension)' == '.dll' ">dotnet "$(PaketExePath)"</PaketCommand>
|
||||
|
||||
<!-- no extension is a shell script -->
|
||||
<PaketCommand Condition=" '$(_PaketExeExtension)' == '' ">"$(PaketExePath)"</PaketCommand>
|
||||
|
||||
<PaketBootStrapperExePath Condition=" '$(PaketBootStrapperExePath)' == '' AND Exists('$(PaketRootPath)paket.bootstrapper.exe')">$(PaketRootPath)paket.bootstrapper.exe</PaketBootStrapperExePath>
|
||||
<PaketBootStrapperExePath Condition=" '$(PaketBootStrapperExePath)' == '' ">$(PaketToolsPath)paket.bootstrapper.exe</PaketBootStrapperExePath>
|
||||
<PaketBootStrapperCommand Condition=" '$(OS)' == 'Windows_NT'">"$(PaketBootStrapperExePath)"</PaketBootStrapperCommand>
|
||||
<PaketBootStrapperCommand Condition=" '$(OS)' != 'Windows_NT' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)"</PaketBootStrapperCommand>
|
||||
|
||||
<!-- Disable automagic references for F# dotnet sdk -->
|
||||
<!-- This will not do anything for other project types -->
|
||||
<!-- see https://github.com/fsharp/fslang-design/blob/master/RFCs/FS-1032-fsharp-in-dotnet-sdk.md -->
|
||||
<DisableImplicitFSharpCoreReference>true</DisableImplicitFSharpCoreReference>
|
||||
<DisableImplicitSystemValueTupleReference>true</DisableImplicitSystemValueTupleReference>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="PaketRestore" Condition="'$(PaketRestoreDisabled)' != 'True'" BeforeTargets="_GenerateDotnetCliToolReferenceSpecs;_GenerateProjectRestoreGraphPerFramework;_GenerateRestoreGraphWalkPerFramework;CollectPackageReferences" >
|
||||
|
||||
<!-- Step 1 Check if lockfile is properly restored -->
|
||||
<PropertyGroup>
|
||||
<PaketRestoreRequired>true</PaketRestoreRequired>
|
||||
<NoWarn>$(NoWarn);NU1603;NU1604;NU1605;NU1608</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Because ReadAllText is slow on osx/linux, try to find shasum and awk -->
|
||||
<PropertyGroup>
|
||||
<PaketRestoreCachedHasher Condition="'$(OS)' != 'Windows_NT' And '$(PaketRestoreCachedHasher)' == '' And Exists('/usr/bin/shasum') And Exists('/usr/bin/awk')">/usr/bin/shasum "$(PaketRestoreCacheFile)" | /usr/bin/awk '{ print $1 }'</PaketRestoreCachedHasher>
|
||||
<PaketRestoreLockFileHasher Condition="'$(OS)' != 'Windows_NT' And '$(PaketRestoreLockFileHash)' == '' And Exists('/usr/bin/shasum') And Exists('/usr/bin/awk')">/usr/bin/shasum "$(PaketLockFilePath)" | /usr/bin/awk '{ print $1 }'</PaketRestoreLockFileHasher>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- If shasum and awk exist get the hashes -->
|
||||
<Exec StandardOutputImportance="Low" Condition=" '$(PaketRestoreCachedHasher)' != '' " Command="$(PaketRestoreCachedHasher)" ConsoleToMSBuild='true'>
|
||||
<Output TaskParameter="ConsoleOutput" PropertyName="PaketRestoreCachedHash" />
|
||||
</Exec>
|
||||
<Exec StandardOutputImportance="Low" Condition=" '$(PaketRestoreLockFileHasher)' != '' " Command="$(PaketRestoreLockFileHasher)" ConsoleToMSBuild='true'>
|
||||
<Output TaskParameter="ConsoleOutput" PropertyName="PaketRestoreLockFileHash" />
|
||||
</Exec>
|
||||
|
||||
<!-- Debug whats going on -->
|
||||
<Message Importance="low" Text="calling paket restore with targetframework=$(TargetFramework) targetframeworks=$(TargetFrameworks)" />
|
||||
|
||||
<PropertyGroup Condition="Exists('$(PaketRestoreCacheFile)') ">
|
||||
<!-- if no hash has been done yet fall back to just reading in the files and comparing them -->
|
||||
<PaketRestoreCachedHash Condition=" '$(PaketRestoreCachedHash)' == '' ">$([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))</PaketRestoreCachedHash>
|
||||
<PaketRestoreLockFileHash Condition=" '$(PaketRestoreLockFileHash)' == '' ">$([System.IO.File]::ReadAllText('$(PaketLockFilePath)'))</PaketRestoreLockFileHash>
|
||||
<PaketRestoreRequired>true</PaketRestoreRequired>
|
||||
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '$(PaketRestoreCachedHash)' ">false</PaketRestoreRequired>
|
||||
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '' ">true</PaketRestoreRequired>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(PaketPropsVersion)' != '5.174.2' ">
|
||||
<PaketRestoreRequired>true</PaketRestoreRequired>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Do a global restore if required -->
|
||||
<Exec Command='$(PaketBootStrapperCommand)' Condition="Exists('$(PaketBootStrapperExePath)') AND !(Exists('$(PaketExePath)'))" ContinueOnError="false" />
|
||||
<Exec Command='$(PaketCommand) restore' Condition=" '$(PaketRestoreRequired)' == 'true' " ContinueOnError="false" />
|
||||
|
||||
<!-- Step 2 Detect project specific changes -->
|
||||
<ItemGroup>
|
||||
<MyTargetFrameworks Condition="'$(TargetFramework)' != '' " Include="$(TargetFramework)"></MyTargetFrameworks>
|
||||
<!-- Don't include all frameworks when msbuild explicitly asks for a single one -->
|
||||
<MyTargetFrameworks Condition="'$(TargetFrameworks)' != '' AND '$(TargetFramework)' == '' " Include="$(TargetFrameworks)"></MyTargetFrameworks>
|
||||
<PaketResolvedFilePaths Include="@(MyTargetFrameworks -> '$(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).%(Identity).paket.resolved')"></PaketResolvedFilePaths>
|
||||
</ItemGroup>
|
||||
<Message Importance="low" Text="MyTargetFrameworks=@(MyTargetFrameworks) PaketResolvedFilePaths=@(PaketResolvedFilePaths)" />
|
||||
<PropertyGroup>
|
||||
<PaketReferencesCachedFilePath>$(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).paket.references.cached</PaketReferencesCachedFilePath>
|
||||
<!-- MyProject.fsproj.paket.references has the highest precedence -->
|
||||
<PaketOriginalReferencesFilePath>$(MSBuildProjectFullPath).paket.references</PaketOriginalReferencesFilePath>
|
||||
<!-- MyProject.paket.references -->
|
||||
<PaketOriginalReferencesFilePath Condition=" !Exists('$(PaketOriginalReferencesFilePath)')">$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references</PaketOriginalReferencesFilePath>
|
||||
<!-- paket.references -->
|
||||
<PaketOriginalReferencesFilePath Condition=" !Exists('$(PaketOriginalReferencesFilePath)')">$(MSBuildProjectDirectory)\paket.references</PaketOriginalReferencesFilePath>
|
||||
|
||||
<DoAllResolvedFilesExist>false</DoAllResolvedFilesExist>
|
||||
<DoAllResolvedFilesExist Condition="Exists(%(PaketResolvedFilePaths.Identity))">true</DoAllResolvedFilesExist>
|
||||
<PaketRestoreRequired>true</PaketRestoreRequired>
|
||||
<PaketRestoreRequiredReason>references-file-or-cache-not-found</PaketRestoreRequiredReason>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Step 2 a Detect changes in references file -->
|
||||
<PropertyGroup Condition="Exists('$(PaketOriginalReferencesFilePath)') AND Exists('$(PaketReferencesCachedFilePath)') ">
|
||||
<PaketRestoreCachedHash>$([System.IO.File]::ReadAllText('$(PaketReferencesCachedFilePath)'))</PaketRestoreCachedHash>
|
||||
<PaketRestoreReferencesFileHash>$([System.IO.File]::ReadAllText('$(PaketOriginalReferencesFilePath)'))</PaketRestoreReferencesFileHash>
|
||||
<PaketRestoreRequiredReason>references-file</PaketRestoreRequiredReason>
|
||||
<PaketRestoreRequired Condition=" '$(PaketRestoreReferencesFileHash)' == '$(PaketRestoreCachedHash)' ">false</PaketRestoreRequired>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="!Exists('$(PaketOriginalReferencesFilePath)') AND !Exists('$(PaketReferencesCachedFilePath)') ">
|
||||
<!-- If both don't exist there is nothing to do. -->
|
||||
<PaketRestoreRequired>false</PaketRestoreRequired>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Step 2 b detect relevant changes in project file (new targetframework) -->
|
||||
<PropertyGroup Condition=" '$(DoAllResolvedFilesExist)' != 'true' ">
|
||||
<PaketRestoreRequired>true</PaketRestoreRequired>
|
||||
<PaketRestoreRequiredReason>target-framework '$(TargetFramework)' or '$(TargetFrameworks)' files @(PaketResolvedFilePaths)</PaketRestoreRequiredReason>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Step 3 Restore project specific stuff if required -->
|
||||
<Message Condition=" '$(PaketRestoreRequired)' == 'true' " Importance="low" Text="Detected a change ('$(PaketRestoreRequiredReason)') in the project file '$(MSBuildProjectFullPath)', calling paket restore" />
|
||||
<Exec Command='$(PaketCommand) restore --project "$(MSBuildProjectFullPath)" --target-framework "$(TargetFrameworks)"' Condition=" '$(PaketRestoreRequired)' == 'true' AND '$(TargetFramework)' == '' " ContinueOnError="false" />
|
||||
<Exec Command='$(PaketCommand) restore --project "$(MSBuildProjectFullPath)" --target-framework "$(TargetFramework)"' Condition=" '$(PaketRestoreRequired)' == 'true' AND '$(TargetFramework)' != '' " ContinueOnError="false" />
|
||||
|
||||
<!-- This shouldn't actually happen, but just to be sure. -->
|
||||
<PropertyGroup>
|
||||
<DoAllResolvedFilesExist>false</DoAllResolvedFilesExist>
|
||||
<DoAllResolvedFilesExist Condition="Exists(%(PaketResolvedFilePaths.Identity))">true</DoAllResolvedFilesExist>
|
||||
</PropertyGroup>
|
||||
<Error Condition=" '$(DoAllResolvedFilesExist)' != 'true' AND '$(ResolveNuGetPackages)' != 'False' " Text="One Paket file '@(PaketResolvedFilePaths)' is missing while restoring $(MSBuildProjectFile). Please delete 'paket-files/paket.restore.cached' and call 'paket restore'." />
|
||||
|
||||
<!-- Step 4 forward all msbuild properties (PackageReference, DotNetCliToolReference) to msbuild -->
|
||||
<ReadLinesFromFile Condition="($(DesignTimeBuild) != true OR '$(PaketPropsLoaded)' != 'true') AND '@(PaketResolvedFilePaths)' != ''" File="%(PaketResolvedFilePaths.Identity)" >
|
||||
<Output TaskParameter="Lines" ItemName="PaketReferencesFileLines"/>
|
||||
</ReadLinesFromFile>
|
||||
|
||||
<ItemGroup Condition="($(DesignTimeBuild) != true OR '$(PaketPropsLoaded)' != 'true') AND '@(PaketReferencesFileLines)' != '' " >
|
||||
<PaketReferencesFileLinesInfo Include="@(PaketReferencesFileLines)" >
|
||||
<PackageName>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])</PackageName>
|
||||
<PackageVersion>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])</PackageVersion>
|
||||
<AllPrivateAssets>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4])</AllPrivateAssets>
|
||||
</PaketReferencesFileLinesInfo>
|
||||
<PackageReference Include="%(PaketReferencesFileLinesInfo.PackageName)">
|
||||
<Version>%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
|
||||
<PrivateAssets Condition=" ('%(PaketReferencesFileLinesInfo.AllPrivateAssets)' == 'true') Or ('$(PackAsTool)' == 'true') ">All</PrivateAssets>
|
||||
<ExcludeAssets Condition="%(PaketReferencesFileLinesInfo.AllPrivateAssets) == 'exclude'">runtime</ExcludeAssets>
|
||||
<Publish Condition=" '$(PackAsTool)' == 'true' ">true</Publish>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<PaketCliToolFilePath>$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).paket.clitools</PaketCliToolFilePath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ReadLinesFromFile File="$(PaketCliToolFilePath)" >
|
||||
<Output TaskParameter="Lines" ItemName="PaketCliToolFileLines"/>
|
||||
</ReadLinesFromFile>
|
||||
|
||||
<ItemGroup Condition=" '@(PaketCliToolFileLines)' != '' " >
|
||||
<PaketCliToolFileLinesInfo Include="@(PaketCliToolFileLines)" >
|
||||
<PackageName>$([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[0])</PackageName>
|
||||
<PackageVersion>$([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[1])</PackageVersion>
|
||||
</PaketCliToolFileLinesInfo>
|
||||
<DotNetCliToolReference Include="%(PaketCliToolFileLinesInfo.PackageName)">
|
||||
<Version>%(PaketCliToolFileLinesInfo.PackageVersion)</Version>
|
||||
</DotNetCliToolReference>
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Disabled for now until we know what to do with runtime deps - https://github.com/fsprojects/Paket/issues/2964
|
||||
<PropertyGroup>
|
||||
<RestoreConfigFile>$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).NuGet.Config</RestoreConfigFile>
|
||||
</PropertyGroup> -->
|
||||
|
||||
</Target>
|
||||
|
||||
<Target Name="PaketDisableDirectPack" AfterTargets="_IntermediatePack" BeforeTargets="GenerateNuspec" Condition="('$(IsPackable)' == '' Or '$(IsPackable)' == 'true') And Exists('$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).references')" >
|
||||
<PropertyGroup>
|
||||
<ContinuePackingAfterGeneratingNuspec>false</ContinuePackingAfterGeneratingNuspec>
|
||||
</PropertyGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="PaketOverrideNuspec" AfterTargets="GenerateNuspec" Condition="('$(IsPackable)' == '' Or '$(IsPackable)' == 'true') And Exists('$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).references')" >
|
||||
<ItemGroup>
|
||||
<_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<PaketProjectFile>$(MSBuildProjectDirectory)/$(MSBuildProjectFile)</PaketProjectFile>
|
||||
<ContinuePackingAfterGeneratingNuspec>true</ContinuePackingAfterGeneratingNuspec>
|
||||
<UseNewPack>false</UseNewPack>
|
||||
<UseNewPack Condition=" '$(NuGetToolVersion)' != '4.0.0' ">true</UseNewPack>
|
||||
<AdjustedNuspecOutputPath>$(BaseIntermediateOutputPath)$(Configuration)</AdjustedNuspecOutputPath>
|
||||
<AdjustedNuspecOutputPath Condition="@(_NuspecFilesNewLocation) == ''">$(BaseIntermediateOutputPath)</AdjustedNuspecOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.nuspec"/>
|
||||
</ItemGroup>
|
||||
|
||||
<Exec Command='$(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" ' Condition="@(_NuspecFiles) != ''" />
|
||||
|
||||
<ConvertToAbsolutePath Condition="@(_NuspecFiles) != ''" Paths="@(_NuspecFiles)">
|
||||
<Output TaskParameter="AbsolutePaths" PropertyName="NuspecFileAbsolutePath" />
|
||||
</ConvertToAbsolutePath>
|
||||
|
||||
|
||||
<!-- Call Pack -->
|
||||
<PackTask Condition="$(UseNewPack)"
|
||||
PackItem="$(PackProjectInputFile)"
|
||||
PackageFiles="@(_PackageFiles)"
|
||||
PackageFilesToExclude="@(_PackageFilesToExclude)"
|
||||
PackageVersion="$(PackageVersion)"
|
||||
PackageId="$(PackageId)"
|
||||
Title="$(Title)"
|
||||
Authors="$(Authors)"
|
||||
Description="$(Description)"
|
||||
Copyright="$(Copyright)"
|
||||
RequireLicenseAcceptance="$(PackageRequireLicenseAcceptance)"
|
||||
LicenseUrl="$(PackageLicenseUrl)"
|
||||
ProjectUrl="$(PackageProjectUrl)"
|
||||
IconUrl="$(PackageIconUrl)"
|
||||
ReleaseNotes="$(PackageReleaseNotes)"
|
||||
Tags="$(PackageTags)"
|
||||
DevelopmentDependency="$(DevelopmentDependency)"
|
||||
BuildOutputInPackage="@(_BuildOutputInPackage)"
|
||||
TargetPathsToSymbols="@(_TargetPathsToSymbols)"
|
||||
TargetFrameworks="@(_TargetFrameworks)"
|
||||
AssemblyName="$(AssemblyName)"
|
||||
PackageOutputPath="$(PackageOutputAbsolutePath)"
|
||||
IncludeSymbols="$(IncludeSymbols)"
|
||||
IncludeSource="$(IncludeSource)"
|
||||
PackageTypes="$(PackageType)"
|
||||
IsTool="$(IsTool)"
|
||||
RepositoryUrl="$(RepositoryUrl)"
|
||||
RepositoryType="$(RepositoryType)"
|
||||
SourceFiles="@(_SourceFiles->Distinct())"
|
||||
NoPackageAnalysis="$(NoPackageAnalysis)"
|
||||
MinClientVersion="$(MinClientVersion)"
|
||||
Serviceable="$(Serviceable)"
|
||||
FrameworkAssemblyReferences="@(_FrameworkAssemblyReferences)"
|
||||
ContinuePackingAfterGeneratingNuspec="$(ContinuePackingAfterGeneratingNuspec)"
|
||||
NuspecOutputPath="$(AdjustedNuspecOutputPath)"
|
||||
IncludeBuildOutput="$(IncludeBuildOutput)"
|
||||
BuildOutputFolder="$(BuildOutputTargetFolder)"
|
||||
ContentTargetFolders="$(ContentTargetFolders)"
|
||||
RestoreOutputPath="$(RestoreOutputAbsolutePath)"
|
||||
NuspecFile="$(NuspecFileAbsolutePath)"
|
||||
NuspecBasePath="$(NuspecBasePath)"
|
||||
NuspecProperties="$(NuspecProperties)"/>
|
||||
|
||||
<PackTask Condition="! $(UseNewPack)"
|
||||
PackItem="$(PackProjectInputFile)"
|
||||
PackageFiles="@(_PackageFiles)"
|
||||
PackageFilesToExclude="@(_PackageFilesToExclude)"
|
||||
PackageVersion="$(PackageVersion)"
|
||||
PackageId="$(PackageId)"
|
||||
Title="$(Title)"
|
||||
Authors="$(Authors)"
|
||||
Description="$(Description)"
|
||||
Copyright="$(Copyright)"
|
||||
RequireLicenseAcceptance="$(PackageRequireLicenseAcceptance)"
|
||||
LicenseUrl="$(PackageLicenseUrl)"
|
||||
ProjectUrl="$(PackageProjectUrl)"
|
||||
IconUrl="$(PackageIconUrl)"
|
||||
ReleaseNotes="$(PackageReleaseNotes)"
|
||||
Tags="$(PackageTags)"
|
||||
TargetPathsToAssemblies="@(_TargetPathsToAssemblies->'%(FinalOutputPath)')"
|
||||
TargetPathsToSymbols="@(_TargetPathsToSymbols)"
|
||||
TargetFrameworks="@(_TargetFrameworks)"
|
||||
AssemblyName="$(AssemblyName)"
|
||||
PackageOutputPath="$(PackageOutputAbsolutePath)"
|
||||
IncludeSymbols="$(IncludeSymbols)"
|
||||
IncludeSource="$(IncludeSource)"
|
||||
PackageTypes="$(PackageType)"
|
||||
IsTool="$(IsTool)"
|
||||
RepositoryUrl="$(RepositoryUrl)"
|
||||
RepositoryType="$(RepositoryType)"
|
||||
SourceFiles="@(_SourceFiles->Distinct())"
|
||||
NoPackageAnalysis="$(NoPackageAnalysis)"
|
||||
MinClientVersion="$(MinClientVersion)"
|
||||
Serviceable="$(Serviceable)"
|
||||
AssemblyReferences="@(_References)"
|
||||
ContinuePackingAfterGeneratingNuspec="$(ContinuePackingAfterGeneratingNuspec)"
|
||||
NuspecOutputPath="$(AdjustedNuspecOutputPath)"
|
||||
IncludeBuildOutput="$(IncludeBuildOutput)"
|
||||
BuildOutputFolder="$(BuildOutputTargetFolder)"
|
||||
ContentTargetFolders="$(ContentTargetFolders)"
|
||||
RestoreOutputPath="$(RestoreOutputAbsolutePath)"
|
||||
NuspecFile="$(NuspecFileAbsolutePath)"
|
||||
NuspecBasePath="$(NuspecBasePath)"
|
||||
NuspecProperties="$(NuspecProperties)"/>
|
||||
</Target>
|
||||
<!--/+:cnd:noEmit-->
|
||||
</Project>
|
|
@ -1,19 +1,21 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27703.2000
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{63297B98-5CED-492C-A5B7-A5B4F73CF142}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
paket.dependencies = paket.dependencies
|
||||
paket.references = paket.references
|
||||
paket.lock = paket.lock
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{A6A6AF7D-D6E3-442D-9B1E-58CC91879BE1}"
|
||||
EndProject
|
||||
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LogicalHacking.ExtensionDsLab", "src\LogicalHacking.ExtensionDsLab\LogicalHacking.ExtensionDsLab.fsproj", "{8A2EBFC4-14CE-4D77-81DE-1FD7372C3382}"
|
||||
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LogicalHacking.ExtensionDsLab", "src\LogicalHacking.ExtensionDsLab\LogicalHacking.ExtensionDsLab.fsproj", "{B5A5E410-93FC-4353-98C6-DDDE6C458E55}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{BF60BC93-E09B-4E5F-9D85-95A519479D54}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
build.fsx = build.fsx
|
||||
README.md = README.md
|
||||
RELEASE_NOTES.md = RELEASE_NOTES.md
|
||||
EndProjectSection
|
||||
|
@ -32,7 +34,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "content", "content", "{8E6D
|
|||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{ED8079DD-2B06-4030-9F0F-DC548F98E1C4}"
|
||||
EndProject
|
||||
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LogicalHacking.ExtensionDsLab.Tests", "tests\LogicalHacking.ExtensionDsLab.Tests\LogicalHacking.ExtensionDsLab.Tests.fsproj", "{661253B3-4C4D-4EBD-87E4-F1C6F010347F}"
|
||||
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LogicalHacking.ExtensionDsLab.Tests", "tests\LogicalHacking.ExtensionDsLab.Tests\LogicalHacking.ExtensionDsLab.Tests.fsproj", "{4178526E-9B42-4EDB-8D99-39B7C7DF0705}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "git", "git", "{078A9C52-DDC1-46F4-9235-9E6C89C87AFD}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.gitattributes = .gitattributes
|
||||
.gitignore = .gitignore
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".build", ".build", "{7C6D08E7-3EAC-4335-8F4B-252C193C27C9}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.travis.yml = .travis.yml
|
||||
appveyor.yml = appveyor.yml
|
||||
build.cmd = build.cmd
|
||||
build.fsx = build.fsx
|
||||
build.proj = build.proj
|
||||
build.sh = build.sh
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -40,14 +58,18 @@ Global
|
|||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{8A2EBFC4-14CE-4D77-81DE-1FD7372C3382}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8A2EBFC4-14CE-4D77-81DE-1FD7372C3382}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8A2EBFC4-14CE-4D77-81DE-1FD7372C3382}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8A2EBFC4-14CE-4D77-81DE-1FD7372C3382}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{661253B3-4C4D-4EBD-87E4-F1C6F010347F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{661253B3-4C4D-4EBD-87E4-F1C6F010347F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{661253B3-4C4D-4EBD-87E4-F1C6F010347F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{661253B3-4C4D-4EBD-87E4-F1C6F010347F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B5A5E410-93FC-4353-98C6-DDDE6C458E55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B5A5E410-93FC-4353-98C6-DDDE6C458E55}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B5A5E410-93FC-4353-98C6-DDDE6C458E55}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B5A5E410-93FC-4353-98C6-DDDE6C458E55}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4178526E-9B42-4EDB-8D99-39B7C7DF0705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4178526E-9B42-4EDB-8D99-39B7C7DF0705}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4178526E-9B42-4EDB-8D99-39B7C7DF0705}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4178526E-9B42-4EDB-8D99-39B7C7DF0705}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B7339FEC-0891-4DF8-8BB5-0B806A64F32F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B7339FEC-0891-4DF8-8BB5-0B806A64F32F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B7339FEC-0891-4DF8-8BB5-0B806A64F32F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B7339FEC-0891-4DF8-8BB5-0B806A64F32F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -55,6 +77,6 @@ Global
|
|||
GlobalSection(NestedProjects) = preSolution
|
||||
{83F16175-43B1-4C90-A1EE-8E351C33435D} = {A6A6AF7D-D6E3-442D-9B1E-58CC91879BE1}
|
||||
{8E6D5255-776D-4B61-85F9-73C37AA1FB9A} = {A6A6AF7D-D6E3-442D-9B1E-58CC91879BE1}
|
||||
{661253B3-4C4D-4EBD-87E4-F1C6F010347F} = {ED8079DD-2B06-4030-9F0F-DC548F98E1C4}
|
||||
{4178526E-9B42-4EDB-8D99-39B7C7DF0705} = {ED8079DD-2B06-4030-9F0F-DC548F98E1C4}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
15
build.cmd
15
build.cmd
|
@ -1,18 +1,9 @@
|
|||
@echo off
|
||||
cls
|
||||
|
||||
.paket\paket.bootstrapper.exe
|
||||
if errorlevel 1 (
|
||||
exit /b %errorlevel%
|
||||
)
|
||||
|
||||
.paket\paket.exe restore
|
||||
if errorlevel 1 (
|
||||
exit /b %errorlevel%
|
||||
)
|
||||
dotnet restore build.proj
|
||||
|
||||
IF NOT EXIST build.fsx (
|
||||
.paket\paket.exe update
|
||||
packages\build\FAKE\tools\FAKE.exe init.fsx
|
||||
fake run init.fsx
|
||||
)
|
||||
packages\build\FAKE\tools\FAKE.exe build.fsx %*
|
||||
fake build %*
|
416
build.fsx
416
build.fsx
|
@ -2,16 +2,20 @@
|
|||
// FAKE build script
|
||||
// --------------------------------------------------------------------------------------
|
||||
|
||||
#r @"packages/build/FAKE/tools/FakeLib.dll"
|
||||
open Fake
|
||||
open Fake.Git
|
||||
open Fake.AssemblyInfoFile
|
||||
open Fake.ReleaseNotesHelper
|
||||
open Fake.UserInputHelper
|
||||
#r "paket: groupref FakeBuild //"
|
||||
|
||||
#load "./.fake/build.fsx/intellisense.fsx"
|
||||
|
||||
open System
|
||||
open System.IO
|
||||
open System.Diagnostics
|
||||
open Fake.Core
|
||||
open Fake.Core.TargetOperators
|
||||
open Fake.DotNet
|
||||
open Fake.IO
|
||||
open Fake.IO.FileSystemOperators
|
||||
open Fake.IO.Globbing.Operators
|
||||
open Fake.DotNet.Testing
|
||||
open Fake.Tools
|
||||
open Fake.Api
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// START TODO: Provide project-specific details below
|
||||
|
@ -36,7 +40,7 @@ let summary = "A data science framework for analyzing Chrome browser extensions.
|
|||
let description = "A data science framework for analyzing Chrome browser extensions."
|
||||
|
||||
// List of author names (for NuGet package)
|
||||
let authors = [ "Achim D. Brucker" ]
|
||||
let author = "Achim D. Brucker"
|
||||
|
||||
// Tags for your project (for NuGet package)
|
||||
let tags = "ChromeExtension DataScience BrowserSecurity"
|
||||
|
@ -47,8 +51,8 @@ let solutionFile = "LogicalHacking.ExtensionDsLab.sln"
|
|||
// Default target configuration
|
||||
let configuration = "Release"
|
||||
|
||||
// Pattern specifying assemblies to be tested using NUnit
|
||||
let testAssemblies = "tests/**/bin" </> configuration </> "*Tests*.dll"
|
||||
// Pattern specifying assemblies to be tested using Expecto
|
||||
let testAssemblies = "tests/**/bin" </> configuration </> "**" </> "*Tests.exe"
|
||||
|
||||
// Git configuration (used for publishing documentation in gh-pages branch)
|
||||
// The profile where the project is posted
|
||||
|
@ -59,14 +63,16 @@ let gitHome = sprintf "%s/%s" "https://git.logicalhacking.com" gitOwner
|
|||
let gitName = "ExtensionDsLab"
|
||||
|
||||
// The url for the raw files hosted
|
||||
let gitRaw = environVarOrDefault "gitRaw" "https://git.logicalhacking.com/BrowserSecurity"
|
||||
let gitRaw = Environment.environVarOrDefault "gitRaw" "https://raw.githubusercontent.com/BrowserSecurity"
|
||||
|
||||
let website = "/ExtensionDsLab"
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// END TODO: The rest of the file includes standard build steps
|
||||
// --------------------------------------------------------------------------------------
|
||||
|
||||
// Read additional information from the release notes document
|
||||
let release = LoadReleaseNotes "RELEASE_NOTES.md"
|
||||
let release = ReleaseNotes.load "RELEASE_NOTES.md"
|
||||
|
||||
// Helper active pattern for project types
|
||||
let (|Fsproj|Csproj|Vbproj|Shproj|) (projFileName:string) =
|
||||
|
@ -78,30 +84,30 @@ let (|Fsproj|Csproj|Vbproj|Shproj|) (projFileName:string) =
|
|||
| _ -> failwith (sprintf "Project file %s not supported. Unknown project type." projFileName)
|
||||
|
||||
// Generate assembly info files with the right version & up-to-date information
|
||||
Target "AssemblyInfo" (fun _ ->
|
||||
Target.create "AssemblyInfo" (fun _ ->
|
||||
let getAssemblyInfoAttributes projectName =
|
||||
[ Attribute.Title (projectName)
|
||||
Attribute.Product project
|
||||
Attribute.Description summary
|
||||
Attribute.Version release.AssemblyVersion
|
||||
Attribute.FileVersion release.AssemblyVersion
|
||||
Attribute.Configuration configuration ]
|
||||
[ AssemblyInfo.Title (projectName)
|
||||
AssemblyInfo.Product project
|
||||
AssemblyInfo.Description summary
|
||||
AssemblyInfo.Version release.AssemblyVersion
|
||||
AssemblyInfo.FileVersion release.AssemblyVersion
|
||||
AssemblyInfo.Configuration configuration ]
|
||||
|
||||
let getProjectDetails projectPath =
|
||||
let projectName = System.IO.Path.GetFileNameWithoutExtension(projectPath)
|
||||
let projectName = Path.GetFileNameWithoutExtension(projectPath)
|
||||
( projectPath,
|
||||
projectName,
|
||||
System.IO.Path.GetDirectoryName(projectPath),
|
||||
Path.GetDirectoryName(projectPath),
|
||||
(getAssemblyInfoAttributes projectName)
|
||||
)
|
||||
|
||||
!! "src/**/*.??proj"
|
||||
|> Seq.map getProjectDetails
|
||||
|> Seq.iter (fun (projFileName, projectName, folderName, attributes) ->
|
||||
|> Seq.iter (fun (projFileName, _, folderName, attributes) ->
|
||||
match projFileName with
|
||||
| Fsproj -> CreateFSharpAssemblyInfo (folderName </> "AssemblyInfo.fs") attributes
|
||||
| Csproj -> CreateCSharpAssemblyInfo ((folderName </> "Properties") </> "AssemblyInfo.cs") attributes
|
||||
| Vbproj -> CreateVisualBasicAssemblyInfo ((folderName </> "My Project") </> "AssemblyInfo.vb") attributes
|
||||
| Fsproj -> AssemblyInfoFile.createFSharp (folderName </> "AssemblyInfo.fs") attributes
|
||||
| Csproj -> AssemblyInfoFile.createCSharp ((folderName </> "Properties") </> "AssemblyInfo.cs") attributes
|
||||
| Vbproj -> AssemblyInfoFile.createVisualBasic ((folderName </> "My Project") </> "AssemblyInfo.vb") attributes
|
||||
| Shproj -> ()
|
||||
)
|
||||
)
|
||||
|
@ -109,63 +115,57 @@ Target "AssemblyInfo" (fun _ ->
|
|||
// Copies binaries from default VS location to expected bin folder
|
||||
// But keeps a subdirectory structure for each project in the
|
||||
// src folder to support multiple project outputs
|
||||
Target "CopyBinaries" (fun _ ->
|
||||
Target.create "CopyBinaries" (fun _ ->
|
||||
!! "src/**/*.??proj"
|
||||
-- "src/**/*.shproj"
|
||||
|> Seq.map (fun f -> ((System.IO.Path.GetDirectoryName f) </> "bin" </> configuration, "bin" </> (System.IO.Path.GetFileNameWithoutExtension f)))
|
||||
|> Seq.iter (fun (fromDir, toDir) -> CopyDir toDir fromDir (fun _ -> true))
|
||||
|> Seq.map (fun f -> ((Path.getDirectory f) </> "bin" </> configuration, "bin" </> (Path.GetFileNameWithoutExtension f)))
|
||||
|> Seq.iter (fun (fromDir, toDir) -> Shell.copyDir toDir fromDir (fun _ -> true))
|
||||
)
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Clean build results
|
||||
|
||||
let vsProjProps =
|
||||
#if MONO
|
||||
[ ("DefineConstants","MONO"); ("Configuration", configuration) ]
|
||||
#else
|
||||
[ ("Configuration", configuration); ("Platform", "Any CPU") ]
|
||||
#endif
|
||||
let buildConfiguration = DotNet.Custom <| Environment.environVarOrDefault "configuration" configuration
|
||||
|
||||
Target "Clean" (fun _ ->
|
||||
!! solutionFile |> MSBuildReleaseExt "" vsProjProps "Clean" |> ignore
|
||||
CleanDirs ["bin"; "temp"; "docs"]
|
||||
Target.create "Clean" (fun _ ->
|
||||
Shell.cleanDirs ["bin"; "temp"]
|
||||
)
|
||||
|
||||
Target.create "CleanDocs" (fun _ ->
|
||||
Shell.cleanDirs ["docs"]
|
||||
)
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Build library & test project
|
||||
|
||||
Target "Build" (fun _ ->
|
||||
!! solutionFile
|
||||
|> MSBuildReleaseExt "" vsProjProps "Rebuild"
|
||||
|> ignore
|
||||
Target.create "Build" (fun _ ->
|
||||
solutionFile
|
||||
|> DotNet.build (fun p ->
|
||||
{ p with
|
||||
Configuration = buildConfiguration })
|
||||
)
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Run the unit tests using test runner
|
||||
|
||||
Target "RunTests" (fun _ ->
|
||||
Target.create "RunTests" (fun _ ->
|
||||
!! testAssemblies
|
||||
|> NUnit (fun p ->
|
||||
{ p with
|
||||
DisableShadowCopy = true
|
||||
TimeOut = TimeSpan.FromMinutes 20.
|
||||
OutputFile = "TestResults.xml" })
|
||||
|> Expecto.run id
|
||||
)
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Build a NuGet package
|
||||
|
||||
Target "NuGet" (fun _ ->
|
||||
Paket.Pack(fun p ->
|
||||
Target.create "NuGet" (fun _ ->
|
||||
Paket.pack(fun p ->
|
||||
{ p with
|
||||
OutputPath = "bin"
|
||||
Version = release.NugetVersion
|
||||
ReleaseNotes = toLines release.Notes})
|
||||
ReleaseNotes = String.toLines release.Notes})
|
||||
)
|
||||
|
||||
Target "PublishNuget" (fun _ ->
|
||||
Paket.Push(fun p ->
|
||||
Target.create "PublishNuget" (fun _ ->
|
||||
Paket.push(fun p ->
|
||||
{ p with
|
||||
PublishUrl = "https://www.nuget.org"
|
||||
WorkingDir = "bin" })
|
||||
|
@ -175,193 +175,191 @@ Target "PublishNuget" (fun _ ->
|
|||
// --------------------------------------------------------------------------------------
|
||||
// Generate the documentation
|
||||
|
||||
// Paths with template/source/output locations
|
||||
let bin = __SOURCE_DIRECTORY__ @@ "bin"
|
||||
let content = __SOURCE_DIRECTORY__ @@ "docsrc/content"
|
||||
let output = __SOURCE_DIRECTORY__ @@ "docs"
|
||||
let files = __SOURCE_DIRECTORY__ @@ "docsrc/files"
|
||||
let templates = __SOURCE_DIRECTORY__ @@ "docsrc/tools/templates"
|
||||
let formatting = __SOURCE_DIRECTORY__ @@ "packages/formatting/FSharp.Formatting"
|
||||
let docTemplate = "docpage.cshtml"
|
||||
|
||||
let fakePath = "packages" </> "build" </> "FAKE" </> "tools" </> "FAKE.exe"
|
||||
let fakeStartInfo script workingDirectory args fsiargs environmentVars =
|
||||
(fun (info: ProcessStartInfo) ->
|
||||
info.FileName <- System.IO.Path.GetFullPath fakePath
|
||||
info.Arguments <- sprintf "%s --fsiargs -d:FAKE %s \"%s\"" args fsiargs script
|
||||
info.WorkingDirectory <- workingDirectory
|
||||
let setVar k v =
|
||||
info.EnvironmentVariables.[k] <- v
|
||||
for (k, v) in environmentVars do
|
||||
setVar k v
|
||||
setVar "MSBuild" msBuildExe
|
||||
setVar "GIT" Git.CommandHelper.gitPath
|
||||
setVar "FSI" fsiPath)
|
||||
let github_release_user = Environment.environVarOrDefault "github_release_user" gitOwner
|
||||
let githubLink = sprintf "https://github.com/%s/%s" github_release_user gitName
|
||||
|
||||
/// Run the given buildscript with FAKE.exe
|
||||
let executeFAKEWithOutput workingDirectory script fsiargs envArgs =
|
||||
let exitCode =
|
||||
ExecProcessWithLambdas
|
||||
(fakeStartInfo script workingDirectory "" fsiargs envArgs)
|
||||
TimeSpan.MaxValue false ignore ignore
|
||||
System.Threading.Thread.Sleep 1000
|
||||
exitCode
|
||||
// Specify more information about your project
|
||||
let info =
|
||||
[ "project-name", "LogicalHacking.ExtensionDsLab"
|
||||
"project-author", "Achim D. Brucker"
|
||||
"project-summary", "A data science framework for analyzing Chrome browser extensions."
|
||||
"project-github", githubLink
|
||||
"project-nuget", "http://nuget.org/packages/LogicalHacking.ExtensionDsLab" ]
|
||||
|
||||
// Documentation
|
||||
let buildDocumentationTarget fsiargs target =
|
||||
trace (sprintf "Building documentation (%s), this could take some time, please wait..." target)
|
||||
let exit = executeFAKEWithOutput "docsrc/tools" "generate.fsx" fsiargs ["target", target]
|
||||
if exit <> 0 then
|
||||
failwith "generating reference documentation failed"
|
||||
()
|
||||
let root = website
|
||||
|
||||
Target "GenerateReferenceDocs" (fun _ ->
|
||||
buildDocumentationTarget "-d:RELEASE -d:REFERENCE" "Default"
|
||||
let referenceBinaries = []
|
||||
|
||||
let layoutRootsAll = new System.Collections.Generic.Dictionary<string, string list>()
|
||||
layoutRootsAll.Add("en",[ templates;
|
||||
formatting @@ "templates"
|
||||
formatting @@ "templates/reference" ])
|
||||
|
||||
Target.create "ReferenceDocs" (fun _ ->
|
||||
Directory.ensure (output @@ "reference")
|
||||
|
||||
let binaries () =
|
||||
let manuallyAdded =
|
||||
referenceBinaries
|
||||
|> List.map (fun b -> bin @@ b)
|
||||
|
||||
let conventionBased =
|
||||
DirectoryInfo.getSubDirectories <| DirectoryInfo bin
|
||||
|> Array.collect (fun d ->
|
||||
let name, dInfo =
|
||||
let net45Bin =
|
||||
DirectoryInfo.getSubDirectories d |> Array.filter(fun x -> x.FullName.ToLower().Contains("net45"))
|
||||
let net47Bin =
|
||||
DirectoryInfo.getSubDirectories d |> Array.filter(fun x -> x.FullName.ToLower().Contains("net47"))
|
||||
if net45Bin.Length > 0 then
|
||||
d.Name, net45Bin.[0]
|
||||
else
|
||||
d.Name, net47Bin.[0]
|
||||
|
||||
dInfo.GetFiles()
|
||||
|> Array.filter (fun x ->
|
||||
x.Name.ToLower() = (sprintf "%s.dll" name).ToLower())
|
||||
|> Array.map (fun x -> x.FullName)
|
||||
)
|
||||
|> List.ofArray
|
||||
|
||||
conventionBased @ manuallyAdded
|
||||
|
||||
binaries()
|
||||
|> FSFormatting.createDocsForDlls (fun args ->
|
||||
{ args with
|
||||
OutputDirectory = output @@ "reference"
|
||||
LayoutRoots = layoutRootsAll.["en"]
|
||||
ProjectParameters = ("root", root)::info
|
||||
SourceRepository = githubLink @@ "tree/master" }
|
||||
)
|
||||
)
|
||||
|
||||
let generateHelp' fail debug =
|
||||
let args =
|
||||
if debug then "--define:HELP"
|
||||
else "--define:RELEASE --define:HELP"
|
||||
try
|
||||
buildDocumentationTarget args "Default"
|
||||
traceImportant "Help generated"
|
||||
with
|
||||
| e when not fail ->
|
||||
traceImportant "generating help documentation failed"
|
||||
let copyFiles () =
|
||||
Shell.copyRecursive files output true
|
||||
|> Trace.logItems "Copying file: "
|
||||
Directory.ensure (output @@ "content")
|
||||
Shell.copyRecursive (formatting @@ "styles") (output @@ "content") true
|
||||
|> Trace.logItems "Copying styles and scripts: "
|
||||
|
||||
Target.create "Docs" (fun _ ->
|
||||
File.delete "docsrc/content/release-notes.md"
|
||||
Shell.copyFile "docsrc/content/" "RELEASE_NOTES.md"
|
||||
Shell.rename "docsrc/content/release-notes.md" "docsrc/content/RELEASE_NOTES.md"
|
||||
|
||||
let generateHelp fail =
|
||||
generateHelp' fail false
|
||||
File.delete "docsrc/content/license.md"
|
||||
Shell.copyFile "docsrc/content/" "LICENSE"
|
||||
Shell.rename "docsrc/content/license.md" "docsrc/content/LICENSE"
|
||||
|
||||
Target "GenerateHelp" (fun _ ->
|
||||
DeleteFile "docsrc/content/release-notes.md"
|
||||
CopyFile "docsrc/content/" "RELEASE_NOTES.md"
|
||||
Rename "docsrc/content/release-notes.md" "docsrc/content/RELEASE_NOTES.md"
|
||||
|
||||
DirectoryInfo.getSubDirectories (DirectoryInfo.ofPath templates)
|
||||
|> Seq.iter (fun d ->
|
||||
let name = d.Name
|
||||
if name.Length = 2 || name.Length = 3 then
|
||||
layoutRootsAll.Add(
|
||||
name, [templates @@ name
|
||||
formatting @@ "templates"
|
||||
formatting @@ "templates/reference" ]))
|
||||
copyFiles ()
|
||||
|
||||
for dir in [ content; ] do
|
||||
let langSpecificPath(lang, path:string) =
|
||||
path.Split([|'/'; '\\'|], System.StringSplitOptions.RemoveEmptyEntries)
|
||||
|> Array.exists(fun i -> i = lang)
|
||||
let layoutRoots =
|
||||
let key = layoutRootsAll.Keys |> Seq.tryFind (fun i -> langSpecificPath(i, dir))
|
||||
match key with
|
||||
| Some lang -> layoutRootsAll.[lang]
|
||||
| None -> layoutRootsAll.["en"] // "en" is the default language
|
||||
|
||||
DeleteFile "docsrc/content/license.md"
|
||||
CopyFile "docsrc/content/" "LICENSE"
|
||||
Rename "docsrc/content/license.md" "docsrc/content/LICENSE"
|
||||
|
||||
generateHelp true
|
||||
)
|
||||
|
||||
Target "GenerateHelpDebug" (fun _ ->
|
||||
DeleteFile "docsrc/content/release-notes.md"
|
||||
CopyFile "docsrc/content/" "RELEASE_NOTES.md"
|
||||
Rename "docsrc/content/release-notes.md" "docsrc/content/RELEASE_NOTES.md"
|
||||
|
||||
DeleteFile "docsrc/content/license.md"
|
||||
CopyFile "docsrc/content/" "LICENSE"
|
||||
Rename "docsrc/content/license.md" "docsrc/content/LICENSE"
|
||||
|
||||
generateHelp' true true
|
||||
)
|
||||
|
||||
Target "KeepRunning" (fun _ ->
|
||||
use watcher = !! "docsrc/content/**/*.*" |> WatchChanges (fun changes ->
|
||||
generateHelp' true true
|
||||
)
|
||||
|
||||
traceImportant "Waiting for help edits. Press any key to stop."
|
||||
|
||||
System.Console.ReadKey() |> ignore
|
||||
|
||||
watcher.Dispose()
|
||||
)
|
||||
|
||||
Target "GenerateDocs" DoNothing
|
||||
|
||||
let createIndexFsx lang =
|
||||
let content = """(*** hide ***)
|
||||
// This block of code is omitted in the generated HTML documentation. Use
|
||||
// it to define helpers that you do not want to show in the documentation.
|
||||
#I "../../../bin"
|
||||
|
||||
(**
|
||||
F# Project Scaffold ({0})
|
||||
=========================
|
||||
*)
|
||||
"""
|
||||
let targetDir = "docsrc/content" </> lang
|
||||
let targetFile = targetDir </> "index.fsx"
|
||||
ensureDirectory targetDir
|
||||
System.IO.File.WriteAllText(targetFile, System.String.Format(content, lang))
|
||||
|
||||
Target "AddLangDocs" (fun _ ->
|
||||
let args = System.Environment.GetCommandLineArgs()
|
||||
if args.Length < 4 then
|
||||
failwith "Language not specified."
|
||||
|
||||
args.[3..]
|
||||
|> Seq.iter (fun lang ->
|
||||
if lang.Length <> 2 && lang.Length <> 3 then
|
||||
failwithf "Language must be 2 or 3 characters (ex. 'de', 'fr', 'ja', 'gsw', etc.): %s" lang
|
||||
|
||||
let templateFileName = "template.cshtml"
|
||||
let templateDir = "docsrc/tools/templates"
|
||||
let langTemplateDir = templateDir </> lang
|
||||
let langTemplateFileName = langTemplateDir </> templateFileName
|
||||
|
||||
if System.IO.File.Exists(langTemplateFileName) then
|
||||
failwithf "Documents for specified language '%s' have already been added." lang
|
||||
|
||||
ensureDirectory langTemplateDir
|
||||
Copy langTemplateDir [ templateDir </> templateFileName ]
|
||||
|
||||
createIndexFsx lang)
|
||||
FSFormatting.createDocs (fun args ->
|
||||
{ args with
|
||||
Source = content
|
||||
OutputDirectory = output
|
||||
LayoutRoots = layoutRoots
|
||||
ProjectParameters = ("root", root)::info
|
||||
Template = docTemplate } )
|
||||
)
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Release Scripts
|
||||
|
||||
#load "paket-files/build/fsharp/FAKE/modules/Octokit/Octokit.fsx"
|
||||
open Octokit
|
||||
//#load "paket-files/fsharp/FAKE/modules/Octokit/Octokit.fsx"
|
||||
//open Octokit
|
||||
|
||||
Target "Release" (fun _ ->
|
||||
let user =
|
||||
match getBuildParam "github-user" with
|
||||
| s when not (String.IsNullOrWhiteSpace s) -> s
|
||||
| _ -> getUserInput "Username: "
|
||||
let pw =
|
||||
match getBuildParam "github-pw" with
|
||||
| s when not (String.IsNullOrWhiteSpace s) -> s
|
||||
| _ -> getUserPassword "Password: "
|
||||
let remote =
|
||||
Git.CommandHelper.getGitResult "" "remote -v"
|
||||
|> Seq.filter (fun (s: string) -> s.EndsWith("(push)"))
|
||||
|> Seq.tryFind (fun (s: string) -> s.Contains(gitOwner + "/" + gitName))
|
||||
|> function None -> gitHome + "/" + gitName | Some (s: string) -> s.Split().[0]
|
||||
Target.create "Release" (fun _ ->
|
||||
// not fully converted from FAKE 4
|
||||
|
||||
StageAll ""
|
||||
Git.Commit.Commit "" (sprintf "Bump version to %s" release.NugetVersion)
|
||||
Branches.pushBranch "" remote (Information.getBranchName "")
|
||||
//let user =
|
||||
// match getBuildParam "github-user" with
|
||||
// | s when not (String.isNullOrWhiteSpace s) -> s
|
||||
// | _ -> getUserInput "Username: "
|
||||
//let pw =
|
||||
// match getBuildParam "github-pw" with
|
||||
// | s when not (String.isNullOrWhiteSpace s) -> s
|
||||
// | _ -> getUserPassword "Password: "
|
||||
//let remote =
|
||||
// Git.CommandHelper.getGitResult "" "remote -v"
|
||||
// |> Seq.filter (fun (s: string) -> s.EndsWith("(push)"))
|
||||
// |> Seq.tryFind (fun (s: string) -> s.Contains(gitOwner + "/" + gitName))
|
||||
// |> function None -> gitHome + "/" + gitName | Some (s: string) -> s.Split().[0]
|
||||
|
||||
Branches.tag "" release.NugetVersion
|
||||
Branches.pushTag "" remote release.NugetVersion
|
||||
//Git.Staging.stageAll ""
|
||||
//Git.Commit.exec "" (sprintf "Bump version to %s" release.NugetVersion)
|
||||
//Git.Branches.pushBranch "" remote (Git.Information.getBranchName "")
|
||||
|
||||
// release on github
|
||||
createClient user pw
|
||||
|> createDraft gitOwner gitName release.NugetVersion (release.SemVer.PreRelease <> None) release.Notes
|
||||
// TODO: |> uploadFile "PATH_TO_FILE"
|
||||
|> releaseDraft
|
||||
|> Async.RunSynchronously
|
||||
//Git.Branches.tag "" release.NugetVersion
|
||||
//Git.Branches.pushTag "" remote release.NugetVersion
|
||||
|
||||
//// release on github
|
||||
//GitHub.createClient user pw
|
||||
//|> createDraft gitOwner gitName release.NugetVersion (release.SemVer.PreRelease <> None) release.Notes
|
||||
//// TODO: |> uploadFile "PATH_TO_FILE"
|
||||
//|> releaseDraft
|
||||
//|> Async.RunSynchronously
|
||||
|
||||
// using simplified FAKE 5 release for now
|
||||
|
||||
Git.Staging.stageAll ""
|
||||
Git.Commit.exec "" (sprintf "Bump version to %s" release.NugetVersion)
|
||||
Git.Branches.push ""
|
||||
|
||||
Git.Branches.tag "" release.NugetVersion
|
||||
Git.Branches.pushTag "" "origin" release.NugetVersion
|
||||
)
|
||||
|
||||
Target "BuildPackage" DoNothing
|
||||
Target.create "BuildPackage" ignore
|
||||
Target.create "GenerateDocs" ignore
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Run all targets by default. Invoke 'build <Target>' to override
|
||||
|
||||
Target "All" DoNothing
|
||||
Target.create "All" ignore
|
||||
|
||||
"AssemblyInfo"
|
||||
"Clean"
|
||||
==> "AssemblyInfo"
|
||||
==> "Build"
|
||||
==> "CopyBinaries"
|
||||
==> "RunTests"
|
||||
==> "GenerateReferenceDocs"
|
||||
==> "GenerateDocs"
|
||||
==> "NuGet"
|
||||
==> "BuildPackage"
|
||||
==> "All"
|
||||
|
||||
"GenerateHelp"
|
||||
==> "GenerateReferenceDocs"
|
||||
==> "GenerateDocs"
|
||||
"RunTests" ?=> "CleanDocs"
|
||||
|
||||
"GenerateHelpDebug"
|
||||
==> "KeepRunning"
|
||||
"CleanDocs"
|
||||
==>"Docs"
|
||||
==> "ReferenceDocs"
|
||||
==> "GenerateDocs"
|
||||
|
||||
"Clean"
|
||||
==> "Release"
|
||||
|
@ -370,4 +368,4 @@ Target "All" DoNothing
|
|||
==> "PublishNuget"
|
||||
==> "Release"
|
||||
|
||||
RunTargetOrDefault "All"
|
||||
Target.runOrDefault "All"
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project>
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net47</TargetFramework>
|
||||
</PropertyGroup>
|
||||
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
|
||||
<PropertyGroup>
|
||||
<RepoRootDir>$([System.IO.Path]::GetFullPath("$(MSBuildThisFileDirectory)"))</RepoRootDir>
|
||||
<BuildDependsOn>
|
||||
</BuildDependsOn>
|
||||
<CoreBuildDependsOn>
|
||||
</CoreBuildDependsOn>
|
||||
</PropertyGroup>
|
||||
<Target Name="Build">
|
||||
<Exec IgnoreStandardErrorWarningFormat="true" Command="fake build" WorkingDirectory="$(RepoRootDir)" />
|
||||
</Target>
|
||||
<Target Name="Pack">
|
||||
</Target>
|
||||
<Target Name="Test">
|
||||
</Target>
|
||||
<Target Name="VSTest" DependsOnTargets="Test" />
|
||||
<Import Project=".paket\Paket.Restore.targets" />
|
||||
</Project>
|
78
build.sh
78
build.sh
|
@ -1,77 +1,15 @@
|
|||
#!/usr/bin/env bash
|
||||
# to properly set Travis permissions: https://stackoverflow.com/questions/33820638/travis-yml-gradlew-permission-denied
|
||||
# git update-index --chmod=+x fake.sh
|
||||
# git commit -m "permission access for travis"
|
||||
|
||||
set -eu
|
||||
set -o pipefail
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
dotnet restore build.proj
|
||||
|
||||
PAKET_BOOTSTRAPPER_EXE=.paket/paket.bootstrapper.exe
|
||||
PAKET_EXE=.paket/paket.exe
|
||||
FAKE_EXE=packages/build/FAKE/tools/FAKE.exe
|
||||
|
||||
FSIARGS=""
|
||||
FSIARGS2=""
|
||||
OS=${OS:-"unknown"}
|
||||
if [ "$OS" != "Windows_NT" ]
|
||||
then
|
||||
# Can't use FSIARGS="--fsiargs -d:MONO" in zsh, so split it up
|
||||
# (Can't use arrays since dash can't handle them)
|
||||
FSIARGS="--fsiargs"
|
||||
FSIARGS2="-d:MONO"
|
||||
if [ ! -f build.fsx ]; then
|
||||
fake run init.fsx
|
||||
fi
|
||||
|
||||
run() {
|
||||
if [ "$OS" != "Windows_NT" ]
|
||||
then
|
||||
mono "$@"
|
||||
else
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
yesno() {
|
||||
# NOTE: Defaults to NO
|
||||
read -p "$1 [y/N] " ynresult
|
||||
case "$ynresult" in
|
||||
[yY]*) true ;;
|
||||
*) false ;;
|
||||
esac
|
||||
}
|
||||
|
||||
set +e
|
||||
run $PAKET_BOOTSTRAPPER_EXE
|
||||
bootstrapper_exitcode=$?
|
||||
set -e
|
||||
|
||||
if [ "$OS" != "Windows_NT" ] &&
|
||||
[ $bootstrapper_exitcode -ne 0 ] &&
|
||||
[ $(certmgr -list -c Trust | grep X.509 | wc -l) -le 1 ] &&
|
||||
[ $(certmgr -list -c -m Trust | grep X.509 | wc -l) -le 1 ]
|
||||
then
|
||||
echo "Your Mono installation has no trusted SSL root certificates set up."
|
||||
echo "This may result in the Paket bootstrapper failing to download Paket"
|
||||
echo "because Github's SSL certificate can't be verified. One way to fix"
|
||||
echo "this issue would be to download the list of SSL root certificates"
|
||||
echo "from the Mozilla project by running the following command:"
|
||||
echo ""
|
||||
echo " mozroots --import --sync"
|
||||
echo ""
|
||||
echo "This will import over 100 SSL root certificates into your Mono"
|
||||
echo "certificate repository."
|
||||
echo ""
|
||||
if yesno "Run 'mozroots --import --sync' now?"
|
||||
then
|
||||
mozroots --import --sync
|
||||
else
|
||||
echo "Attempting to continue without running mozroots. This might fail."
|
||||
fi
|
||||
# Re-run bootstrapper whether or not the user ran mozroots, because maybe
|
||||
# they fixed the problem in a separate terminal window.
|
||||
run $PAKET_BOOTSTRAPPER_EXE
|
||||
fi
|
||||
|
||||
run $PAKET_EXE restore
|
||||
|
||||
[ ! -e build.fsx ] && run $PAKET_EXE update
|
||||
[ ! -e build.fsx ] && run $FAKE_EXE init.fsx
|
||||
run $FAKE_EXE "$@" $FSIARGS $FSIARGS2 build.fsx
|
||||
|
||||
fake build $@
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
(*** hide ***)
|
||||
// This block of code is omitted in the generated HTML documentation. Use
|
||||
// it to define helpers that you do not want to show in the documentation.
|
||||
#I "../../bin/LogicalHacking.ExtensionDsLab"
|
||||
#I "../../bin"
|
||||
|
||||
(**
|
||||
LogicalHacking.ExtensionDsLab
|
||||
|
@ -46,4 +46,22 @@ The API reference is automatically generated from Markdown comments in the libra
|
|||
* [API Reference](reference/index.html) contains automatically generated documentation for all types, modules
|
||||
and functions in the library. This includes additional brief samples on using most of the
|
||||
functions.
|
||||
*)
|
||||
|
||||
Contributing and copyright
|
||||
--------------------------
|
||||
|
||||
The project is hosted on [GitHub][gh] where you can [report issues][issues], fork
|
||||
the project and submit pull requests. If you're adding a new public API, please also
|
||||
consider adding [samples][content] that can be turned into a documentation. You might
|
||||
also want to read the [library design notes][readme] to understand how it works.
|
||||
|
||||
The library is available under Public Domain license, which allows modification and
|
||||
redistribution for both commercial and non-commercial purposes. For more information see the
|
||||
[License file][license] in the GitHub repository.
|
||||
|
||||
[content]: https://github.com/fsprojects/LogicalHacking.ExtensionDsLab/tree/master/docs/content
|
||||
[gh]: https://github.com/fsprojects/LogicalHacking.ExtensionDsLab
|
||||
[issues]: https://github.com/fsprojects/LogicalHacking.ExtensionDsLab/issues
|
||||
[readme]: https://github.com/fsprojects/LogicalHacking.ExtensionDsLab/blob/master/README.md
|
||||
[license]: https://github.com/fsprojects/LogicalHacking.ExtensionDsLab/blob/master/LICENSE
|
||||
*)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
(*** hide ***)
|
||||
// This block of code is omitted in the generated HTML documentation. Use
|
||||
// it to define helpers that you do not want to show in the documentation.
|
||||
#I "../../bin/LogicalHacking.ExtensionDsLab"
|
||||
#I "../../bin"
|
||||
|
||||
(**
|
||||
Introducing your project
|
||||
|
|
|
@ -1,145 +0,0 @@
|
|||
// --------------------------------------------------------------------------------------
|
||||
// Builds the documentation from `.fsx` and `.md` files in the 'docsrc/content' directory
|
||||
// (the generated documentation is stored in the 'docsrc/output' directory)
|
||||
// --------------------------------------------------------------------------------------
|
||||
|
||||
// Binaries that have XML documentation (in a corresponding generated XML file)
|
||||
// Any binary output / copied to bin/projectName/projectName.dll will
|
||||
// automatically be added as a binary to generate API docs for.
|
||||
// for binaries output to root bin folder please add the filename only to the
|
||||
// referenceBinaries list below in order to generate documentation for the binaries.
|
||||
// (This is the original behaviour of ProjectScaffold prior to multi project support)
|
||||
let referenceBinaries = []
|
||||
// Web site location for the generated documentation
|
||||
let website = "/LogicalHacking.ExtensionDsLab"
|
||||
|
||||
let githubLink = "https://git.logicalhacking.com/BrowserSecurity/ExtensionDsLab"
|
||||
|
||||
// Specify more information about your project
|
||||
let info =
|
||||
[ "project-name", "LogicalHacking.ExtensionDsLab"
|
||||
"project-author", "Achim D. Brucker"
|
||||
"project-summary", "A data science framework for analyzing Chrome browser extensions."
|
||||
"project-github", githubLink
|
||||
"project-nuget", "http://nuget.org/packages/LogicalHacking.ExtensionDsLab" ]
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// For typical project, no changes are needed below
|
||||
// --------------------------------------------------------------------------------------
|
||||
|
||||
#load "../../packages/build/FSharp.Formatting/FSharp.Formatting.fsx"
|
||||
#I "../../packages/build/FAKE/tools/"
|
||||
#r "FakeLib.dll"
|
||||
open Fake
|
||||
open System.IO
|
||||
open Fake.FileHelper
|
||||
open FSharp.Literate
|
||||
open FSharp.MetadataFormat
|
||||
|
||||
// When called from 'build.fsx', use the public project URL as <root>
|
||||
// otherwise, use the current 'output' directory.
|
||||
#if RELEASE
|
||||
let root = website
|
||||
#else
|
||||
let root = "file://" + (__SOURCE_DIRECTORY__ @@ "../../docs")
|
||||
#endif
|
||||
|
||||
// Paths with template/source/output locations
|
||||
let bin = __SOURCE_DIRECTORY__ @@ "../../bin"
|
||||
let content = __SOURCE_DIRECTORY__ @@ "../content"
|
||||
let output = __SOURCE_DIRECTORY__ @@ "../../docs"
|
||||
let files = __SOURCE_DIRECTORY__ @@ "../files"
|
||||
let templates = __SOURCE_DIRECTORY__ @@ "templates"
|
||||
let formatting = __SOURCE_DIRECTORY__ @@ "../../packages/build/FSharp.Formatting/"
|
||||
let docTemplate = "docpage.cshtml"
|
||||
|
||||
// Where to look for *.csproj templates (in this order)
|
||||
let layoutRootsAll = new System.Collections.Generic.Dictionary<string, string list>()
|
||||
layoutRootsAll.Add("en",[ templates; formatting @@ "templates"
|
||||
formatting @@ "templates/reference" ])
|
||||
subDirectories (directoryInfo templates)
|
||||
|> Seq.iter (fun d ->
|
||||
let name = d.Name
|
||||
if name.Length = 2 || name.Length = 3 then
|
||||
layoutRootsAll.Add(
|
||||
name, [templates @@ name
|
||||
formatting @@ "templates"
|
||||
formatting @@ "templates/reference" ]))
|
||||
|
||||
// Copy static files and CSS + JS from F# Formatting
|
||||
let copyFiles () =
|
||||
CopyRecursive files output true |> Log "Copying file: "
|
||||
ensureDirectory (output @@ "content")
|
||||
CopyRecursive (formatting @@ "styles") (output @@ "content") true
|
||||
|> Log "Copying styles and scripts: "
|
||||
|
||||
let binaries =
|
||||
let manuallyAdded =
|
||||
referenceBinaries
|
||||
|> List.map (fun b -> bin @@ b)
|
||||
|
||||
let conventionBased =
|
||||
directoryInfo bin
|
||||
|> subDirectories
|
||||
|> Array.map (fun d -> d.FullName @@ (sprintf "%s.dll" d.Name))
|
||||
|> List.ofArray
|
||||
|
||||
conventionBased @ manuallyAdded
|
||||
|
||||
let libDirs =
|
||||
let conventionBasedbinDirs =
|
||||
directoryInfo bin
|
||||
|> subDirectories
|
||||
|> Array.map (fun d -> d.FullName)
|
||||
|> List.ofArray
|
||||
|
||||
conventionBasedbinDirs @ [bin]
|
||||
|
||||
// Build API reference from XML comments
|
||||
let buildReference () =
|
||||
CleanDir (output @@ "reference")
|
||||
MetadataFormat.Generate
|
||||
( binaries, output @@ "reference", layoutRootsAll.["en"],
|
||||
parameters = ("root", root)::info,
|
||||
sourceRepo = githubLink @@ "tree/master",
|
||||
sourceFolder = __SOURCE_DIRECTORY__ @@ ".." @@ "..",
|
||||
publicOnly = true,libDirs = libDirs )
|
||||
|
||||
// Build documentation from `fsx` and `md` files in `docs/content`
|
||||
let buildDocumentation () =
|
||||
|
||||
// First, process files which are placed in the content root directory.
|
||||
|
||||
Literate.ProcessDirectory
|
||||
( content, docTemplate, output, replacements = ("root", root)::info,
|
||||
layoutRoots = layoutRootsAll.["en"],
|
||||
generateAnchors = true,
|
||||
processRecursive = false)
|
||||
|
||||
// And then process files which are placed in the sub directories
|
||||
// (some sub directories might be for specific language).
|
||||
|
||||
let subdirs = Directory.EnumerateDirectories(content, "*", SearchOption.TopDirectoryOnly)
|
||||
for dir in subdirs do
|
||||
let dirname = (new DirectoryInfo(dir)).Name
|
||||
let layoutRoots =
|
||||
// Check whether this directory name is for specific language
|
||||
let key = layoutRootsAll.Keys
|
||||
|> Seq.tryFind (fun i -> i = dirname)
|
||||
match key with
|
||||
| Some lang -> layoutRootsAll.[lang]
|
||||
| None -> layoutRootsAll.["en"] // "en" is the default language
|
||||
|
||||
Literate.ProcessDirectory
|
||||
( dir, docTemplate, output @@ dirname, replacements = ("root", root)::info,
|
||||
layoutRoots = layoutRoots,
|
||||
generateAnchors = true )
|
||||
|
||||
// Generate
|
||||
copyFiles()
|
||||
#if HELP
|
||||
buildDocumentation()
|
||||
#endif
|
||||
#if REFERENCE
|
||||
buildReference()
|
||||
#endif
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- see https://github.com/Microsoft/visualfsharp/issues/3303 -->
|
||||
<Project>
|
||||
<!-- Type providers currently can't run inside the .NET Core 2.0 hosted compiler, see https://github.com/Microsoft/visualfsharp/pull/3658#issuecomment-334773415 -->
|
||||
<PropertyGroup>
|
||||
<IsWindows Condition="'$(OS)' == 'Windows_NT'">true</IsWindows>
|
||||
<IsOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">true</IsOSX>
|
||||
<IsLinux Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">true</IsLinux>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(IsWindows)' == 'true' AND Exists('C:\Program Files (x86)\Microsoft SDKs\F#\4.1\Framework\v4.0\fsc.exe')">
|
||||
<FscToolPath>C:\Program Files (x86)\Microsoft SDKs\F#\4.1\Framework\v4.0</FscToolPath>
|
||||
<FscToolExe>fsc.exe</FscToolExe>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(IsWindows)' == 'true' AND Exists('C:\Program Files (x86)\Microsoft SDKs\F#\10.1\Framework\v4.0\fsc.exe')">
|
||||
<FscToolPath>C:\Program Files (x86)\Microsoft SDKs\F#\10.1\Framework\v4.0</FscToolPath>
|
||||
<FscToolExe>fsc.exe</FscToolExe>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(IsOSX)' == 'true' AND Exists('/Library/Frameworks/Mono.framework/Versions/Current/Commands/fsharpc')">
|
||||
<FscToolPath>/Library/Frameworks/Mono.framework/Versions/Current/Commands</FscToolPath>
|
||||
<FscToolExe>fsharpc</FscToolExe>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(IsLinux)' == 'true' AND Exists('/usr/bin/fsharpc')">
|
||||
<FscToolPath>/usr/bin</FscToolPath>
|
||||
<FscToolExe>fsharpc</FscToolExe>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,28 +1,42 @@
|
|||
framework: >= net45
|
||||
framework: auto-detect
|
||||
|
||||
source https://nuget.org/api/v2
|
||||
|
||||
# The setting below means your libraries will assume a minimum target of .NET 4.5 + F# 4.0.
|
||||
#
|
||||
# To increase the minimum assumed .NET Framework, change the TargetFrameworkVersion in the .fsproj project files.
|
||||
#
|
||||
# To increase the minimum assumed F# version to F# 4.1, change to
|
||||
# nuget FSharp.Core ~> 4.1.0 redirects: force
|
||||
nuget FSharp.Core
|
||||
nuget Argu
|
||||
|
||||
nuget FSharp.Core ~> 4.0.0.1 redirects: force
|
||||
nuget Expecto
|
||||
nuget Expecto.BenchmarkDotNet
|
||||
nuget Expecto.FsCheck
|
||||
nuget Expecto.VisualStudio.TestAdapter version_in_path: true
|
||||
|
||||
clitool dotnet-fake
|
||||
|
||||
group Formatting
|
||||
source https://nuget.org/api/v2
|
||||
source https://ci.appveyor.com/nuget/fsharp-formatting
|
||||
|
||||
nuget FSharp.Formatting prerelease
|
||||
nuget FSharp.Formatting.CommandTool prerelease
|
||||
|
||||
group FakeBuild
|
||||
source https://api.nuget.org/v3/index.json
|
||||
|
||||
storage: none
|
||||
|
||||
nuget Fake.Core.Target
|
||||
nuget Fake.IO.FileSystem
|
||||
nuget Fake.DotNet.Cli
|
||||
nuget Fake.Tools.Git
|
||||
nuget Fake.DotNet.MSBuild
|
||||
nuget Fake.Core.ReleaseNotes
|
||||
nuget Fake.DotNet.AssemblyInfoFile
|
||||
nuget Fake.DotNet.Paket
|
||||
nuget Fake.DotNet.Testing.Expecto
|
||||
nuget Fake.DotNet.FSFormatting
|
||||
nuget Fake.Api.GitHub
|
||||
|
||||
group Main
|
||||
nuget FsLab
|
||||
nuget Mysql.Data
|
||||
nuget SQLProvider
|
||||
|
||||
group Build
|
||||
source https://nuget.org/api/v2
|
||||
|
||||
nuget FAKE
|
||||
nuget FSharp.Formatting
|
||||
|
||||
github fsharp/FAKE modules/Octokit/Octokit.fsx
|
||||
|
||||
group Test
|
||||
source https://nuget.org/api/v2
|
||||
|
||||
nuget NUnit ~> 2
|
||||
nuget NUnit.Runners ~> 2
|
||||
nuget MySql.Data 6.10.7
|
||||
nuget SQLProvider
|
|
@ -1,565 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Google.DataTable.Net.Wrapper</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Cell">
|
||||
<summary>
|
||||
Each cell is an object containing an actual value of the column type,
|
||||
plus an optional string-formatted version of the value that you provide.
|
||||
|
||||
<example>For example: a numeric column might be assigned the value 7
|
||||
and the formatted value "seven".
|
||||
If a formatted value is supplied, a chart will use the actual value for
|
||||
calculations and rendering, but might show the formatted value where appropriate,
|
||||
for example if the user hovers over a point. Each cell also has an optional
|
||||
map of arbitrary name/value pairs.
|
||||
</example>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.IPropertyMap.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.IPropertyMap.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.IPropertyMap.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.IPropertyMap.PropertyMap">
|
||||
<summary>
|
||||
Returns a list of currently assigned properties to the Cell
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.#ctor">
|
||||
<summary>
|
||||
Default constructor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.#ctor(System.Object)">
|
||||
<summary>
|
||||
Constructor that accepts a value
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.#ctor(System.Object,System.String)">
|
||||
<summary>
|
||||
Constructor that accepts a value and formatted properties.
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
<param name="formatted"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.GetFormattedValue(Google.DataTable.Net.Wrapper.ColumnType,System.Object)">
|
||||
<summary>
|
||||
Returns the value formated depending on the object type.
|
||||
</summary>
|
||||
<param name="columnType"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.ColumnType">
|
||||
<summary>
|
||||
Column type represents the type of value that the current cell holds.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.Value">
|
||||
<summary>
|
||||
[Optional] The cell value. The data ColumnType should match the column data ColumnType.
|
||||
If null, the whole object should be empty and have neither v nor f properties.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.Formatted">
|
||||
<summary>
|
||||
[Optional] A string version of the v value, formatted for display.
|
||||
The values should match, so if you specify Date(2008, 0, 1) for v,
|
||||
you should specify "January 1, 2008" or some such string for this property.
|
||||
This value is not checked against the v value. The visualization will not use this value
|
||||
for calculation, only as a label for display. If omitted, a string version of v will be used.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.PropertyMap">
|
||||
<summary>
|
||||
Returns a list of currently assigned properties to the Cell
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.GetJson(System.IO.StreamWriter)">
|
||||
<summary>
|
||||
Returns the Json string as expected by the Google Api
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Id">
|
||||
<summary>
|
||||
id [Optional] String ID of the column. Must be unique in the table.
|
||||
Use basic alphanumeric characters, so the host page does not require
|
||||
fancy escapes to access the column in JavaScript. Be careful not to
|
||||
choose a JavaScript keyword. Example: id:'col_1'
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Label">
|
||||
<summary>
|
||||
label [Optional] String value that some visualizations display for this column.
|
||||
<example>Example: label:'Height'</example>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.ColumnType">
|
||||
<summary>
|
||||
ColumnType [Required] Data ColumnType of the data in the column.
|
||||
Supports the following string values (examples include the v: property, described later):
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Role">
|
||||
<summary>
|
||||
A column role describes the purpose of the data in that column:
|
||||
for example, a column might hold data describing tooltip text,
|
||||
data point annotations, or uncertainty indicators.
|
||||
</summary>
|
||||
<remarks>
|
||||
More info about the role can be read here
|
||||
https://developers.google.com/chart/interactive/docs/roles
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Pattern">
|
||||
<summary>
|
||||
pattern [Optional] String pattern that was used by a data source
|
||||
to format numeric, date, or time column values.
|
||||
This is for reference only; you probably won't need to read
|
||||
the pattern, and it isn't required to exist.
|
||||
The Google Visualization client does not use this value
|
||||
(it reads the cell's formatted value).
|
||||
If the DataTable has come from a data source in response to a query
|
||||
with a format clause, the pattern you specified in that clause
|
||||
will probably be returned in this value.
|
||||
The recommended pattern standards are the ICU DecimalFormat and SimpleDateFormat.
|
||||
<remarks>
|
||||
<see cref="!:http://icu-project.org/apiref/icu4j/com/ibm/icu/text/SimpleDateFormat.html"/>
|
||||
<see cref="!:http://icu-project.org/apiref/icu4j/com/ibm/icu/text/DecimalFormat.html"/>
|
||||
</remarks>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.PropertyMap">
|
||||
<summary>
|
||||
p [Optional] An object that is a map of custom values applied to the cell.
|
||||
These values can be of any JavaScript ColumnType.
|
||||
If your visualization supports any cell-level properties,
|
||||
it will describe them; otherwise, this property will be ignored.
|
||||
<example>
|
||||
Example: p:{style: 'border: 1px solid green;'}.
|
||||
</example>
|
||||
</summary>
|
||||
<remarks>
|
||||
Returns a list of currently assigned properties to the Cell
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Annotation">
|
||||
<summary>
|
||||
Text to display on the chart near the associated data point.
|
||||
The text displays without any user interaction.
|
||||
Annotations and annotation text can be assigned to both
|
||||
data points and categories (axis labels).
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.AnnotationText">
|
||||
<summary>
|
||||
Extended text to display when the user hovers
|
||||
over the associated annotation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Certainty">
|
||||
<summary>
|
||||
ndicates whether a data point is certain or not.
|
||||
How this is displayed depends on the chart type—for
|
||||
example, it might be indicated by dashed lines or a striped fill.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Emphasis">
|
||||
<summary>
|
||||
Emphasizes specified chart data points. Displayed as a
|
||||
thick line and/or large point.
|
||||
For line and area charts, the segment
|
||||
between two data points is emphasized if and only if
|
||||
both data points are emphasized.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Interval">
|
||||
<summary>
|
||||
ndicates potential data range for a specific point.
|
||||
Intervals are usually displayed as I-bar style range indicators.
|
||||
Interval columns are numeric columns; add interval columns in
|
||||
pairs, marking the low and high value of the bar. Interval
|
||||
values should be added in increasing value, from left to right.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Scope">
|
||||
<summary>
|
||||
Indicates whether a point is in or out of scope.
|
||||
If a point is out of scope, it is visually de-emphasized.
|
||||
For line and area charts, the segment between two data points
|
||||
is in scope if either endpoint is in scope.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Tooltip">
|
||||
<summary>
|
||||
Text to display when the user hovers over the data point
|
||||
associated with this row.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Domain">
|
||||
<summary>
|
||||
You should not need to assign this role explicitly unless designing
|
||||
a multi-domain chart (shown here); the basic
|
||||
format of the data table enables the charting engine to infer which
|
||||
columns are domain columns. However, you should be aware of
|
||||
which columns are domain columns so that you know which other
|
||||
columns can modify it.
|
||||
Domain columns specify labels along the major axis of the chart.
|
||||
Multiple domain columns can sometimes be used to support multiple
|
||||
scales within the same chart.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Data">
|
||||
<summary>
|
||||
You should not need to assign this role explicitly; the basic
|
||||
format of the data table enables the charting engine to
|
||||
infer which columns are domain columns. However, you sould be
|
||||
aware of which columns are data columns so that you know which
|
||||
other columns can modify it.
|
||||
|
||||
Data role columns specify series data to render in the chart.
|
||||
For most charts, one column = one series, but this can vary
|
||||
by chart type (for example, scatter charts require two data
|
||||
columns for the first series, and an additional one for each
|
||||
additional series; candlestick charts require four data columns
|
||||
for each series).
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Extension.EnumerableExtension">
|
||||
<summary>
|
||||
Extension class for lists.
|
||||
</summary>
|
||||
</member>
|
||||
<!-- Badly formed XML comment ignored for member "M:Google.DataTable.Net.Wrapper.Extension.EnumerableExtension.ToGoogleDataTable``1(System.Collections.Generic.IEnumerable{``0})" -->
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.EnumerableExtension.NewColumn``1(Google.DataTable.Net.Wrapper.Extension.DataTableConfig{``0},Google.DataTable.Net.Wrapper.Column,System.Func{``0,System.Object},System.Func{``0,System.String})">
|
||||
<summary>
|
||||
Creates a new column
|
||||
</summary>
|
||||
<typeparam name="T"></typeparam>
|
||||
<param name="source"></param>
|
||||
<param name="col"></param>
|
||||
<param name="rowValue"></param>
|
||||
<param name="rowFormat"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Extension.SystemDataTableExtension">
|
||||
<summary>
|
||||
Class that implements an extension for a System.Data.DataTable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.SystemDataTableExtension.ToGoogleDataTable(System.Data.DataTable)">
|
||||
<summary>
|
||||
Converts a System.Data.DataTable into a Google.DataTable.Net.Wrapper.DataTable
|
||||
</summary>
|
||||
<param name="source"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.DataTable">
|
||||
<summary>
|
||||
A DataTable represents a basic two-dimensional table.
|
||||
All data (cells) in each column must have the same data type.
|
||||
Each cell in the table holds a value.
|
||||
<remarks>
|
||||
For more information about the usage of the serialized DataTable please visit:
|
||||
https://developers.google.com/chart/interactive/docs/reference#DataTable
|
||||
</remarks>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.#ctor">
|
||||
<summary>
|
||||
Default constructor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.NewRow">
|
||||
<summary>
|
||||
Creates a new DataRow with the same schema as the table.
|
||||
</summary>
|
||||
<returns>A new row with the same schema as the table</returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.AddRow(Google.DataTable.Net.Wrapper.Row)">
|
||||
<summary>
|
||||
Adds a row to the list of rows
|
||||
attached to the current DataTable
|
||||
</summary>
|
||||
<param name="row">a row created with NewRow() method</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.AddColumn(Google.DataTable.Net.Wrapper.Column)">
|
||||
<summary>
|
||||
Adds a new column to the current DataTable
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.GetJson">
|
||||
<summary>
|
||||
Returns a Json string compatible with the Google DataTable notation.
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.JsonizeRows(System.IO.StreamWriter)">
|
||||
<summary>
|
||||
Serializes the Rows.
|
||||
<remarks>
|
||||
The choice to have inline both the row and the cell
|
||||
serialization is purely for the performance reasons.
|
||||
</remarks>
|
||||
</summary>
|
||||
<param name="sw"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.JsonizeColumns(System.IO.StreamWriter)">
|
||||
<summary>
|
||||
Serializes the Columns into the Json format
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.DataTable.Columns">
|
||||
<summary>
|
||||
Returns a list of already assigned columns to the current DataTable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.DataTable.Rows">
|
||||
<summary>
|
||||
Returns a list of already assigned rows to the current DataTable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.ColumnType">
|
||||
<summary>
|
||||
ColumnType [Required] Data ColumnType of the data in the column. Supports the following string values (examples include the v: property, described later):
|
||||
'boolean' - JavaScript boolean value ('true' or 'false'). Example value: v:'true'
|
||||
'number' - JavaScript number value. Example values: v:7 , v:3.14, v:-55
|
||||
'string' - JavaScript string value. Example value: v:'hello'
|
||||
'date' - JavaScript Date object (zero-based month), with the time truncated. Example value: v:new Date(2008, 0, 15)
|
||||
'datetime' - JavaScript Date object including the time. Example value: v:new Date(2008, 0, 15, 14, 30, 45)
|
||||
'timeofday' - Array of three numbers and an optional fourth, representing hour (0 indicates midnight), minute, second, and optional millisecond. Example values: v:[8, 15, 0], v: [6, 12, 1, 144]
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.String">
|
||||
<summary>
|
||||
JavaScript string value. Example value: v:'hello'
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Number">
|
||||
<summary>
|
||||
JavaScript number value. Example values: v:7 , v:3.14, v:-55
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Boolean">
|
||||
<summary>
|
||||
JavaScript boolean value ('true' or 'false'). Example value: v:'true'
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Date">
|
||||
<summary>
|
||||
JavaScript Date object (zero-based month), with the time truncated. Example value: v:new Date(2008, 0, 15)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Datetime">
|
||||
<summary>
|
||||
JavaScript Date object including the time. Example value: v:new Date(2008, 0, 15, 14, 30, 45)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Timeofday">
|
||||
<summary>
|
||||
Array of three numbers and an optional fourth, representing hour (0 indicates midnight), minute, second, and optional millisecond. Example values: v:[8, 15, 0], v: [6, 12, 1, 144]
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Common.Helper.DoubleQuoteString2(System.String)">
|
||||
<summary>
|
||||
Wraps the string around double quotes.
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1">
|
||||
<summary>
|
||||
Helper class for the generic lists.
|
||||
</summary>
|
||||
<typeparam name="T"></typeparam>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.AddColumn(Google.DataTable.Net.Wrapper.Column,System.Func{`0,Google.DataTable.Net.Wrapper.Cell})">
|
||||
<summary>
|
||||
Adds a new Column to a Google.DataTable.Net.Wrapper.DataTable
|
||||
</summary>
|
||||
<param name="col"></param>
|
||||
<param name="cellFunction"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.Build">
|
||||
<summary>
|
||||
Build a new Google.DataTable.Net.Wrapper.DataTable()
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.ToDataTable``1(System.Collections.Generic.List{``0})">
|
||||
<summary>
|
||||
Convert a List{T} to a DataTable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.IsNullable(System.Type)">
|
||||
<summary>
|
||||
Determine of specified type is nullable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.GetCoreType(System.Type)">
|
||||
<summary>
|
||||
Return underlying type if type is Nullable otherwise return the type
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Property">
|
||||
<summary>
|
||||
Reserved for future usages.
|
||||
P values in reality should be a name -> value map
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Property.#ctor">
|
||||
<summary>
|
||||
Default constructor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Property.#ctor(System.String,System.String)">
|
||||
<summary>
|
||||
Constructor that has as input name and value
|
||||
</summary>
|
||||
<param name="name"></param>
|
||||
<param name="value"></param>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Row">
|
||||
<summary>
|
||||
A row is an array of cells,
|
||||
plus an optional map of arbitrary name/value pairs that you can assign.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.#ctor">
|
||||
<summary>
|
||||
Internal constructor as we don't allow the direct generation
|
||||
of the row due to the fact that the table Attribute is set
|
||||
internally
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.AddCellRange(Google.DataTable.Net.Wrapper.Cell[])">
|
||||
<summary>
|
||||
Adds a range of Cell objects
|
||||
</summary>
|
||||
<param name="cells"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.AddCell(Google.DataTable.Net.Wrapper.Cell)">
|
||||
<summary>
|
||||
Adds a single cell to the Row
|
||||
</summary>
|
||||
<param name="cell"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Row.ColumnTypes">
|
||||
<summary>
|
||||
A reference to the available column types of the table.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Row.Cells">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Row.PropertyMap">
|
||||
<summary>
|
||||
Returns a list of currently assigned properties to the Row
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.SystemDataTableConverter">
|
||||
<summary>
|
||||
Responsible for converting the System.Data.DataTable into
|
||||
Google.DataTable.Net.Wrapper.DataTable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.SystemDataTableConverter.Convert(System.Data.DataTable)">
|
||||
<summary>
|
||||
Responsible for converting the System.Data.DataTable into
|
||||
Google.DataTable.Net.Wrapper.DataTable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.SystemDataTableConverter.GetColumnTypeFromType(System.Type)">
|
||||
<summary>
|
||||
For more info about System.Data.DataColumn Types
|
||||
http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx
|
||||
</summary>
|
||||
<param name="t"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
|
@ -1,284 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>8a2ebfc4-14ce-4d77-81de-1fd7372c3382</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<TargetFrameworks>net47</TargetFrameworks>
|
||||
<RootNamespace>LogicalHacking.ExtensionDsLab</RootNamespace>
|
||||
<AssemblyName>LogicalHacking.ExtensionDsLab</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<Name>LogicalHacking.ExtensionDsLab</Name>
|
||||
<TargetFrameworkProfile />
|
||||
<DocumentationFile>.\bin\$(Configuration)\$(AssemblyName).xml</DocumentationFile>
|
||||
<OutputType>Library</OutputType>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<!-- Optional: Declare that the Repository URL can be published to NuSpec -->
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
<!-- Optional: Embed source files that are not tracked by the source control manager to the PDB -->
|
||||
<EmbedUntrackedSources>true</EmbedUntrackedSources>
|
||||
<!-- Optional: Include PDB in the built .nupkg -->
|
||||
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<Tailcalls>false</Tailcalls>
|
||||
<OutputPath>.\bin\Debug</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<WarningLevel>3</WarningLevel>
|
||||
<OtherFlags>--warnon:1182</OtherFlags>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<Tailcalls>true</Tailcalls>
|
||||
<OutputPath>.\bin\Release</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<WarningLevel>3</WarningLevel>
|
||||
<OtherFlags>--warnon:1182</OtherFlags>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Choose>
|
||||
<When Condition="'$(VisualStudioVersion)' == '11.0'">
|
||||
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')">
|
||||
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
|
||||
</PropertyGroup>
|
||||
</When>
|
||||
<Otherwise>
|
||||
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')">
|
||||
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
|
||||
</PropertyGroup>
|
||||
</Otherwise>
|
||||
</Choose>
|
||||
<Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')" />
|
||||
<Import Project="..\..\.paket\paket.targets" />
|
||||
<ItemGroup>
|
||||
<Compile Include="SqlConnector.fs" />
|
||||
<None Include="Scripts\Script.fsx" />
|
||||
<None Include="paket.references" />
|
||||
<None Include="paket.template" />
|
||||
<Content Include="Google.DataTable.Net.Wrapper.XML">
|
||||
<Paket>True</Paket>
|
||||
</Content>
|
||||
<Content Include="app.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />/
|
||||
<Reference Include="System.Numerics" /></ItemGroup>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Deedle">
|
||||
<HintPath>..\..\packages\Deedle\lib\net40\Deedle.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Deedle.RProvider.Plugin">
|
||||
<HintPath>..\..\packages\Deedle.RPlugin\lib\net40\Deedle.RProvider.Plugin.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="DynamicInterop">
|
||||
<HintPath>..\..\packages\DynamicInterop\lib\net40\DynamicInterop.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="FSharp.Charting">
|
||||
<HintPath>..\..\packages\FSharp.Charting\lib\net40\FSharp.Charting.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="FSharp.Core">
|
||||
<HintPath>..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
<Reference Include="FSharp.Data">
|
||||
<HintPath>..\..\packages\FSharp.Data\lib\net40\FSharp.Data.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Google.DataTable.Net.Wrapper">
|
||||
<HintPath>..\..\packages\Google.DataTable.Net.Wrapper\lib\Google.DataTable.Net.Wrapper.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="MathNet.Numerics">
|
||||
<HintPath>..\..\packages\MathNet.Numerics\lib\net40\MathNet.Numerics.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="MathNet.Numerics.FSharp">
|
||||
<HintPath>..\..\packages\MathNet.Numerics.FSharp\lib\net40\MathNet.Numerics.FSharp.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="RDotNet">
|
||||
<HintPath>..\..\packages\R.NET.Community\lib\net40\RDotNet.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
<Reference Include="RDotNet.NativeLibrary">
|
||||
<HintPath>..\..\packages\R.NET.Community\lib\net40\RDotNet.NativeLibrary.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="RDotNet.FSharp">
|
||||
<HintPath>..\..\packages\R.NET.Community.FSharp\lib\net40\RDotNet.FSharp.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="RProvider">
|
||||
<HintPath>..\..\packages\RProvider\lib\net40\RProvider.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
<Reference Include="RProvider.Runtime">
|
||||
<HintPath>..\..\packages\RProvider\lib\net40\RProvider.Runtime.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="FSharp.Data.SqlProvider">
|
||||
<HintPath>..\..\packages\SQLProvider\lib\FSharp.Data.SqlProvider.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
<Reference Include="MySql.Data">
|
||||
<HintPath>..\..\packages\MySql.Data\lib\net45\MySql.Data.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Suave">
|
||||
<HintPath>..\..\packages\Suave\lib\net40\Suave.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="XPlot.GoogleCharts">
|
||||
<HintPath>..\..\packages\XPlot.GoogleCharts\lib\net45\XPlot.GoogleCharts.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="XPlot.GoogleCharts.Deedle">
|
||||
<HintPath>..\..\packages\XPlot.GoogleCharts.Deedle\lib\net45\XPlot.GoogleCharts.Deedle.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="XPlot.Plotly">
|
||||
<HintPath>..\..\packages\XPlot.Plotly\lib\net45\XPlot.Plotly.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
</Project>
|
||||
<Import Project="..\..\fsc.props" />
|
||||
<Import Project="..\..\.paket\Paket.Restore.targets" />
|
||||
</Project>
|
|
@ -1,17 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<connectionStrings>
|
||||
<add name="ProductionExtensionDB" providerName="FSharp.Data.Sql.SqlTypeProvider"
|
||||
connectionString="Server=dbknecht.mherzberg.de;Database=extensions;User=achim;Password=kNFuBiEJVu5DDKZ5"/>
|
||||
</connectionStrings>
|
||||
<runtime>
|
||||
<assemblyBinding
|
||||
xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<Paket>True</Paket>
|
||||
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="4.4.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
|
@ -1,3 +1,5 @@
|
|||
FSharp.Core
|
||||
FsLab
|
||||
SQLProvider
|
||||
Mysql.Data
|
||||
SQLProvider
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
type project
|
||||
type file
|
||||
id LogicalHacking.ExtensionDsLab
|
||||
title
|
||||
LogicalHacking.ExtensionDsLab
|
||||
owners
|
||||
|
@ -8,11 +9,13 @@ authors
|
|||
projectUrl
|
||||
https://git.logicalhacking.com/BrowserSecurity/ExtensionDsLab
|
||||
iconUrl
|
||||
https://git.logicalhacking.com/BrowserSecurity/ExtensionDsLab/master/docs/files/img/logo.png
|
||||
https://raw.githubusercontent.com/BrowserSecurity/ExtensionDsLab/master/docs/files/img/logo.png
|
||||
licenseUrl
|
||||
https://git.logicalhacking.com/BrowserSecurity/ExtensionDsLab/raw/master/LICENSE
|
||||
https://git.logicalhacking.com/BrowserSecurity/ExtensionDsLab/blob/master/LICENSE
|
||||
requireLicenseAcceptance
|
||||
false
|
||||
language
|
||||
F#
|
||||
copyright
|
||||
Copyright 2017
|
||||
tags
|
||||
|
@ -22,4 +25,5 @@ summary
|
|||
description
|
||||
A data science framework for analyzing Chrome browser extensions.
|
||||
|
||||
|
||||
files
|
||||
../../bin/LogicalHacking.ExtensionDsLab ==> lib
|
||||
|
|
|
@ -0,0 +1,245 @@
|
|||
namespace LogicalHacking.ExtensionDsLab.Tests
|
||||
|
||||
open FsCheck
|
||||
open System
|
||||
|
||||
module GeneratorsCode =
|
||||
|
||||
//https://msdn.microsoft.com/en-us/library/system.char.iswhitespace(v=vs.110).aspx
|
||||
let spaceSeparator = [
|
||||
'\u0020'
|
||||
'\u1680'
|
||||
'\u2000'
|
||||
'\u2001'
|
||||
'\u2002'
|
||||
'\u2003'
|
||||
'\u2004'
|
||||
'\u2005'
|
||||
'\u2006'
|
||||
'\u2007'
|
||||
'\u2008'
|
||||
'\u2009'
|
||||
'\u200A'
|
||||
'\u202F'
|
||||
'\u205F'
|
||||
'\u3000'
|
||||
]
|
||||
|
||||
let lineSeparator = ['\u2028']
|
||||
|
||||
let paragraphSeparator = ['\u2029']
|
||||
|
||||
let miscWhitespace = [
|
||||
'\u0009'
|
||||
'\u000A'
|
||||
'\u000B'
|
||||
'\u000C'
|
||||
'\u000D'
|
||||
'\u0085'
|
||||
'\u00A0'
|
||||
]
|
||||
|
||||
let whiteSpace =
|
||||
List.concat [spaceSeparator; lineSeparator; paragraphSeparator; miscWhitespace]
|
||||
|
||||
let nonDigitalString() =
|
||||
gen {
|
||||
let! a = Arb.generate<NonEmptyString>
|
||||
return! Gen.elements [a.ToString()]
|
||||
}
|
||||
|> Gen.filter(fun x ->
|
||||
let (isInt, _) =Int32.TryParse x
|
||||
not isInt)
|
||||
|
||||
let whitespaceString() =
|
||||
let length =
|
||||
Gen.sample 1 1 <| Gen.choose (1, 30)
|
||||
|> List.head
|
||||
|> int
|
||||
|
||||
Gen.arrayOfLength length <| Gen.elements whiteSpace
|
||||
|> Gen.map (fun x -> new string(x))
|
||||
|
||||
let nonEmptyNonAllWhitespaceString() =
|
||||
gen {
|
||||
return!
|
||||
Arb.generate<NonEmptyString>
|
||||
}
|
||||
|> Gen.filter (fun x ->
|
||||
let charA = x.ToString().ToCharArray()
|
||||
Array.fold (fun s t ->
|
||||
if List.exists (fun x' -> x' = t) whiteSpace |> not then true
|
||||
else s
|
||||
) false charA )
|
||||
|> Gen.map (fun x -> x.ToString())
|
||||
|
||||
let genNonEmptyNonAllWhitespaceStringList() =
|
||||
let positiveInt = Arb.generate<PositiveInt>
|
||||
let length =
|
||||
Gen.sample 30 1 positiveInt
|
||||
|> List.head
|
||||
|> int
|
||||
|
||||
Gen.listOfLength length <| nonEmptyNonAllWhitespaceString()
|
||||
|
||||
let genDigitsInWhiteSpace () =
|
||||
gen {
|
||||
let! frontWhitespace = whitespaceString()
|
||||
let! digits = Arb.generate<NonNegativeInt>
|
||||
let! endWhitespace = whitespaceString()
|
||||
return sprintf "%s%s%s" frontWhitespace (digits.ToString()) endWhitespace
|
||||
}
|
||||
|
||||
let validDigits digits length =
|
||||
if digits.ToString().Length = length then
|
||||
digits.ToString()
|
||||
elif digits.ToString().Length < length then
|
||||
digits.ToString().PadLeft(length, '0')
|
||||
else
|
||||
digits.ToString().Substring(0, length)
|
||||
|
||||
let invalidDigits digits length =
|
||||
if digits.ToString().Length = length then
|
||||
sprintf "0%s" <| digits.ToString()
|
||||
else
|
||||
digits.ToString()
|
||||
|
||||
let genDigitsOfLengthInWhiteSpace length =
|
||||
gen {
|
||||
let! frontWhitespace = whitespaceString()
|
||||
let! digits = Arb.generate<NonNegativeInt>
|
||||
let! endWhitespace = whitespaceString()
|
||||
return sprintf "%s%s%s" frontWhitespace (validDigits digits length) endWhitespace |> Some
|
||||
}
|
||||
|> Gen.filter Option.isSome
|
||||
|> Gen.map (fun x -> x.Value)
|
||||
|
||||
let inputZip5Plus4() =
|
||||
gen {
|
||||
let! digits = Arb.generate<NonNegativeInt>
|
||||
return validDigits digits 9
|
||||
}
|
||||
|
||||
let genUsPhone7() =
|
||||
gen {
|
||||
let! digitsExchange = Arb.generate<NonNegativeInt>
|
||||
let exchange = validDigits digitsExchange 3
|
||||
let! digitsSuffix = Arb.generate<NonNegativeInt>
|
||||
let suffix = validDigits digitsSuffix 4
|
||||
let! divide = Gen.elements["";"-";" -";" -";"- ";"- ";" ";" ";]
|
||||
let! start = Gen.elements["";" ";]
|
||||
let! after = Gen.elements["";" ";]
|
||||
|
||||
return sprintf "%s%s%s%s%s" start exchange divide suffix after
|
||||
}
|
||||
|
||||
let genUsPhone10() =
|
||||
gen {
|
||||
let! digitsAreaCode = Arb.generate<NonNegativeInt>
|
||||
let areaCode = validDigits digitsAreaCode 3
|
||||
let! usPhone7 = genUsPhone7()
|
||||
let! start = Gen.elements["";" ";"(";"( ";"( ";" (";" (";" ( ";]
|
||||
let! divide = Gen.elements["";" ";")";" )";" )";") ";") ";" ) ";]
|
||||
|
||||
return sprintf "%s%s%s%s" start areaCode divide usPhone7
|
||||
}
|
||||
|
||||
let genUsPhone() =
|
||||
gen {
|
||||
let! usPhone7 = genUsPhone7()
|
||||
let! usPhone10 = genUsPhone10()
|
||||
return! Gen.elements [usPhone7; usPhone10]
|
||||
}
|
||||
|
||||
let genUsPhoneList() =
|
||||
Gen.listOf <| genUsPhone()
|
||||
|
||||
let genOtherPhone() =
|
||||
//other phone accespts any digit at least 5 and no more than 14 long
|
||||
//to do: fix to reject international prefixes
|
||||
gen {
|
||||
let! length = Gen.choose (5, 14)
|
||||
return! genDigitsOfLengthInWhiteSpace length
|
||||
}
|
||||
|
||||
|
||||
let genOtherPhoneList() =
|
||||
Gen.listOf <| genOtherPhone()
|
||||
|
||||
let genPhoneList() =
|
||||
gen {
|
||||
let! usPhone = genUsPhoneList()
|
||||
let! otherPhone = genOtherPhoneList()
|
||||
return
|
||||
usPhone
|
||||
|> List.append otherPhone
|
||||
|> List.sortDescending
|
||||
}
|
||||
|
||||
let genCallingCode() =
|
||||
let callingCode digits length =
|
||||
let x = validDigits digits length
|
||||
if x.StartsWith("0") then
|
||||
x.Replace("0", "1")
|
||||
else x
|
||||
|> UInt16.Parse
|
||||
|
||||
gen {
|
||||
let! digits = Arb.generate<NonNegativeInt>
|
||||
let! callingCode = Gen.elements [callingCode digits 4 |> Some; callingCode digits 3 |> Some; callingCode digits 2 |> Some; callingCode digits 1 |> Some; None]
|
||||
|
||||
return callingCode
|
||||
}
|
||||
|
||||
let genPhoneNumber() =
|
||||
gen {
|
||||
let! callingCodeRaw = genCallingCode()
|
||||
let callingCode = callingCodeRaw |> Option.map (fun x -> x.ToString())
|
||||
|
||||
let! usPhone = genUsPhone()
|
||||
let! otherPhone = genOtherPhone()
|
||||
let! phone = Gen.elements[usPhone; otherPhone]
|
||||
let! extensionRaw = Arb.generate<NonNegativeInt>
|
||||
|
||||
let! extension = Gen.elements [extensionRaw.ToString() |> Some; None]
|
||||
|
||||
let! whiteSpace1Raw = whitespaceString()
|
||||
let! whiteSpace2Raw = whitespaceString()
|
||||
let! whiteSpace3Raw = whitespaceString()
|
||||
let! whiteSpace4Raw = whitespaceString()
|
||||
let! whiteSpace5Raw = whitespaceString()
|
||||
|
||||
let! whiteSpace1 = Gen.elements [whiteSpace1Raw |> Some; None]
|
||||
let! whiteSpace2 = Gen.elements [whiteSpace2Raw |> Some; None]
|
||||
let! whiteSpace3 = Gen.elements [whiteSpace3Raw |> Some; None]
|
||||
let! whiteSpace4 = Gen.elements [whiteSpace4Raw |> Some; None]
|
||||
let! whiteSpace5 = Gen.elements [whiteSpace5Raw |> Some; None]
|
||||
|
||||
let symbolValueWhitespace symbol value whiteSpace =
|
||||
sprintf "%s%s%s%s" symbol (defaultArg whiteSpace String.Empty) value (defaultArg whiteSpace String.Empty)
|
||||
|
||||
let phoneNumber =
|
||||
sprintf "%s%s%s%s%s%s"
|
||||
(defaultArg whiteSpace1 String.Empty)
|
||||
(match callingCode with | Some x -> symbolValueWhitespace "+" x whiteSpace2 | None -> String.Empty)
|
||||
phone
|
||||
(defaultArg whiteSpace3 String.Empty)
|
||||
(match extension with | Some x -> symbolValueWhitespace "X" x whiteSpace4 | None -> String.Empty)
|
||||
(defaultArg whiteSpace5 String.Empty)
|
||||
|
||||
return (callingCode, phone, extension, phoneNumber)
|
||||
}
|
||||
|
||||
let genUri() =
|
||||
gen {
|
||||
let! uriRaw = nonEmptyNonAllWhitespaceString()
|
||||
let! uri = Gen.elements [" http://" + uriRaw; " https://" + uriRaw; " ftp://" + uriRaw; " ftps://" + uriRaw;]
|
||||
return uri
|
||||
}
|
||||
|
||||
type Generators =
|
||||
static member NonEmptyStringList() =
|
||||
{new Arbitrary<string list>() with
|
||||
override __.Generator =
|
||||
GeneratorsCode.genNonEmptyNonAllWhitespaceStringList()
|
||||
}
|
|
@ -1,565 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Google.DataTable.Net.Wrapper</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Cell">
|
||||
<summary>
|
||||
Each cell is an object containing an actual value of the column type,
|
||||
plus an optional string-formatted version of the value that you provide.
|
||||
|
||||
<example>For example: a numeric column might be assigned the value 7
|
||||
and the formatted value "seven".
|
||||
If a formatted value is supplied, a chart will use the actual value for
|
||||
calculations and rendering, but might show the formatted value where appropriate,
|
||||
for example if the user hovers over a point. Each cell also has an optional
|
||||
map of arbitrary name/value pairs.
|
||||
</example>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.IPropertyMap.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.IPropertyMap.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.IPropertyMap.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.IPropertyMap.PropertyMap">
|
||||
<summary>
|
||||
Returns a list of currently assigned properties to the Cell
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.#ctor">
|
||||
<summary>
|
||||
Default constructor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.#ctor(System.Object)">
|
||||
<summary>
|
||||
Constructor that accepts a value
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.#ctor(System.Object,System.String)">
|
||||
<summary>
|
||||
Constructor that accepts a value and formatted properties.
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
<param name="formatted"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Cell.GetFormattedValue(Google.DataTable.Net.Wrapper.ColumnType,System.Object)">
|
||||
<summary>
|
||||
Returns the value formated depending on the object type.
|
||||
</summary>
|
||||
<param name="columnType"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.ColumnType">
|
||||
<summary>
|
||||
Column type represents the type of value that the current cell holds.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.Value">
|
||||
<summary>
|
||||
[Optional] The cell value. The data ColumnType should match the column data ColumnType.
|
||||
If null, the whole object should be empty and have neither v nor f properties.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.Formatted">
|
||||
<summary>
|
||||
[Optional] A string version of the v value, formatted for display.
|
||||
The values should match, so if you specify Date(2008, 0, 1) for v,
|
||||
you should specify "January 1, 2008" or some such string for this property.
|
||||
This value is not checked against the v value. The visualization will not use this value
|
||||
for calculation, only as a label for display. If omitted, a string version of v will be used.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Cell.PropertyMap">
|
||||
<summary>
|
||||
Returns a list of currently assigned properties to the Cell
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.GetJson(System.IO.StreamWriter)">
|
||||
<summary>
|
||||
Returns the Json string as expected by the Google Api
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Column.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Id">
|
||||
<summary>
|
||||
id [Optional] String ID of the column. Must be unique in the table.
|
||||
Use basic alphanumeric characters, so the host page does not require
|
||||
fancy escapes to access the column in JavaScript. Be careful not to
|
||||
choose a JavaScript keyword. Example: id:'col_1'
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Label">
|
||||
<summary>
|
||||
label [Optional] String value that some visualizations display for this column.
|
||||
<example>Example: label:'Height'</example>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.ColumnType">
|
||||
<summary>
|
||||
ColumnType [Required] Data ColumnType of the data in the column.
|
||||
Supports the following string values (examples include the v: property, described later):
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Role">
|
||||
<summary>
|
||||
A column role describes the purpose of the data in that column:
|
||||
for example, a column might hold data describing tooltip text,
|
||||
data point annotations, or uncertainty indicators.
|
||||
</summary>
|
||||
<remarks>
|
||||
More info about the role can be read here
|
||||
https://developers.google.com/chart/interactive/docs/roles
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.Pattern">
|
||||
<summary>
|
||||
pattern [Optional] String pattern that was used by a data source
|
||||
to format numeric, date, or time column values.
|
||||
This is for reference only; you probably won't need to read
|
||||
the pattern, and it isn't required to exist.
|
||||
The Google Visualization client does not use this value
|
||||
(it reads the cell's formatted value).
|
||||
If the DataTable has come from a data source in response to a query
|
||||
with a format clause, the pattern you specified in that clause
|
||||
will probably be returned in this value.
|
||||
The recommended pattern standards are the ICU DecimalFormat and SimpleDateFormat.
|
||||
<remarks>
|
||||
<see cref="!:http://icu-project.org/apiref/icu4j/com/ibm/icu/text/SimpleDateFormat.html"/>
|
||||
<see cref="!:http://icu-project.org/apiref/icu4j/com/ibm/icu/text/DecimalFormat.html"/>
|
||||
</remarks>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Column.PropertyMap">
|
||||
<summary>
|
||||
p [Optional] An object that is a map of custom values applied to the cell.
|
||||
These values can be of any JavaScript ColumnType.
|
||||
If your visualization supports any cell-level properties,
|
||||
it will describe them; otherwise, this property will be ignored.
|
||||
<example>
|
||||
Example: p:{style: 'border: 1px solid green;'}.
|
||||
</example>
|
||||
</summary>
|
||||
<remarks>
|
||||
Returns a list of currently assigned properties to the Cell
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Annotation">
|
||||
<summary>
|
||||
Text to display on the chart near the associated data point.
|
||||
The text displays without any user interaction.
|
||||
Annotations and annotation text can be assigned to both
|
||||
data points and categories (axis labels).
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.AnnotationText">
|
||||
<summary>
|
||||
Extended text to display when the user hovers
|
||||
over the associated annotation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Certainty">
|
||||
<summary>
|
||||
ndicates whether a data point is certain or not.
|
||||
How this is displayed depends on the chart type—for
|
||||
example, it might be indicated by dashed lines or a striped fill.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Emphasis">
|
||||
<summary>
|
||||
Emphasizes specified chart data points. Displayed as a
|
||||
thick line and/or large point.
|
||||
For line and area charts, the segment
|
||||
between two data points is emphasized if and only if
|
||||
both data points are emphasized.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Interval">
|
||||
<summary>
|
||||
ndicates potential data range for a specific point.
|
||||
Intervals are usually displayed as I-bar style range indicators.
|
||||
Interval columns are numeric columns; add interval columns in
|
||||
pairs, marking the low and high value of the bar. Interval
|
||||
values should be added in increasing value, from left to right.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Scope">
|
||||
<summary>
|
||||
Indicates whether a point is in or out of scope.
|
||||
If a point is out of scope, it is visually de-emphasized.
|
||||
For line and area charts, the segment between two data points
|
||||
is in scope if either endpoint is in scope.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Tooltip">
|
||||
<summary>
|
||||
Text to display when the user hovers over the data point
|
||||
associated with this row.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Domain">
|
||||
<summary>
|
||||
You should not need to assign this role explicitly unless designing
|
||||
a multi-domain chart (shown here); the basic
|
||||
format of the data table enables the charting engine to infer which
|
||||
columns are domain columns. However, you should be aware of
|
||||
which columns are domain columns so that you know which other
|
||||
columns can modify it.
|
||||
Domain columns specify labels along the major axis of the chart.
|
||||
Multiple domain columns can sometimes be used to support multiple
|
||||
scales within the same chart.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.ColumnRole.Data">
|
||||
<summary>
|
||||
You should not need to assign this role explicitly; the basic
|
||||
format of the data table enables the charting engine to
|
||||
infer which columns are domain columns. However, you sould be
|
||||
aware of which columns are data columns so that you know which
|
||||
other columns can modify it.
|
||||
|
||||
Data role columns specify series data to render in the chart.
|
||||
For most charts, one column = one series, but this can vary
|
||||
by chart type (for example, scatter charts require two data
|
||||
columns for the first series, and an additional one for each
|
||||
additional series; candlestick charts require four data columns
|
||||
for each series).
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Extension.EnumerableExtension">
|
||||
<summary>
|
||||
Extension class for lists.
|
||||
</summary>
|
||||
</member>
|
||||
<!-- Badly formed XML comment ignored for member "M:Google.DataTable.Net.Wrapper.Extension.EnumerableExtension.ToGoogleDataTable``1(System.Collections.Generic.IEnumerable{``0})" -->
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.EnumerableExtension.NewColumn``1(Google.DataTable.Net.Wrapper.Extension.DataTableConfig{``0},Google.DataTable.Net.Wrapper.Column,System.Func{``0,System.Object},System.Func{``0,System.String})">
|
||||
<summary>
|
||||
Creates a new column
|
||||
</summary>
|
||||
<typeparam name="T"></typeparam>
|
||||
<param name="source"></param>
|
||||
<param name="col"></param>
|
||||
<param name="rowValue"></param>
|
||||
<param name="rowFormat"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Extension.SystemDataTableExtension">
|
||||
<summary>
|
||||
Class that implements an extension for a System.Data.DataTable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.SystemDataTableExtension.ToGoogleDataTable(System.Data.DataTable)">
|
||||
<summary>
|
||||
Converts a System.Data.DataTable into a Google.DataTable.Net.Wrapper.DataTable
|
||||
</summary>
|
||||
<param name="source"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.DataTable">
|
||||
<summary>
|
||||
A DataTable represents a basic two-dimensional table.
|
||||
All data (cells) in each column must have the same data type.
|
||||
Each cell in the table holds a value.
|
||||
<remarks>
|
||||
For more information about the usage of the serialized DataTable please visit:
|
||||
https://developers.google.com/chart/interactive/docs/reference#DataTable
|
||||
</remarks>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.#ctor">
|
||||
<summary>
|
||||
Default constructor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.NewRow">
|
||||
<summary>
|
||||
Creates a new DataRow with the same schema as the table.
|
||||
</summary>
|
||||
<returns>A new row with the same schema as the table</returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.AddRow(Google.DataTable.Net.Wrapper.Row)">
|
||||
<summary>
|
||||
Adds a row to the list of rows
|
||||
attached to the current DataTable
|
||||
</summary>
|
||||
<param name="row">a row created with NewRow() method</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.AddColumn(Google.DataTable.Net.Wrapper.Column)">
|
||||
<summary>
|
||||
Adds a new column to the current DataTable
|
||||
</summary>
|
||||
<param name="column"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.GetJson">
|
||||
<summary>
|
||||
Returns a Json string compatible with the Google DataTable notation.
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.JsonizeRows(System.IO.StreamWriter)">
|
||||
<summary>
|
||||
Serializes the Rows.
|
||||
<remarks>
|
||||
The choice to have inline both the row and the cell
|
||||
serialization is purely for the performance reasons.
|
||||
</remarks>
|
||||
</summary>
|
||||
<param name="sw"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.DataTable.JsonizeColumns(System.IO.StreamWriter)">
|
||||
<summary>
|
||||
Serializes the Columns into the Json format
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.DataTable.Columns">
|
||||
<summary>
|
||||
Returns a list of already assigned columns to the current DataTable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.DataTable.Rows">
|
||||
<summary>
|
||||
Returns a list of already assigned rows to the current DataTable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.ColumnType">
|
||||
<summary>
|
||||
ColumnType [Required] Data ColumnType of the data in the column. Supports the following string values (examples include the v: property, described later):
|
||||
'boolean' - JavaScript boolean value ('true' or 'false'). Example value: v:'true'
|
||||
'number' - JavaScript number value. Example values: v:7 , v:3.14, v:-55
|
||||
'string' - JavaScript string value. Example value: v:'hello'
|
||||
'date' - JavaScript Date object (zero-based month), with the time truncated. Example value: v:new Date(2008, 0, 15)
|
||||
'datetime' - JavaScript Date object including the time. Example value: v:new Date(2008, 0, 15, 14, 30, 45)
|
||||
'timeofday' - Array of three numbers and an optional fourth, representing hour (0 indicates midnight), minute, second, and optional millisecond. Example values: v:[8, 15, 0], v: [6, 12, 1, 144]
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.String">
|
||||
<summary>
|
||||
JavaScript string value. Example value: v:'hello'
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Number">
|
||||
<summary>
|
||||
JavaScript number value. Example values: v:7 , v:3.14, v:-55
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Boolean">
|
||||
<summary>
|
||||
JavaScript boolean value ('true' or 'false'). Example value: v:'true'
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Date">
|
||||
<summary>
|
||||
JavaScript Date object (zero-based month), with the time truncated. Example value: v:new Date(2008, 0, 15)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Datetime">
|
||||
<summary>
|
||||
JavaScript Date object including the time. Example value: v:new Date(2008, 0, 15, 14, 30, 45)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Google.DataTable.Net.Wrapper.ColumnType.Timeofday">
|
||||
<summary>
|
||||
Array of three numbers and an optional fourth, representing hour (0 indicates midnight), minute, second, and optional millisecond. Example values: v:[8, 15, 0], v: [6, 12, 1, 144]
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Common.Helper.DoubleQuoteString2(System.String)">
|
||||
<summary>
|
||||
Wraps the string around double quotes.
|
||||
</summary>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1">
|
||||
<summary>
|
||||
Helper class for the generic lists.
|
||||
</summary>
|
||||
<typeparam name="T"></typeparam>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.AddColumn(Google.DataTable.Net.Wrapper.Column,System.Func{`0,Google.DataTable.Net.Wrapper.Cell})">
|
||||
<summary>
|
||||
Adds a new Column to a Google.DataTable.Net.Wrapper.DataTable
|
||||
</summary>
|
||||
<param name="col"></param>
|
||||
<param name="cellFunction"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.Build">
|
||||
<summary>
|
||||
Build a new Google.DataTable.Net.Wrapper.DataTable()
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.ToDataTable``1(System.Collections.Generic.List{``0})">
|
||||
<summary>
|
||||
Convert a List{T} to a DataTable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.IsNullable(System.Type)">
|
||||
<summary>
|
||||
Determine of specified type is nullable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Extension.DataTableConfig`1.GetCoreType(System.Type)">
|
||||
<summary>
|
||||
Return underlying type if type is Nullable otherwise return the type
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Property">
|
||||
<summary>
|
||||
Reserved for future usages.
|
||||
P values in reality should be a name -> value map
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Property.#ctor">
|
||||
<summary>
|
||||
Default constructor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Property.#ctor(System.String,System.String)">
|
||||
<summary>
|
||||
Constructor that has as input name and value
|
||||
</summary>
|
||||
<param name="name"></param>
|
||||
<param name="value"></param>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.Row">
|
||||
<summary>
|
||||
A row is an array of cells,
|
||||
plus an optional map of arbitrary name/value pairs that you can assign.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.#ctor">
|
||||
<summary>
|
||||
Internal constructor as we don't allow the direct generation
|
||||
of the row due to the fact that the table Attribute is set
|
||||
internally
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.AddCellRange(Google.DataTable.Net.Wrapper.Cell[])">
|
||||
<summary>
|
||||
Adds a range of Cell objects
|
||||
</summary>
|
||||
<param name="cells"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.AddCell(Google.DataTable.Net.Wrapper.Cell)">
|
||||
<summary>
|
||||
Adds a single cell to the Row
|
||||
</summary>
|
||||
<param name="cell"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.AddProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Adds a new property to the list of properties.
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.RemoveProperty(Google.DataTable.Net.Wrapper.Property)">
|
||||
<summary>
|
||||
Removes a property from the Property Map
|
||||
</summary>
|
||||
<param name="p"></param>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.Row.RemoveProperty(System.Int32)">
|
||||
<summary>
|
||||
Removes a property from the Property Map by an index.
|
||||
</summary>
|
||||
<param name="index"></param>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Row.ColumnTypes">
|
||||
<summary>
|
||||
A reference to the available column types of the table.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Row.Cells">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Google.DataTable.Net.Wrapper.Row.PropertyMap">
|
||||
<summary>
|
||||
Returns a list of currently assigned properties to the Row
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Google.DataTable.Net.Wrapper.SystemDataTableConverter">
|
||||
<summary>
|
||||
Responsible for converting the System.Data.DataTable into
|
||||
Google.DataTable.Net.Wrapper.DataTable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.SystemDataTableConverter.Convert(System.Data.DataTable)">
|
||||
<summary>
|
||||
Responsible for converting the System.Data.DataTable into
|
||||
Google.DataTable.Net.Wrapper.DataTable.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Google.DataTable.Net.Wrapper.SystemDataTableConverter.GetColumnTypeFromType(System.Type)">
|
||||
<summary>
|
||||
For more info about System.Data.DataColumn Types
|
||||
http://msdn.microsoft.com/en-us/library/system.data.datacolumn.datatype.aspx
|
||||
</summary>
|
||||
<param name="t"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
|
@ -1,302 +1,25 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>661253b3-4c4d-4ebd-87e4-f1c6f010347f</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<TargetFramework>net47</TargetFramework>
|
||||
<RootNamespace>LogicalHacking.ExtensionDsLab.Tests</RootNamespace>
|
||||
<AssemblyName>LogicalHacking.ExtensionDsLab.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<Name>LogicalHacking.ExtensionDsLab.Tests</Name>
|
||||
<TargetFrameworkProfile />
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<Tailcalls>false</Tailcalls>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<WarningLevel>3</WarningLevel>
|
||||
<StartAction>Project</StartAction>
|
||||
<StartProgram>
|
||||
</StartProgram>
|
||||
<StartArguments>
|
||||
</StartArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<Tailcalls>true</Tailcalls>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<WarningLevel>3</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
<Choose>
|
||||
<When Condition="'$(VisualStudioVersion)' == '11.0'">
|
||||
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')">
|
||||
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
|
||||
</PropertyGroup>
|
||||
</When>
|
||||
<Otherwise>
|
||||
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')">
|
||||
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
|
||||
</PropertyGroup>
|
||||
</Otherwise>
|
||||
</Choose>
|
||||
<Import Project="$(FSharpTargetsPath)" />
|
||||
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
<Import Project="..\..\.paket\paket.targets" />
|
||||
<ItemGroup>
|
||||
<Compile Include="Generators.fs" />
|
||||
<Compile Include="Tests.fs" />
|
||||
<Compile Include="RunTests.fs" />
|
||||
<None Include="paket.references" />
|
||||
<Content Include="Google.DataTable.Net.Wrapper.XML">
|
||||
<Paket>True</Paket>
|
||||
</Content>
|
||||
<Content Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Numerics" />
|
||||
<ProjectReference Include="..\..\src\LogicalHacking.ExtensionDsLab\LogicalHacking.ExtensionDsLab.fsproj">
|
||||
<Name>LogicalHacking.ExtensionDsLab</Name>
|
||||
<Project>{8a2ebfc4-14ce-4d77-81de-1fd7372c3382}</Project>
|
||||
<Private>True</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Deedle">
|
||||
<HintPath>..\..\packages\Deedle\lib\net40\Deedle.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Deedle.RProvider.Plugin">
|
||||
<HintPath>..\..\packages\Deedle.RPlugin\lib\net40\Deedle.RProvider.Plugin.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="DynamicInterop">
|
||||
<HintPath>..\..\packages\DynamicInterop\lib\net40\DynamicInterop.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="FSharp.Charting">
|
||||
<HintPath>..\..\packages\FSharp.Charting\lib\net40\FSharp.Charting.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="FSharp.Core">
|
||||
<HintPath>..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
<Reference Include="FSharp.Data">
|
||||
<HintPath>..\..\packages\FSharp.Data\lib\net40\FSharp.Data.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Google.DataTable.Net.Wrapper">
|
||||
<HintPath>..\..\packages\Google.DataTable.Net.Wrapper\lib\Google.DataTable.Net.Wrapper.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="MathNet.Numerics">
|
||||
<HintPath>..\..\packages\MathNet.Numerics\lib\net40\MathNet.Numerics.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="MathNet.Numerics.FSharp">
|
||||
<HintPath>..\..\packages\MathNet.Numerics.FSharp\lib\net40\MathNet.Numerics.FSharp.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\..\packages\Newtonsoft.Json\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="RDotNet">
|
||||
<HintPath>..\..\packages\R.NET.Community\lib\net40\RDotNet.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
<Reference Include="RDotNet.NativeLibrary">
|
||||
<HintPath>..\..\packages\R.NET.Community\lib\net40\RDotNet.NativeLibrary.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="RDotNet.FSharp">
|
||||
<HintPath>..\..\packages\R.NET.Community.FSharp\lib\net40\RDotNet.FSharp.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="RProvider">
|
||||
<HintPath>..\..\packages\RProvider\lib\net40\RProvider.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
<Reference Include="RProvider.Runtime">
|
||||
<HintPath>..\..\packages\RProvider\lib\net40\RProvider.Runtime.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="FSharp.Data.SqlProvider">
|
||||
<HintPath>..\..\packages\SQLProvider\lib\FSharp.Data.SqlProvider.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="Suave">
|
||||
<HintPath>..\..\packages\Suave\lib\net40\Suave.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="XPlot.GoogleCharts">
|
||||
<HintPath>..\..\packages\XPlot.GoogleCharts\lib\net45\XPlot.GoogleCharts.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="XPlot.GoogleCharts.Deedle">
|
||||
<HintPath>..\..\packages\XPlot.GoogleCharts.Deedle\lib\net45\XPlot.GoogleCharts.Deedle.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Choose>
|
||||
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2' Or $(TargetFrameworkVersion) == 'v4.6.3' Or $(TargetFrameworkVersion) == 'v4.7')">
|
||||
<ItemGroup>
|
||||
<Reference Include="XPlot.Plotly">
|
||||
<HintPath>..\..\packages\XPlot.Plotly\lib\net45\XPlot.Plotly.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<ItemGroup>
|
||||
<Reference Include="nunit.framework">
|
||||
<HintPath>..\..\packages\test\NUnit\lib\nunit.framework.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Paket>True</Paket>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
<Import Project="..\..\fsc.props" />
|
||||
<Import Project="..\..\.paket\Paket.Restore.targets" />
|
||||
</Project>
|
|
@ -0,0 +1,13 @@
|
|||
namespace LogicalHacking.ExtensionDsLab.Tests
|
||||
|
||||
open Expecto
|
||||
|
||||
module RunTests =
|
||||
|
||||
[<EntryPoint>]
|
||||
let main args =
|
||||
|
||||
Tests.runTestsWithArgs defaultConfig args Tests.testSimpleTests |> ignore
|
||||
|
||||
0
|
||||
|
|
@ -1,26 +1,27 @@
|
|||
(*
|
||||
* This file is part of the ExtensionDsLab project.
|
||||
* Copyright (c) 2017 LogicalHacking.com
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*)
|
||||
|
||||
module LogicalHacking.ExtensionDsLab.Tests
|
||||
namespace LogicalHacking.ExtensionDsLab.Tests
|
||||
|
||||
open NUnit.Framework
|
||||
open Expecto
|
||||
open FsCheck
|
||||
open GeneratorsCode
|
||||
|
||||
module Tests =
|
||||
let config10k = { FsCheckConfig.defaultConfig with maxTest = 10000}
|
||||
// bug somewhere: registering arbitrary generators causes Expecto VS test adapter not to work
|
||||
//let config10k = { FsCheckConfig.defaultConfig with maxTest = 10000; arbitrary = [typeof<Generators>] }
|
||||
let configReplay = { FsCheckConfig.defaultConfig with maxTest = 10000 ; replay = Some <| (1940624926, 296296394) }
|
||||
|
||||
[<Tests>]
|
||||
let testSimpleTests =
|
||||
|
||||
testList "DomainTypes.Tag" [
|
||||
testCase "equality" <| fun () ->
|
||||
let result = 42
|
||||
Expect.isTrue (result = 42) "Expected True"
|
||||
|
||||
testPropertyWithConfig config10k "whitespace" <|
|
||||
fun () ->
|
||||
Prop.forAll (Arb.fromGen <| whitespaceString())
|
||||
(fun (x : string) ->
|
||||
x = x)
|
||||
]
|
||||
|
||||
[<Test>]
|
||||
let ``hello returns 42`` () =
|
||||
let result = 42
|
||||
printfn "%i" result
|
||||
Assert.AreEqual(42,result)
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
|
||||
<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<Paket>True</Paket>
|
||||
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="4.4.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding></runtime></configuration>
|
|
@ -1,6 +1,6 @@
|
|||
FSharp.Core
|
||||
FsLab
|
||||
SQLProvider
|
||||
group Test
|
||||
NUnit
|
||||
NUnit.Runners
|
||||
|
||||
Expecto
|
||||
Expecto.BenchmarkDotNet
|
||||
Expecto.FsCheck
|
||||
Expecto.VisualStudio.TestAdapter
|
Loading…
Reference in New Issue