tests/testthat/testfunctions.R

sample(c(letters, LETTERS, 0:9), 15)
tmpdir<-file.path(tempfile('depwalker.test.'), paste0(sample(c(letters, LETTERS, 0:9), 15),collapse=''))
dir.create(tmpdir, showWarnings = FALSE, recursive = TRUE);

testf1<-function(tmpdir) {
  code<-"x<-1:10";
  m<-depwalker:::create.metadata(code, file.path(tmpdir,"task1"))
  m<-depwalker:::add.objectrecord(m,"x",file.path(tmpdir, "x"));
  depwalker:::make.sure.metadata.is.saved(m);m
}

testf2<-function(tmpdir) {
  m1<-testf1(tmpdir);
  code<-"y<-sum(x)";
  m<-depwalker:::create.metadata(code, file.path(tmpdir, "task2"));
  m<-depwalker:::add.parent(metadata = m,  name = 'x',   parent.path = file.path(tmpdir, "task1") );
  m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, "y"), name="y");
  depwalker:::make.sure.metadata.is.saved(m);m
}

testf3<-function(tmpdir)
{
  testf2(tmpdir);
  code<-"y3<-mean(inp)+y";
  m<-depwalker:::create.metadata(code, file.path(tmpdir, "task3"));
  m<-depwalker:::add.parent(metadata = m, name = 'x',  parent.path  = file.path(tmpdir, "task1"),aliasname = 'inp' );
  m<-depwalker:::add.parent(metadata = m, name = 'y',  parent.path = file.path(tmpdir, "task2"));
  m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, "y3"), name="y3");
  depwalker:::make.sure.metadata.is.saved(m);m
}

testf4<-function(tmpdir)
{
  testf1(tmpdir)
  testf3(tmpdir)
  code<-"ans<-mean(a1,a2,y3)";
  m<-depwalker:::create.metadata(code, file.path(tmpdir, "task4"));
  m<-depwalker:::add.parent(metadata = m, name = 'x',  parent.path = file.path(tmpdir, "task1"),aliasname = 'a1' );
  m<-depwalker:::add.parent(metadata = m, name = 'y3',  parent.path = file.path(tmpdir, "task3"));
  m<-depwalker:::add.parent(metadata = m, name = 'y',  parent.path = file.path(tmpdir, "task2"), aliasname = 'a2');
  m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, "ans4"), name="ans");
  depwalker:::make.sure.metadata.is.saved(m);m
}


testf5<-function(tmpdir)
{
  code<-paste0(c("a1<-12", "a2<-23", "a3<-34"),collapse="\n");
  m<-depwalker:::create.metadata(code, file.path(tmpdir, "task5"));
  m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, "a1"), name="a1");
  m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, "a2"), name="a2");
  m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, "a3"), name="a3");
  depwalker:::make.sure.metadata.is.saved(m);m
}

testf6<-function(tmpdir)
{
  code<-paste0(c("DT<-as.data.table(list(a=1:10))", "DT[,b:=a+2]"),collapse="\n");
  m<-depwalker:::create.metadata(code, file.path(tmpdir, "task6"));
  m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, "DT"), name="DT");
  depwalker:::make.sure.metadata.is.saved(m);m
}

testf7<-function(tmpdir)
{
  fncr<-function(name, value, nr)
  {
    m<-depwalker:::create.metadata(paste0('Sys.sleep(1)\n',name,'<-',value), file.path(tmpdir,paste0("pre_task_",nr)))
    m<-depwalker:::add.objectrecord(metadata=m, path=file.path(tmpdir, paste0("obj",nr)), name=name)
    depwalker:::make.sure.metadata.is.saved(m)
  }
  #Object with many parents
  m<-depwalker:::create.metadata('ans<-a1+a2+a3', file.path(tmpdir, "task7"))
  ma<-fncr('a1',1,1)
  m<-depwalker:::add.parent(metadata=m, name='a1', parent.path=ma$path);
  ma<-fncr('a2',10,2)
  m<-depwalker:::add.parent(metadata=m, name='a2', parent.path=ma$path);
  ma<-fncr('a3',100,3)
  m<-depwalker:::add.parent(metadata=m, name='a3', parent.path=ma$path);
  m<-depwalker:::add.objectrecord(metadata=m, name='ans')
  depwalker:::make.sure.metadata.is.saved(m)
  m
}

testf8<-function(tmpdir)
{
  #Nested, complicated task
  m<-depwalker:::create.metadata('ans1<-f7+f2\n ans2<-f7-f2', file.path(tmpdir, "task8"))
  m<-depwalker:::add.objectrecord(metadata=m, name='ans1')
  m<-depwalker:::add.objectrecord(metadata=m, name='ans2')

  ma<-testf7(tmpdir)
  m<-depwalker:::add.parent(metadata=m, parent.path=ma$path, aliasname = 'f7');
  ma<-testf2(tmpdir)
  m<-depwalker:::add.parent(metadata=m, parent.path=ma$path, aliasname = 'f2');
  depwalker:::make.sure.metadata.is.saved(m)
  m
}

testf9<-function(tmpdir)
{
  #Task, that generates an error
  m<-depwalker:::create.metadata('stop("My error!")', file.path(tmpdir, "task9"))
  m<-depwalker:::add.objectrecord(m,"nothing",file.path(tmpdir, "null"));
  depwalker:::make.sure.metadata.is.saved(m)
  m
}

