Skip to content

Commit

Permalink
Add CompositeHeader js helpers #197
Browse files Browse the repository at this point in the history
  • Loading branch information
Freymaurer committed Sep 21, 2023
1 parent 24b415a commit 476dc6d
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 24 deletions.
3 changes: 2 additions & 1 deletion ARCtrl.sln
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "playground", "playground",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JavaScript", "JavaScript", "{913222CA-261F-49CB-A823-CC7C335F964A}"
ProjectSection(SolutionItems) = preProject
tests\JavaScript\ISA.CompositeHeader.js = tests\JavaScript\ISA.CompositeHeader.js
tests\JavaScript\ISA.Person.js = tests\JavaScript\ISA.Person.js
tests\JavaScript\Main.js = tests\JavaScript\Main.js
EndProjectSection
Expand All @@ -67,7 +68,7 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "ARCtrl.Contract", "src\Cont
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FileSystem.Tests", "tests\FileSystem\FileSystem.Tests.fsproj", "{D9FE196B-AC21-4C3E-B9AE-DDDEC2158BC3}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TestingUtils", "tests\TestingUtils\TestingUtils.fsproj", "{AA011593-6603-4E16-A7B0-0ED3862511DE}"
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "TestingUtils", "tests\TestingUtils\TestingUtils.fsproj", "{AA011593-6603-4E16-A7B0-0ED3862511DE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down
24 changes: 24 additions & 0 deletions src/ISA/ISA/ArcTypes/CompositeHeader.fs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,30 @@ type CompositeHeader =
Microsoft.FSharp.Reflection.FSharpType.GetUnionCases(typeof<CompositeHeader>)
|> Array.map (fun x -> x.Tag, x.Name)

/// <summary>
/// This function is used to programmatically create `CompositeHeaders` in JavaScript. Returns integer code representative of input type.
///
/// 0: Expects no input
///
/// 1: Expects OntologyAnnotation as input
///
/// 2: Expects IOType as input
///
/// 3: Expects string as input
/// </summary>
/// <param name="inp">Can be accessed from `CompositeHeader.Cases`</param>
static member jsGetColumnMetaType(inp:int) =
match inp with
// no input
| 4 | 5 | 6 | 7 | 8 | 9 | 10 -> 0
// OntologyAnnotation as input
| 0 | 1 | 2 | 3 -> 1
// iotype as input
| 11 | 12 -> 2
// string as input
| 13 -> 3
| anyElse -> failwithf "Cannot assign input `Tag` (%i) to `CompositeHeader`" anyElse

override this.ToString() =
match this with
| Parameter oa -> $"Parameter [{oa.NameText}]"
Expand Down
16 changes: 14 additions & 2 deletions tests/ISA/ISA.Tests/CompositeHeader.Tests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ open ARCtrl.ISA

open TestingUtils

let tests_iotype =

let private tests_iotype =
testList "IOType" [
testCase "asInput" (fun () ->
Expect.equal IOType.Source.asInput "Input [Source Name]" "Source"
Expand Down Expand Up @@ -32,7 +33,17 @@ let tests_iotype =
)
]

let tests_compositeHeader =
let private tests_jsHelper = testList "jsHelper" [
testCase "jsGetColumnMetaType" <| fun _ ->
let cases = CompositeHeader.Cases
for case in cases do
let tag = fst case
let code = CompositeHeader.jsGetColumnMetaType tag
let validCode = [|0;1;2;3|] |> Array.contains code
Expect.isTrue validCode $"Code ({code}) for tag ({tag}) is invalid"
]

