2022-07-25 14:34:33 +00:00
|
|
|
@@warning("-44")
|
2022-08-19 15:13:31 +00:00
|
|
|
module InternalExpressionValue = ReducerInterface_InternalExpressionValue
|
|
|
|
module Project = ForTS_ReducerProject
|
2022-07-25 14:34:33 +00:00
|
|
|
module Bindings = Reducer_Bindings
|
|
|
|
|
|
|
|
open Jest
|
|
|
|
open Expect
|
|
|
|
open Expect.Operators
|
|
|
|
|
|
|
|
// test("", () => expect(1)->toBe(1))
|
|
|
|
|
|
|
|
let runFetchResult = (project, sourceId) => {
|
|
|
|
Project.run(project, sourceId)
|
2022-09-22 07:07:26 +00:00
|
|
|
Project.getResult(project, sourceId)->InternalExpressionValue.toStringWithSourceResult
|
2022-07-25 14:34:33 +00:00
|
|
|
}
|
|
|
|
|
2022-08-31 21:54:54 +00:00
|
|
|
let runFetchFlatBindings = (project, sourceId) => {
|
2022-07-25 14:34:33 +00:00
|
|
|
Project.run(project, sourceId)
|
2022-09-01 12:51:20 +00:00
|
|
|
Project.getBindings(project, sourceId)
|
|
|
|
->Bindings.removeResult
|
|
|
|
->InternalExpressionValue.toStringBindings
|
2022-07-25 14:34:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test("setting continuation", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
let privateProject = project->Project.T.Private.castToInternalProject
|
|
|
|
let sampleBindings = Bindings.emptyBindings->Bindings.set("test", IEvVoid)
|
|
|
|
Project.Private.setContinuation(privateProject, "main", sampleBindings)
|
|
|
|
let answer = Project.Private.getContinuation(privateProject, "main")
|
|
|
|
expect(answer)->toBe(sampleBindings)
|
|
|
|
})
|
|
|
|
|
|
|
|
test("test result true", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setSource(project, "main", "true")
|
|
|
|
runFetchResult(project, "main")->expect->toBe("Ok(true)")
|
|
|
|
})
|
|
|
|
|
|
|
|
test("test result false", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setSource(project, "main", "false")
|
|
|
|
runFetchResult(project, "main")->expect->toBe("Ok(false)")
|
|
|
|
})
|
|
|
|
|
|
|
|
test("test library", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setSource(project, "main", "x=Math.pi; x")
|
|
|
|
runFetchResult(project, "main")->expect->toBe("Ok(3.141592653589793)")
|
|
|
|
})
|
|
|
|
|
|
|
|
test("test bindings", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setSource(project, "variables", "myVariable=666")
|
2022-08-31 21:54:54 +00:00
|
|
|
runFetchFlatBindings(project, "variables")->expect->toBe("@{myVariable: 666}")
|
2022-07-25 14:34:33 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
describe("project1", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setSource(project, "first", "x=1")
|
|
|
|
Project.setSource(project, "main", "x")
|
|
|
|
Project.setContinues(project, "main", ["first"])
|
2022-08-31 21:54:54 +00:00
|
|
|
let internalProject = project->Project.T.Private.castToInternalProject
|
2022-07-25 14:34:33 +00:00
|
|
|
|
|
|
|
test("runOrder", () => {
|
|
|
|
expect(Project.getRunOrder(project)) == ["first", "main"]
|
|
|
|
})
|
|
|
|
test("dependents first", () => {
|
|
|
|
expect(Project.getDependents(project, "first")) == ["main"]
|
|
|
|
})
|
|
|
|
test("dependencies first", () => {
|
|
|
|
expect(Project.getDependencies(project, "first")) == []
|
|
|
|
})
|
|
|
|
test("dependents main", () => {
|
|
|
|
expect(Project.getDependents(project, "main")) == []
|
|
|
|
})
|
|
|
|
test("dependencies main", () => {
|
|
|
|
expect(Project.getDependencies(project, "main")) == ["first"]
|
|
|
|
})
|
2022-08-31 21:54:54 +00:00
|
|
|
|
|
|
|
test("past chain first", () => {
|
|
|
|
expect(Project.Private.getPastChain(internalProject, "first")) == []
|
|
|
|
})
|
|
|
|
test("past chain main", () => {
|
|
|
|
expect(Project.Private.getPastChain(internalProject, "main")) == ["first"]
|
|
|
|
})
|
|
|
|
|
2022-07-25 14:34:33 +00:00
|
|
|
test("test result", () => {
|
|
|
|
runFetchResult(project, "main")->expect->toBe("Ok(1)")
|
|
|
|
})
|
|
|
|
test("test bindings", () => {
|
2022-08-31 21:54:54 +00:00
|
|
|
runFetchFlatBindings(project, "first")->expect->toBe("@{x: 1}")
|
2022-07-25 14:34:33 +00:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("project2", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setContinues(project, "main", ["second"])
|
|
|
|
Project.setContinues(project, "second", ["first"])
|
|
|
|
Project.setSource(project, "first", "x=1")
|
|
|
|
Project.setSource(project, "second", "y=2")
|
|
|
|
Project.setSource(project, "main", "y")
|
|
|
|
|
|
|
|
test("runOrder", () => {
|
|
|
|
expect(Project.getRunOrder(project)) == ["first", "second", "main"]
|
|
|
|
})
|
|
|
|
test("runOrderFor", () => {
|
|
|
|
expect(Project.getRunOrderFor(project, "first")) == ["first"]
|
|
|
|
})
|
|
|
|
test("dependencies first", () => {
|
|
|
|
expect(Project.getDependencies(project, "first")) == []
|
|
|
|
})
|
|
|
|
test("dependents first", () => {
|
|
|
|
expect(Project.getDependents(project, "first")) == ["second", "main"]
|
|
|
|
})
|
|
|
|
test("dependents main", () => {
|
|
|
|
expect(Project.getDependents(project, "main")) == []
|
|
|
|
})
|
|
|
|
test("dependencies main", () => {
|
|
|
|
expect(Project.getDependencies(project, "main")) == ["first", "second"]
|
|
|
|
})
|
|
|
|
test("test result", () => {
|
|
|
|
runFetchResult(project, "main")->expect->toBe("Ok(2)")
|
|
|
|
})
|
|
|
|
test("test bindings", () => {
|
2022-08-31 21:54:54 +00:00
|
|
|
runFetchFlatBindings(project, "main")->expect->toBe("@{x: 1,y: 2}")
|
2022-07-25 14:34:33 +00:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("project with include", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setContinues(project, "main", ["second"])
|
|
|
|
Project.setContinues(project, "second", ["first"])
|
|
|
|
|
|
|
|
Project.setSource(
|
|
|
|
project,
|
|
|
|
"first",
|
|
|
|
`
|
|
|
|
#include 'common'
|
|
|
|
x=1`,
|
|
|
|
)
|
|
|
|
Project.parseIncludes(project, "first")
|
|
|
|
Project.parseIncludes(project, "first") //The only way of setting includes
|
|
|
|
//Don't forget to parse includes after changing the source
|
|
|
|
|
|
|
|
Project.setSource(project, "common", "common=0")
|
|
|
|
Project.setSource(
|
|
|
|
project,
|
|
|
|
"second",
|
|
|
|
`
|
|
|
|
#include 'common'
|
|
|
|
y=2`,
|
|
|
|
)
|
|
|
|
Project.parseIncludes(project, "second") //The only way of setting includes
|
|
|
|
|
|
|
|
Project.setSource(project, "main", "y")
|
|
|
|
|
|
|
|
test("runOrder", () => {
|
|
|
|
expect(Project.getRunOrder(project)) == ["common", "first", "second", "main"]
|
|
|
|
})
|
|
|
|
|
|
|
|
test("runOrderFor", () => {
|
|
|
|
expect(Project.getRunOrderFor(project, "first")) == ["common", "first"]
|
|
|
|
})
|
|
|
|
|
|
|
|
test("dependencies first", () => {
|
|
|
|
expect(Project.getDependencies(project, "first")) == ["common"]
|
|
|
|
})
|
|
|
|
test("dependents first", () => {
|
|
|
|
expect(Project.getDependents(project, "first")) == ["second", "main"]
|
|
|
|
})
|
|
|
|
test("dependents main", () => {
|
|
|
|
expect(Project.getDependents(project, "main")) == []
|
|
|
|
})
|
|
|
|
test("dependencies main", () => {
|
|
|
|
expect(Project.getDependencies(project, "main")) == ["common", "first", "second"]
|
|
|
|
})
|
|
|
|
test("test result", () => {
|
|
|
|
runFetchResult(project, "main")->expect->toBe("Ok(2)")
|
|
|
|
})
|
|
|
|
test("test bindings", () => {
|
2022-08-31 21:54:54 +00:00
|
|
|
runFetchFlatBindings(project, "main")->expect->toBe("@{common: 0,x: 1,y: 2}")
|
2022-07-25 14:34:33 +00:00
|
|
|
})
|
|
|
|
})
|
2022-09-01 14:12:02 +00:00
|
|
|
|
|
|
|
describe("project with independent sources", () => {
|
|
|
|
let project = Project.createProject()
|
|
|
|
Project.setSource(project, "first", "1")
|
|
|
|
Project.setSource(project, "second", "2")
|
2022-09-04 19:24:53 +00:00
|
|
|
test("run order of first", () => {
|
2022-09-01 14:12:02 +00:00
|
|
|
expect(Project.getRunOrderFor(project, "first")) == ["first"]
|
|
|
|
})
|
2022-09-04 19:24:53 +00:00
|
|
|
test("run order of second", () => {
|
2022-09-01 14:12:02 +00:00
|
|
|
expect(Project.getRunOrderFor(project, "second")) == ["second"]
|
|
|
|
})
|
|
|
|
})
|