testf10<-function(tmpdir)
{
  #Task, that generates a warning
  m<-depwalker:::create.metadata('warning("My warning!")\n nothing<-23', file.path(tmpdir, "task10"))
  m<-depwalker:::add.objectrecord(m,"nothing",file.path(tmpdir, "nothing"));
  depwalker:::make.sure.metadata.is.saved(m)
  m
}

testf11<-function(tmpdir)
{
  #Task, that generates a message
  m<-depwalker:::create.metadata('message("My message!")\n nothing<-23', file.path(tmpdir, "task11"))
  m<-depwalker:::add.objectrecord(m,"nothing",file.path(tmpdir, "nothing"));
  depwalker:::make.sure.metadata.is.saved(m)
  m
}

testf12<-function(tmpdir)
{
  #Task, that generates an error deep inside
  m<-depwalker:::create.metadata(c('f<-function() { stop("Nested error!")}',
                                   'f2<-function(par=1) {',
                                   '   if(par==2)',
                                   '      f()',
                                   'return(1)}',
                                   'f3<-function(){f2(2)}',
                                   'f3()')
                                   , file.path(tmpdir, "task12"))
  m<-depwalker:::add.objectrecord(m,"nothing",file.path(tmpdir, "nothing"));
  depwalker:::make.sure.metadata.is.saved(m)
  m
}

testf13<-function(tmpdir)
{
  #Task that creates lots of data
  m<-depwalker:::create.metadata(c('data<-runif(10000)')
                                 , file.path(tmpdir, "task13"))
  m<-depwalker:::add.objectrecord(m,'data');
  depwalker:::make.sure.metadata.is.saved(m)
  m
}

testf14<-function(tmpdir)
{
  #Task that has more than one source file and a side effect
  folder<-tmpdir
  code<-c(paste0("writeLines('123','", file.path(folder,'testf14.tmp'), "')"),
          "source('aux.R', local=TRUE)")
  m<-depwalker:::create.metadata(code, file.path(tmpdir,"task14"))
  m<-depwalker:::add.objectrecord(m,"x",file.path(tmpdir, "x"));
  m<-depwalker::add_source_file(m, 'aux.R', 'x<-42')
  m<-depwalker::add_source_file(m, 'aux.txt', 'Whatever')

  depwalker:::make.sure.metadata.is.saved(m);m
}

testf15<-function(tmpdir)
{
  #Task that creates a file in a current directory. Used to test for correct custom script directory
  code<-c("writeLines('123','file.txt')", "x<-13")
  m<-depwalker:::create.metadata(code, file.path(tmpdir,"task15"), execution.directory = tempdir())
  m<-depwalker:::add.objectrecord(m,"x",file.path(tmpdir, "x"));

  depwalker:::make.sure.metadata.is.saved(m);m
}

testf16<-function(tmpdir)
{
  #Task that has more than one source file and a side effect
  folder<-tempdir()
  code<-"x<-digest::digest('../../customdep.bin', algo='crc32', file=TRUE)"
  m<-depwalker:::create.metadata(code, file.path(tmpdir,"task16"))
  m<-depwalker:::add.objectrecord(m,"x",file.path(tmpdir, "x"));
  towrite<-as.raw(rep(0,16384))
  towrite[3673]<-as.raw(42)
  sciezka<-file.path(folder,'customdep.bin')
  writeBin(object=towrite,con=sciezka)

  m<-depwalker::add_source_file(m, filepath = sciezka,flag.binary = TRUE)

  depwalker:::make.sure.metadata.is.saved(m);m
}

testf17<-function(tmpdir)
{
  #Task with existing code
  filename<-pathcat::path.cat(tmpdir, "existing_R_code.R")

  fileConn<-file(filename)
  writeLines(c("a<-rnorm(1000)","b<-mean(a)"), fileConn)
  close(fileConn)

  m<-depwalker:::create.metadata(metadata.path =  file.path(tmpdir,"task17"), source.path = filename)
  m<-depwalker:::add.objectrecord(m,"b",file.path(tmpdir, "b"));
  depwalker:::make.sure.metadata.is.saved(m);m

}

testf18<-function(tmpdir)
{
  #Simple test with a side effect
  filename<-pathcat::path.cat(tmpdir, "existing_R_code.R")
  code<-"fileConn<-file('test18_side_effect.txt');writeLines(c('Hello World'), fileConn);close(fileConn);Sys.sleep(1);a<-1";
  m<-depwalker:::create.metadata(code, file.path(tmpdir,"task18"))
  m<-depwalker:::add.objectrecord(m,"a",file.path(tmpdir, "a"));
  depwalker:::make.sure.metadata.is.saved(m);m
}

testf19<-function(tmpdir)
{
  #Object that imports more than one object from a single parent

  m2<-testf8(tmpdir); #More than 1 object exported

  code<-"t19<-exists('ans1') + exists('ans2')";
  m<-depwalker:::create.metadata(code, file.path(tmpdir, "task19"));
  m<-depwalker:::add.parent(metadata = m,  parent = m2 );
  m<-depwalker:::add.objectrecord(metadata=m, name="t19");
  depwalker:::make.sure.metadata.is.saved(m);m
}
adamryczkowski/depwalker documentation built on May 10, 2019, 5:51 a.m.