let private tests_compositeHeader =
testList "CompositeHeader" [
testCase "Cases" <| fun _ ->
let count = CompositeHeader.Cases.Length
Expand Down Expand Up @@ -260,5 +271,6 @@ let tests_compositeHeader =
let main =
testList "CompositeHeader" [
tests_iotype
tests_jsHelper
tests_compositeHeader
]
20 changes: 20 additions & 0 deletions tests/JavaScript/ISA.CompositeHeader.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { equal, deepEqual, notEqual } from 'assert';
import { CompositeHeader, IOType } from "./ARCtrl/ISA/ISA/ArcTypes/CompositeHeader.js"
import { OntologyAnnotation } from './ARCtrl/ISA/ISA/JsonTypes/OntologyAnnotation.js';

let tests_IOType = describe('IOType', function () {
it('cases', function () {
let cases = IOType.Cases
//console.log(cases)
equal(cases.length, 7);
});
it('Create non Freetext', function() {
Expand Down Expand Up @@ -44,4 +46,22 @@ let tests_IOType = describe('IOType', function () {

describe('CompositeHeader', function () {
tests_IOType;
it("Input", function () {
let iotype = new IOType(6, ["My FreeTextValue"])
let header = new CompositeHeader(11, [iotype])
let actual = header.toString()
equal(actual,"Input [My FreeTextValue]")
})
it("FreeText", function () {
let header = new CompositeHeader(13, ["My FreeTextValue"])
let actual = header.toString()
equal(actual, "My FreeTextValue")
})
it("Term", function () {
let oa = OntologyAnnotation.fromString("My OA Name")
let header = new CompositeHeader(0, [oa])
let actual = header.toString()
//console.log(CompositeHeader.Cases)
equal(actual, "Component [My OA Name]")
})
});
40 changes: 19 additions & 21 deletions tests/TestingUtils/Library.fs
Original file line number Diff line number Diff line change
Expand Up @@ -45,41 +45,39 @@ module Result =
| Ok m -> m
| Error m -> m



/// Fable compatible Expecto/Mocha unification
module Expect =
open Utils

let inline equal actual expected message = Expect.equal actual expected message
let inline notEqual actual expected message = Expect.notEqual actual expected message
let notEqual actual expected message = Expect.notEqual actual expected message

let inline isNull actual message = Expect.isNull actual message
let inline isNotNull actual message = Expect.isNotNull actual message
let isNull actual message = Expect.isNull actual message
let isNotNull actual message = Expect.isNotNull actual message

let inline isSome actual message = Expect.isSome actual message
let inline isNone actual message = Expect.isNone actual message
let inline wantSome actual message = Expect.wantSome actual message
let isSome actual message = Expect.isSome actual message
let isNone actual message = Expect.isNone actual message
let wantSome actual message = Expect.wantSome actual message

let inline isEmpty actual message = Expect.isEmpty actual message
let inline hasLength actual expectedLength message = Expect.hasLength actual expectedLength message
let isEmpty actual message = Expect.isEmpty actual message
let hasLength actual expectedLength message = Expect.hasLength actual expectedLength message

let inline isTrue actual message = Expect.isTrue actual message
let inline isFalse actual message = Expect.isFalse actual message
let isTrue actual message = Expect.isTrue actual message
let isFalse actual message = Expect.isFalse actual message

let inline wantError actual message = Expect.wantError actual message
let inline wantOk actual message = Expect.wantOk actual message
let inline isOk actual message = Expect.isOk actual message
let inline isError actual message = Expect.isError actual message
let wantError actual message = Expect.wantError actual message
let wantOk actual message = Expect.wantOk actual message
let isOk actual message = Expect.isOk actual message
let isError actual message = Expect.isError actual message

let inline throws actual message = Expect.throws actual message
let inline throwsC actual message = Expect.throwsC actual message
let throws actual message = Expect.throws actual message
let throwsC actual message = Expect.throwsC actual message

let inline exists actual asserter message = Expect.exists actual asserter message
let inline containsAll actual expected message = Expect.containsAll actual expected message
let exists actual asserter message = Expect.exists actual asserter message
let containsAll actual expected message = Expect.containsAll actual expected message

/// Expects the `actual` sequence to equal the `expected` one.
let inline sequenceEqual actual expected message =
let sequenceEqual actual expected message =
match firstDiff actual expected with
| _,None,None -> ()
| i,Some a, Some e ->
Expand Down

0 comments on commit 476dc6d

Please sign in to comment.