[rkward-cvs] [rkward] packages/rkwarddev: more unit tests, and relocated the test files to enable the use of "--install-tests" with "R CMD install"
m.eik michalke
meik.michalke at uni-duesseldorf.de
Sun Dec 14 21:33:20 UTC 2014
Git commit 2e80ac880d6607f0c2f30680ab4ab95badbe513f by m.eik michalke.
Committed on 14/12/2014 at 21:30.
Pushed by meikm into branch 'master'.
more unit tests, and relocated the test files to enable the use of "--install-tests" with "R CMD install"
M +3 -3 packages/rkwarddev/ChangeLog
M +1 -1 packages/rkwarddev/DESCRIPTION
M +1 -1 packages/rkwarddev/R/rk.XML.context.R
M +1 -1 packages/rkwarddev/R/rkwarddev-package.R
M +3 -3 packages/rkwarddev/inst/NEWS.Rd
M +- -- packages/rkwarddev/inst/doc/rkwarddev_vignette.pdf
D +- -- packages/rkwarddev/inst/tests/XML_test_standards.RData
D +0 -149 packages/rkwarddev/inst/tests/test_XML_generation.R
M +1 -1 packages/rkwarddev/man/rk.XML.context.Rd
M +1 -1 packages/rkwarddev/man/rkwarddev-package.Rd
M +66 -7 packages/rkwarddev/tests/generate_test_standards.R
R +2 -2 packages/rkwarddev/tests/testthat.R [from: packages/rkwarddev/tests/test_rkwarddev_package.R - 054% similarity]
A +- -- packages/rkwarddev/tests/testthat/XML_test_standards.RData
A +253 -0 packages/rkwarddev/tests/testthat/test_XML_generation.R
http://commits.kde.org/rkward/2e80ac880d6607f0c2f30680ab4ab95badbe513f
diff --git a/packages/rkwarddev/ChangeLog b/packages/rkwarddev/ChangeLog
index 7c399d0..b9d5cd8 100644
--- a/packages/rkwarddev/ChangeLog
+++ b/packages/rkwarddev/ChangeLog
@@ -1,6 +1,6 @@
ChangeLog for package rkwarddev
-changes in version 0.06-6 (2014-12-13)
+changes in version 0.06-6 (2014-12-14)
fixed:
- rk.XML.optionset() does now allow to re-use objects defined in the same
function call (i.e., refer to optioncolumns in the logic section)
@@ -15,8 +15,8 @@ fixed:
- rk.XML.tabbook() returns <insert> nodes as-is, not nested in <tab></tab>
- rk.JS.scan() now sets "state" as default modifier for checkboxes if
guess.getter is TRUE
- - rk.XML.connect() handled modifiers too strict if "client" was a string, and too
- liberal when "governor" was
+ - rk.XML.connect() handled modifiers too strict if "client" was a string,
+ and too liberal when "governor" was
- join() referenced a wrong object name if "var" was of class rk.JS.arr
- rk.XML.about() had a malformed error message
- rk.plugin.component() called XMLAttrs() with too many arguments
diff --git a/packages/rkwarddev/DESCRIPTION b/packages/rkwarddev/DESCRIPTION
index c0788ae..7f7ec97 100644
--- a/packages/rkwarddev/DESCRIPTION
+++ b/packages/rkwarddev/DESCRIPTION
@@ -17,7 +17,7 @@ URL: http://rkward.sourceforge.net
Authors at R: c(person(given="m.eik", family="michalke",
email="meik.michalke at hhu.de", role=c("aut", "cre")))
Version: 0.06-6
-Date: 2014-12-13
+Date: 2014-12-14
Collate:
'00_class_01_rk.JS.arr.R'
'00_class_02_rk.JS.var.R'
diff --git a/packages/rkwarddev/R/rk.XML.context.R b/packages/rkwarddev/R/rk.XML.context.R
index 8e773ef..2fa0a1e 100644
--- a/packages/rkwarddev/R/rk.XML.context.R
+++ b/packages/rkwarddev/R/rk.XML.context.R
@@ -33,7 +33,7 @@
#' @examples
#' test.component <- rk.XML.component("My GUI dialog", "plugins/MyGUIdialog.xml")
#' test.entry <- rk.XML.entry(test.component)
-#' test.menu <- rk.XML.menu("Analysis", nodes=test.entry, id.name="analysis")
+#' test.menu <- rk.XML.menu("Analysis", test.entry, id.name="analysis")
#' test.context <- rk.XML.context(test.menu)
#' cat(pasteXML(test.context))
diff --git a/packages/rkwarddev/R/rkwarddev-package.R b/packages/rkwarddev/R/rkwarddev-package.R
index 2b6e689..ee41d1a 100644
--- a/packages/rkwarddev/R/rkwarddev-package.R
+++ b/packages/rkwarddev/R/rkwarddev-package.R
@@ -4,7 +4,7 @@
#' Package: \tab rkwarddev\cr
#' Type: \tab Package\cr
#' Version: \tab 0.06-6\cr
-#' Date: \tab 2014-12-13\cr
+#' Date: \tab 2014-12-14\cr
#' Depends: \tab R (>= 2.9.0),methods,XiMpLe (>= 0.03-21),rkward (>= 0.5.7)\cr
#' Enhances: \tab rkward\cr
#' Encoding: \tab UTF-8\cr
diff --git a/packages/rkwarddev/inst/NEWS.Rd b/packages/rkwarddev/inst/NEWS.Rd
index 614f81b..1a084ea 100644
--- a/packages/rkwarddev/inst/NEWS.Rd
+++ b/packages/rkwarddev/inst/NEWS.Rd
@@ -1,7 +1,7 @@
\name{NEWS}
\title{News for Package 'rkwarddev'}
\encoding{UTF-8}
-\section{Changes in rkwarddev version 0.06-6 (2014-12-13)}{
+\section{Changes in rkwarddev version 0.06-6 (2014-12-14)}{
\subsection{fixed}{
\itemize{
\item \code{rk.XML.optionset()} does now allow to re-use objects defined in the same
@@ -17,8 +17,8 @@
\item \code{rk.XML.tabbook()} returns <insert> nodes as-is, not nested in <tab></tab>
\item \code{rk.JS.scan()} now sets \code{"state"} as default modifier for checkboxes if
guess.getter is TRUE
- \item \code{rk.XML.connect()} handled modifiers too strict if \code{"client"} was a string, and too
- liberal when \code{"governor"} was
+ \item \code{rk.XML.connect()} handled modifiers too strict if \code{"client"} was a string,
+ and too liberal when \code{"governor"} was
\item \code{join()} referenced a wrong object name if \code{"var"} was of class rk.JS.arr
\item \code{rk.XML.about()} had a malformed error message
\item \code{rk.plugin.component()} called \code{XMLAttrs()} with too many arguments
diff --git a/packages/rkwarddev/inst/doc/rkwarddev_vignette.pdf b/packages/rkwarddev/inst/doc/rkwarddev_vignette.pdf
index 5f22b09..45b45cc 100644
Binary files a/packages/rkwarddev/inst/doc/rkwarddev_vignette.pdf and b/packages/rkwarddev/inst/doc/rkwarddev_vignette.pdf differ
diff --git a/packages/rkwarddev/inst/tests/XML_test_standards.RData b/packages/rkwarddev/inst/tests/XML_test_standards.RData
deleted file mode 100644
index 6f87f15..0000000
Binary files a/packages/rkwarddev/inst/tests/XML_test_standards.RData and /dev/null differ
diff --git a/packages/rkwarddev/inst/tests/test_XML_generation.R b/packages/rkwarddev/inst/tests/test_XML_generation.R
deleted file mode 100644
index a04a6ea..0000000
--- a/packages/rkwarddev/inst/tests/test_XML_generation.R
+++ /dev/null
@@ -1,149 +0,0 @@
-# testing basic tokenizing and POS tagging
-
-# all test standards are stored in a list object called "XML_test_standards"
-# it was saved to the file "XML_test_standards.RData"
-
-context("XML")
-
-test_that("about", {
- thisNode <- rk.XML.about(
- name="Square the circle",
- author=c(
- person(given="E.A.", family="Dölle",
- email="doelle at eternalwondermaths.example.org", role="aut"),
- person(given="A.", family="Assistant",
- email="alterego at eternalwondermaths.example.org", role=c("cre","ctb"))
- ),
- about=list(
- desc="Squares the circle using Heisenberg compensation.",
- version="0.1-3",
- date=as.Date("2014-12-12"),
- url="http://eternalwondermaths.example.org/23/stc.html",
- license="GPL",
- category="Geometry")
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["about"]])
- )
-})
-
-test_that("attribute", {
- thisNode <- rk.XML.attribute(
- id="testID",
- label="an attribute label",
- value="checked"
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["attribute"]])
- )
-})
-
-test_that("browser", {
- thisNode <- rk.XML.browser(
- label="a browser label",
- type="dir",
- initial="/tmp/initial",
- filter=c("*initial", "*csv"),
- required=TRUE,
- i18n=list(context="context info here")
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["browser"]])
- )
-})
-
-test_that("checkbox", {
- thisNode <- rk.XML.cbox(
- label="a checbox label",
- value="checked",
- chk=TRUE,
- un.value="unchecked",
- i18n=list(context="context info here")
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["checkbox"]])
- )
-})
-
-test_that("code", {
- thisNode <- rk.XML.code(
- file="some_file.js"
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["code"]])
- )
-})
-
-test_that("col", {
- thisNode <- rk.XML.col(
- rk.XML.cbox(label="a column label")
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["col"]])
- )
-})
-
-test_that("component", {
- thisNode <- rk.XML.component(
- label="a component label",
- file="plugins/MyGUIdialog.xml",
- i18n=list(context="context info here")
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["component"]])
- )
-})
-
-test_that("components", {
- thisNode <- rk.XML.components(
- rk.XML.component(
- label="a components label",
- file="plugins/MyOtherGUIdialog.xml"
- )
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["components"]])
- )
-})
-
-test_that("connect", {
- thisNode <- rk.XML.connect(
- governor="myGovernor",
- client="myCLient",
- get="visible",
- set="string",
- not=TRUE,
- reconcile=TRUE
- )
- load("XML_test_standards.RData")
- expect_that(
- thisNode, equals(XML_test_standards[["connect"]])
- )
-})
-
-# test_that("", {
-# thisNode <-
-# load("XML_test_standards.RData")
-# expect_that(
-# thisNode, equals(XML_test_standards[[""]])
-# )
-# })
-#
-# test_that("", {
-# thisNode <-
-# load("XML_test_standards.RData")
-# expect_that(
-# thisNode, equals(XML_test_standards[[""]])
-# )
-# })
-#
-# test_that("", {
-# thisNode <-
diff --git a/packages/rkwarddev/man/rk.XML.context.Rd b/packages/rkwarddev/man/rk.XML.context.Rd
index 68f45c3..c0ed8fe 100644
--- a/packages/rkwarddev/man/rk.XML.context.Rd
+++ b/packages/rkwarddev/man/rk.XML.context.Rd
@@ -20,7 +20,7 @@ with mandatory child nodes "menu".
\examples{
test.component <- rk.XML.component("My GUI dialog", "plugins/MyGUIdialog.xml")
test.entry <- rk.XML.entry(test.component)
-test.menu <- rk.XML.menu("Analysis", nodes=test.entry, id.name="analysis")
+test.menu <- rk.XML.menu("Analysis", test.entry, id.name="analysis")
test.context <- rk.XML.context(test.menu)
cat(pasteXML(test.context))
}
diff --git a/packages/rkwarddev/man/rkwarddev-package.Rd b/packages/rkwarddev/man/rkwarddev-package.Rd
index 10727d5..29d509c 100644
--- a/packages/rkwarddev/man/rkwarddev-package.Rd
+++ b/packages/rkwarddev/man/rkwarddev-package.Rd
@@ -11,7 +11,7 @@ A collection of tools for RKWard plugin development.
Package: \tab rkwarddev\cr
Type: \tab Package\cr
Version: \tab 0.06-6\cr
-Date: \tab 2014-12-13\cr
+Date: \tab 2014-12-14\cr
Depends: \tab R (>= 2.9.0),methods,XiMpLe (>= 0.03-21),rkward (>= 0.5.7)\cr
Enhances: \tab rkward\cr
Encoding: \tab UTF-8\cr
diff --git a/packages/rkwarddev/tests/generate_test_standards.R b/packages/rkwarddev/tests/generate_test_standards.R
index 26ca2f4..8f0699a 100644
--- a/packages/rkwarddev/tests/generate_test_standards.R
+++ b/packages/rkwarddev/tests/generate_test_standards.R
@@ -64,14 +64,73 @@ XMLTestNodes <- function(file=NULL, compress="xz", compression_level=-9){
set="string",
not=TRUE,
reconcile=TRUE
+ ),
+ context=rk.XML.context(
+ rk.XML.menu("Analysis",
+ rk.XML.entry(
+ rk.XML.component(
+ label="a context label",
+ file="plugins/MyOtherGUIdialog.xml"
+ )
+ )
+ )
+ ),
+ convert=rk.XML.convert(
+ sources=list(text=rk.XML.input("a convert label")),
+ mode=c(equals="myValue"),
+ required=TRUE
+ ),
+ copy=rk.XML.copy(
+ id="aCopyID",
+ as="page"
+ ),
+ dependencies=rk.XML.dependencies(
+ dependencies=list(
+ rkward.min="0.6.3",
+ rkward.max="0.6.5",
+ R.min="3.1",
+ R.max="3.2"),
+ package=list(
+ c(name="heisenberg", min="0.11-2", max="0.14-1",
+ repository="http://hsb.example.org"),
+ c(name="DreamsOfPi", min="0.2", max="3.1", repository="http://dop.example.org")),
+ pluginmap=list(
+ c(name="heisenberg.pluginmap", url="http://eternalwondermaths.example.org/hsb"))
+ ),
+ dependency_check=rk.XML.dependency_check(
+ id.name="dependency",
+ dependencies=list(
+ rkward.min="0.6.3",
+ rkward.max="0.6.5",
+ R.min="3.1",
+ R.max="3.2"),
+ package=list(
+ c(name="heisenberg", min="0.11-2", max="0.14-1",
+ repository="http://hsb.example.org"),
+ c(name="DreamsOfPi", min="0.2", max="3.1", repository="http://dop.example.org")),
+ pluginmap=list(
+ c(name="heisenberg.pluginmap", url="http://eternalwondermaths.example.org/hsb"))
+ ),
+ dialog=rk.XML.dialog(
+ rk.XML.col(
+ rk.XML.cbox(label="a dialog column label")
+ ),
+ label="a dialog label",
+ recommended=TRUE,
+ i18n=list(context="context info here")
+ ),
+ dropdown=rk.XML.dropdown(
+ label="myDropdownMenu",
+ options=list(
+ "First Option"=c(val="val1"),
+ rk.XML.option(
+ "Second Option", val="val2", id.name="auto",
+ i18n=list(context="context info1 here")
+ ),
+ "Third Option"=c(val="val3", chk=TRUE)
+ ),
+ i18n=list(context="context info2 here")
)#,
-# context=rk.XML.context(),
-# convert=rk.XML.convert(),
-# copy=rk.XML.copy(),
-# dependencies=rk.XML.dependencies(),
-# dependency_check=rk.XML.dependency_check(),
-# dialog=rk.XML.dialog(),
-# dropdown=rk.XML.dropdown(),
# embed=rk.XML.embed(),
# entry=rk.XML.entry(),
# external=rk.XML.external(),
diff --git a/packages/rkwarddev/tests/test_rkwarddev_package.R b/packages/rkwarddev/tests/testthat.R
similarity index 54%
rename from packages/rkwarddev/tests/test_rkwarddev_package.R
rename to packages/rkwarddev/tests/testthat.R
index 73ee73a..4214d8d 100644
--- a/packages/rkwarddev/tests/test_rkwarddev_package.R
+++ b/packages/rkwarddev/tests/testthat.R
@@ -1,5 +1,5 @@
# the tests are realized using the "testthat" package
-# and can be found in ../inst/tests
+# and can be found in ./testthat
require(testthat)
-test_package("rkwarddev")
+test_check("rkwarddev")
diff --git a/packages/rkwarddev/tests/testthat/XML_test_standards.RData b/packages/rkwarddev/tests/testthat/XML_test_standards.RData
new file mode 100644
index 0000000..dc044be
Binary files /dev/null and b/packages/rkwarddev/tests/testthat/XML_test_standards.RData differ
diff --git a/packages/rkwarddev/tests/testthat/test_XML_generation.R b/packages/rkwarddev/tests/testthat/test_XML_generation.R
new file mode 100644
index 0000000..3a27462
--- /dev/null
+++ b/packages/rkwarddev/tests/testthat/test_XML_generation.R
@@ -0,0 +1,253 @@
+# testing basic tokenizing and POS tagging
+
+# all test standards are stored in a list object called "XML_test_standards"
+# it was saved to the file "XML_test_standards.RData"
+
+context("XML")
+
+test_that("rk.XML.about", {
+ thisNode <- rk.XML.about(
+ name="Square the circle",
+ author=c(
+ person(given="E.A.", family="Dölle",
+ email="doelle at eternalwondermaths.example.org", role="aut"),
+ person(given="A.", family="Assistant",
+ email="alterego at eternalwondermaths.example.org", role=c("cre","ctb"))
+ ),
+ about=list(
+ desc="Squares the circle using Heisenberg compensation.",
+ version="0.1-3",
+ date=as.Date("2014-12-12"),
+ url="http://eternalwondermaths.example.org/23/stc.html",
+ license="GPL",
+ category="Geometry")
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["about"]])
+ )
+})
+
+test_that("rk.XML.attribute", {
+ thisNode <- rk.XML.attribute(
+ id="testID",
+ label="an attribute label",
+ value="checked"
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["attribute"]])
+ )
+})
+
+test_that("rk.XML.browser", {
+ thisNode <- rk.XML.browser(
+ label="a browser label",
+ type="dir",
+ initial="/tmp/initial",
+ filter=c("*initial", "*csv"),
+ required=TRUE,
+ i18n=list(context="context info here")
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["browser"]])
+ )
+})
+
+test_that("rk.XML.cbox", {
+ thisNode <- rk.XML.cbox(
+ label="a checbox label",
+ value="checked",
+ chk=TRUE,
+ un.value="unchecked",
+ i18n=list(context="context info here")
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["checkbox"]])
+ )
+})
+
+test_that("rk.XML.code", {
+ thisNode <- rk.XML.code(
+ file="some_file.js"
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["code"]])
+ )
+})
+
+test_that("rk.XML.col", {
+ thisNode <- rk.XML.col(
+ rk.XML.cbox(label="a column label")
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["col"]])
+ )
+})
+
+test_that("rk.XML.component", {
+ thisNode <- rk.XML.component(
+ label="a component label",
+ file="plugins/MyGUIdialog.xml",
+ i18n=list(context="context info here")
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["component"]])
+ )
+})
+
+test_that("rk.XML.components", {
+ thisNode <- rk.XML.components(
+ rk.XML.component(
+ label="a components label",
+ file="plugins/MyOtherGUIdialog.xml"
+ )
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["components"]])
+ )
+})
+
+test_that("rk.XML.connect", {
+ thisNode <- rk.XML.connect(
+ governor="myGovernor",
+ client="myCLient",
+ get="visible",
+ set="string",
+ not=TRUE,
+ reconcile=TRUE
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["connect"]])
+ )
+})
+
+test_that("rk.XML.context", {
+ thisNode <- rk.XML.context(
+ rk.XML.menu("Analysis",
+ rk.XML.entry(
+ rk.XML.component(
+ label="a context label",
+ file="plugins/MyOtherGUIdialog.xml"
+ )
+ )
+ )
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["context"]])
+ )
+})
+
+test_that("rk.XML.convert", {
+ thisNode <- rk.XML.convert(
+ sources=list(text=rk.XML.input("a convert label")),
+ mode=c(equals="myValue"),
+ required=TRUE
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["convert"]])
+ )
+})
+
+test_that("rk.XML.copy", {
+ thisNode <- rk.XML.copy(
+ id="aCopyID",
+ as="page"
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["copy"]])
+ )
+})
+
+test_that("rk.XML.dependencies", {
+ thisNode <- rk.XML.dependencies(
+ dependencies=list(
+ rkward.min="0.6.3",
+ rkward.max="0.6.5",
+ R.min="3.1",
+ R.max="3.2"),
+ package=list(
+ c(name="heisenberg", min="0.11-2", max="0.14-1",
+ repository="http://hsb.example.org"),
+ c(name="DreamsOfPi", min="0.2", max="3.1", repository="http://dop.example.org")),
+ pluginmap=list(
+ c(name="heisenberg.pluginmap", url="http://eternalwondermaths.example.org/hsb"))
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["dependencies"]])
+ )
+})
+
+test_that("rk.XML.dependency_check", {
+ thisNode <- rk.XML.dependency_check(
+ id.name="dependency",
+ dependencies=list(
+ rkward.min="0.6.3",
+ rkward.max="0.6.5",
+ R.min="3.1",
+ R.max="3.2"),
+ package=list(
+ c(name="heisenberg", min="0.11-2", max="0.14-1",
+ repository="http://hsb.example.org"),
+ c(name="DreamsOfPi", min="0.2", max="3.1", repository="http://dop.example.org")),
+ pluginmap=list(
+ c(name="heisenberg.pluginmap", url="http://eternalwondermaths.example.org/hsb"))
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["dependency_check"]])
+ )
+})
+
+test_that("rk.XML.dialog", {
+ thisNode <- rk.XML.dialog(
+ rk.XML.col(
+ rk.XML.cbox(label="a dialog column label")
+ ),
+ label="a dialog label",
+ recommended=TRUE,
+ i18n=list(context="context info here")
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["dialog"]])
+ )
+})
+
+test_that("rk.XML.dropdown", {
+ thisNode <- rk.XML.dropdown(
+ label="myDropdownMenu",
+ options=list(
+ "First Option"=c(val="val1"),
+ rk.XML.option(
+ "Second Option", val="val2", id.name="auto",
+ i18n=list(context="context info1 here")
+ ),
+ "Third Option"=c(val="val3", chk=TRUE)
+ ),
+ i18n=list(context="context info2 here")
+ )
+ load("XML_test_standards.RData")
+ expect_that(
+ thisNode, equals(XML_test_standards[["dropdown"]])
+ )
+})
+
+# test_that("", {
+# thisNode <-
+# load("XML_test_standards.RData")
+# expect_that(
+# thisNode, equals(XML_test_standards[[""]])
+# )
+# })
More information about the rkward-tracker
mailing list