Nothing
# Copyright (c) 2023 Apex Resource Management Solution Ltd. (ApexRMS). All rights reserved.
# MIT License ## lines 41, 175, 226 fail in test env.
old_dir <- getwd()
temp_dir <- tempdir()
dir.create(temp_dir)
setwd(temp_dir)
mySsim <- session()
addPackage(session = mySsim, name = "stsimsf")
addPackage(session = mySsim, name = "helloworld")
test_that("Tests of Session - assumes SyncroSim is installed", {
skip_on_cran()
expect_is(mySsim, "Session")
expect_equal(file.exists(filepath(mySsim)), TRUE) # Lists the folder location of SyncroSim session
expect_output(str(version(mySsim)), "chr", fixed = TRUE) # Lists the version of SyncroSim session
expect_equal(names(package(mySsim)), c("name", "description", "version")) # Dataframe of the modules installed with this verions of SyncroSim.
expect_equal(names(package(mySsim)), c("name", "description", "version")) # Dataframe of the modules installed with this verions of SyncroSim.
expect_equal(names(package(mySsim)), c("name", "description", "version")) # Dataframe of the models installed with this version of SyncroSim, listing all of its properties as columns
expect_equal(names(package(mySsim)), c("name", "description", "version")) # Dataframe of the models installed with this version of SyncroSim, listing all of its properties as columns
mySession <- session(silent = FALSE) # modify default session settings
expect_equal(silent(mySession), FALSE)
silent(mySession) <- TRUE
expect_equal(silent(mySession), TRUE)
expect_output(session(printCmd = TRUE), "--version")
})
test_that("Tests of command - assumes SyncroSim is installed", {
skip_on_cran()
expect_equal(command("help", mySsim)[1], "SyncroSim System Console")
expect_equal(command(c("list", "help"), mySsim)[1], "Lists existing items")
expect_equal(command("--create --help", mySsim)[1], "Creates an item")
expect_equal(command(list(create = NULL, help = NULL), mySsim)[1], "Creates an item")
expect_error({delete(paste0(getwd(), "/temp.ssim"), force = TRUE)},
"Library not found")
args <- list(create = NULL, library = NULL, name = paste0(getwd(), "/temp.ssim"), package = "nonexistentpackage")
output <- command(args, mySsim)
# TODO Fails in test env only
expect_equal(output[1], "The specified package is not installed.")
})
test_that("Tests of Library - assumes SyncroSim is installed", {
skip_on_cran()
myLibrary <- ssimLibrary(name = "temp", session = mySsim) # create new library using default model
expect_equal(file.exists(filepath(myLibrary)), TRUE)
expect_equal(as.character(package(myLibrary)$name), "stsim")
expect_equal(delete(myLibrary, force = TRUE), TRUE)
expect_equal(file.exists(filepath(myLibrary)), FALSE)
myLibrary <- ssimLibrary(name = "SSimLibrary", session = mySsim)
expect_equal(file.exists(filepath(myLibrary)), TRUE)
expect_equal(name(myLibrary), "SSimLibrary")
# With addons
expect_equal(nrow(subset(addon(myLibrary), enabled)), 0)
allAdds <- addon(myLibrary)
expect_equal(names(allAdds), c("name", "description", "enabled", "currentVersion", "minimumVersion"))
expect_equal(names(addon(mySsim)), c("name", "description", "version", "extends"))
expect_equal(delete(myLibrary, force = TRUE), TRUE)
allAdds <- subset(allAdds, name != "stsim-cbm") # Requires stsim-stockflow to be added first
if (nrow(allAdds) > 0) {
cAdd <- allAdds$name[1]
# TODO Fails to detect stsimsf is installed => potential bug with console
myLibrary <- ssimLibrary(name = "NewLibrary", addon = c(cAdd), session = mySsim)
expect_equal(subset(addon(myLibrary), enabled)$name, cAdd)
expect_equal(disableAddon(myLibrary, cAdd)[[cAdd]], TRUE)
expect_equal(nrow(subset(addon(myLibrary), enabled)), 0)
expect_equal(enableAddon(myLibrary, cAdd)[[cAdd]], TRUE)
expect_equal(subset(addon(myLibrary), enabled)$name, cAdd)
}
# Get/set the various properties of the library
expect_is("session<-"(myLibrary, mySsim), "SsimLibrary")
# Changed from NA to FALSE to match updated behaviors
expect_equal(ssimUpdate(myLibrary), FALSE)
expect_equal(names(ssimLibrary(myLibrary, session = mySsim)), c("property", "value"))
expect_equal(class(ssimLibrary(myLibrary, summary = FALSE, mySsim))[1], "SsimLibrary")
name(myLibrary) <- "Fred"
expect_equal(name(myLibrary), "Fred")
expect_equal(backup(myLibrary), TRUE)
expect_equal(dir.exists(paste0(filepath(myLibrary), ".backup")), TRUE)
description(myLibrary) <- "A new description.\nTry a linebreak." # NOTE: \n adds a linebreak to the description
expect_equal(description(myLibrary)[2], "Try a linebreak.")
owner(myLibrary) <- "Fred"
expect_equal(owner(myLibrary), "Fred")
readOnly(myLibrary) <- TRUE
expect_equal(readOnly(myLibrary), TRUE)
readOnly(myLibrary) <- FALSE
expect_equal(readOnly(myLibrary), FALSE)
expect_equal(grepl("at", dateModified(myLibrary)), TRUE)
ret <- delete(myLibrary, force = TRUE)
})
test_that("Tests of projects and scenarios - assumes SyncroSim is installed", {
skip_on_cran()
myLib <- ssimLibrary(name = "temp26", session = mySsim, overwrite = TRUE)
myOtherLib <- ssimLibrary(name = "temp27", session = mySsim, overwrite = TRUE)
myOtherLibProj <- project(ssimObject = myOtherLib, project = "MyProj")
myOtherScn <- scenario(myOtherLibProj, scenario = "other")
expect_is(myOtherScn, "Scenario")
expect_equal(scenario(myOtherLib)$ScenarioID, 1)
ret <- delete(myOtherLib, scenario = "other", force = TRUE)
expect_equal(nrow(scenario(myOtherLib)), 0)
myOtherScn <- scenario(myOtherLib, scenario = "other2")
expect_equal(names(project(myOtherLib)), c("ProjectID", "Name", "Owner",
"DateLastModified", "IsReadOnly"))
expect_equal(names(scenario(myOtherLib)), c("ScenarioID", "ProjectID", "Name",
"IsResult", "ParentID", "Owner",
"DateLastModified", "IsReadOnly",
"MergeDependencies",
"IgnoreDependencies",
"AutoGenTags"))
myProject <- project(myLib, project = "temp")
expect_is(myProject, "Project")
expect_equal(names(datasheet(myProject)), c("scope", "name", "displayName")) # Only scope, name and displayName returned
expect_equal(is.element("corestime_Maps",
datasheet(myLib, project = "temp",
summary="CORE")$name), TRUE) # same thing, but more system calls. Generally using ids/objects is faster than using names.
expect_equal(names(datasheet(myProject, optional = TRUE)), c("scope", "package", "name", "displayName", "isSingle", "isOutput"))
expect_error(scenario(myLib, scenario = 1), "Scenario ids (1) not found in ssimObject. To make new scenarios, please provide names (as one or more character strings) to the scenario argument of the scenario() function. SyncroSim will automatically assign scenario ids.", fixed = TRUE) # Fail: need a name to create a scenario
myScn <- scenario(myLib, scenario = "one") # Ok because only one project in the library.
expect_is(myScn, "Scenario")
myProject <- project(myLib, project = "temp2")
expect_equal(project(myLib)$Name, c("temp", "temp2"))
myScn <- scenario(myLib, scenario = "one") # Ok because only one scenario of this name occurs in the library.
myScn <- scenario(myProject, scenario = "one") # Creates a new scenario called "one" in the second project.
expect_equal(scenario(myLib)$Name, c("one", "one"))
expect_error(scenario(myLib, scenario = "one"), "The ssimObject contains more than one scenario called one. Specify a scenario id: 1,2", fixed = TRUE) # Fails because now there are two scenarios called "one" in the library.
myScn <- scenario(myProject, scenario = "one", overwrite = TRUE) # Overwrites existing scenario, assigns new id.
expect_equal(scenario(myLib)$ScenarioID, c(1, 3))
myScn <- scenario(myProject, scenario = "two", overwrite = TRUE, sourceScenario = 1) # Can copy scenarios between projects.
expect_equal(projectId(myScn), 14)
myScn <- scenario(myProject, scenario = "other", overwrite = TRUE, sourceScenario = myOtherScn) # Can copy scenarios between libraries if sourceScenario is a scenario object.
expect_equal(scenarioId(myScn), 4)
myOtherProject <- project(myOtherLib, project = "copy", sourceProject = myProject) # Can copy projects among libraries provided that sourceProject is a Project object.
# TODO This fails for an unknown reason => BUG SUBMITED
myOtherProject <- project(myLib, project = "copy", sourceProject = 11) # Copy a project within the same library.
expect_equal(projectId(myOtherProject), 21) # 21
expect_warning(project(myLib, project = "temp", sourceProject = "temp2"), "Project (1) already exists, so sourceProject argument was ignored.", fixed = TRUE) # Warns that sourceProject is ignored because "temp" already exists.
myOtherProject <- project(myLib, project = "copy2", sourceProject = "temp2") # Copy a project by name
expect_equal(project(myLib)$name, c("copy", "copy2", "temp", "temp2"))
ret <- delete(myProject, scenario = "one", force = TRUE)
myScn <- scenario(myProject, scenario = "one", sourceScenario = "one") # Ok because only one possible source
expect_equal(scenarioId(myScn), 6)
expect_warning(scenario(myProject, scenario = "one", sourceScenario = "one"), "ourceScenario was ignored because scenario already exists.", fixed = TRUE) # Warns that sourceScenario will be ignored.
expect_error(scenario(myProject, scenario = "three", sourceScenario = "one"), "There is more than one scenario called one in the SsimLibrary. Please provide a sourceScenario id: 1,6", fixed = TRUE) # Fail if more than one scenario named sourceScenario in the library.
expect_equal(nrow(scenario(myScn, summary = TRUE)), 1) # return summary info
expect_is(datasheet(myScn, "core_SysFolder"), "data.frame") # returns a datasheet
expect_is(datasheet(myScn, "core_SysFolder", forceElements = TRUE), "list") # returns a list
expect_equal(length(datasheet(myScn, c("core_Settings", "core_SysFolder"))), 2) # returns a list
allScns <- scenario(myProject, summary = FALSE)
expect_equal(names(allScns), c("4", "5", "6"))
expect_equal(is.element("ScenarioID", names(datasheet(myLib, c("RunControl", "OutputOptions"), scenario = as.numeric(names(allScns)))[[1]])), TRUE) # returns a list - each sheet contains scenario info if appropriate
expect_equal(length(datasheet(allScns, c("RunControl", "OutputOptions"))), 2) # returns a list - each sheet contains scenario info if appropriate
expect_warning(datasheet(myScn, "RunControl", scenario = 1), "scenario argument is ignored when ssimObject is a Scenario or list of these.", fixed = TRUE) # Warn of conflict between ssimObject and scenario arguments.
expect_warning(datasheet(myProject, "corestime_Charts", project = 1), "project argument is ignored when ssimObject is a Project/Scenario or list of these.", fixed = TRUE) # Warn of conflict between ssimObject and project arguments.
expect_warning(datasheet(allScns, "RunControl", scenario = 1), "scenario argument is ignored when ssimObject is a list.", fixed = TRUE) # Warn that project/scenario arguments are ignored when ssimObject is a list of Project/Scenario objects.
# Fails in test env only
expect_equal(runLog(myScn), "The scenario is not a result scenario: 6") # Returns message if the scenario is not a result scenario.
# get/set properties
name(myProject) <- "New project name"
expect_equal(name(myProject), "New project name")
name(myScn) <- "New scn name"
expect_equal(name(myScn), "New scn name")
description(myProject) <- "A new description.\nTry a linebreak." # NOTE: \n adds a linebreak to the description
expect_equal(description(myProject)[1], "A new description.")
description(myScn) <- "Hi"
expect_equal(grepl("Hi", description(myScn)[1]), TRUE)
owner(myProject) <- "Fred"
expect_equal(owner(myProject), "Fred")
owner(myScn) <- "Alice"
expect_equal(owner(myScn), "Alice")
readOnly(myProject) <- TRUE
expect_equal(readOnly(myProject), "Yes")
readOnly(myProject) <- FALSE
expect_equal(readOnly(myProject), "No")
readOnly(myScn) <- TRUE
expect_equal(readOnly(myScn), "Yes")
expect_equal(grepl("at", dateModified(myProject)), TRUE)
expect_equal(grepl("at", dateModified(myScn)), TRUE)
expect_equal(parentId(myScn), NA) # NA for scenarios that aren't results.
expect_is(ssimLibrary(myProject), "SsimLibrary") # get parent library
expect_is(session(myProject), "Session") # get parent session
expect_is(ssimLibrary(myScn), "SsimLibrary") # get parent library
expect_is(session(myScn), "Session") # get parent session
expect_equal(projectId(project(myScn)), projectId(myScn)) # get parent project
expect_equal(file.exists(filepath(myScn)), TRUE)
expect_equal(filepath(myScn), filepath(myProject))
expect_false(ssimUpdate(myScn))
expect_false(ssimUpdate(myProject))
# test dependency, precedence setting
ret <- scenario(myProject, scenario = "another scn")
targetScn <- scenario(myProject, scenario = "second scen")
ret <- dependency(targetScn, dependency = c("other", "New scn name", "another scn")) # elements of the dependency argument are ordered from lowest to highest precedence
expect_equal(dependency(targetScn)$name, c("another scn", "New scn name", "other"))
ret <- dependency(targetScn, dependency = c("another scn", "New scn name")) # change the precedence of dependencies by adding them again.
expect_equal(dependency(targetScn)$name, c("New scn name", "another scn", "other")) # now "New scn name" has highest precedence.
# test delete - vectors of project/scenario/datasheet
# Fails in test env
retList <- delete(myLib, project = project(myLib)$projectId[1:2],
datasheet = c("corestime_Charts", "corestime_DistributionType"), force = TRUE)
expect_is(retList, "list")
expect_true(retList[[1]], retList[[2]])
ret <- delete(myLib, scenario = c(6, 7), force = TRUE)
expect_equal(intersect(c(6, 7), scenario(myLib)$scenarioId), integer(0))
ret <- delete(myLib, scenario = c("one", "two"), force = TRUE)
expect_equal(intersect(c("one", "two"), scenario(myLib)$name), character(0))
ret <- delete(myLib, project = c(1, 11), force = TRUE)
expect_equal(intersect(c(1, 11), project(myLib)$projectId), integer(0))
ret <- delete(myLib, project = c("copy", "copy2"), force = TRUE)
expect_equal(intersect(c("copy", "copy2"), project(myLib)$name), logical(0))
# Test deletions
ret <- delete(myLib, force = TRUE)
ret <- delete(paste0(getwd(), "/temp27.ssim"), force = TRUE) # delete a library specified by a path
expect_error({delete(paste0(getwd(), "/temp26.ssim"), force = TRUE)},
"Library not found")
})
test_that("Tests of datasheet - assumes SyncroSim is installed", {
skip_on_cran()
myLibrary <- ssimLibrary(name = "NewLibrary.ssim", session = mySsim)
myProject <- project(myLibrary, project = "proj")
myScenario <- scenario(myProject, scenario = "one")
myLibraryDataframes <- datasheet(myLibrary, summary = FALSE) # A named list of all the library datasheets for project id 2.
expect_is(myLibraryDataframes, "list")
expect_is(myLibraryDataframes[["corestime_Options"]], "data.frame")
myProjectSheetNames <- subset(datasheet(myProject), scope == "project") # A dataframe of datasheet names for project id 1.
expect_equal(names(myProjectSheetNames), c("scope", "name", "displayName"))
myDeterministicTransitions <- suppressWarnings(datasheet(myScenario, "DeterministicTransition"))
expect_is(myDeterministicTransitions$StateClassIDSource, "factor")
myDeterministicTransitions <- suppressWarnings(datasheet(myScenario, "DeterministicTransition", lookupsAsFactors = FALSE)) # This option returns characters instead of factors.
expect_is(myDeterministicTransitions$StateClassIDSource, "NULL")
sheetName <- "stsim_StateLabelX"
emptyTab <- datasheet(myProject, name = sheetName, empty = FALSE)
expect_equal(nrow(emptyTab), 0)
stateClassDefinition <- addRow(emptyTab, data.frame(Name = c("Coniferous", "Deciduous", "Mixed")))
expect_equal(stateClassDefinition$Name, c("Coniferous", "Deciduous", "Mixed"))
ret <- saveDatasheet(myProject, stateClassDefinition, name = sheetName) # append project scope datasheet by default
ret <- saveDatasheet(myProject, stateClassDefinition, name = sheetName, append = FALSE, force = TRUE) # remove without prompting
stateClassDefinition <- addRow(emptyTab, data.frame(Name = c("Grass")))
ret <- saveDatasheet(myProject, stateClassDefinition, name = sheetName) # append project scope datasheet by default
expect_equal(datasheet(myProject, name = sheetName)$Name, c("Coniferous", "Deciduous", "Grass", "Mixed"))
ret <- delete(myProject, datasheet = sheetName, force = TRUE)
expect_equal(nrow(datasheet(myProject, name = sheetName)), 0)
ret <- delete(myLibrary, force = TRUE)
})
setwd(old_dir)
unlink(temp_dir, recursive = TRUE)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.