Switch to side-by-side view

--- a
+++ b/tests/testthat/test-fromDataInput.R
@@ -0,0 +1,502 @@
+context("dataInput")
+
+data(event.data)
+
+test_that("remove.0.time",{
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time="time",
+                         remove.0.time=c(TRUE,5)
+  ))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time="time",
+                         remove.0.time="TRUE"
+  ))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",
+                         time="time", site="site",followup=-50)
+  )
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",
+                         time="time", site="site",followup=c(1,2,3))
+  )
+  
+  e <- event.data
+  e$time[1:25] <- NA
+  e$time[26:50] <- 0
+  
+  expect_warning(r.false <- EventData(data=e,
+                           subject="subject",
+                           site="site",
+                           rand.date="randDate",
+                           has.event="hasEvent",
+                           withdrawn="withdrawn",
+                           time="time",
+                           remove.0.time=FALSE
+  ))
+
+  expect_warning(r.true <- EventData(data=e,
+                                    subject="subject",
+                                    site="site",
+                                    rand.date="randDate",
+                                    has.event="hasEvent",
+                                    withdrawn="withdrawn",
+                                    time="time",
+                                    remove.0.time=TRUE
+  ))
+
+  
+  expect_warning(r.default <- EventData(data=e,
+                                     subject="subject",
+                                     site="site",
+                                     rand.date="randDate",
+                                     has.event="hasEvent",
+                                     withdrawn="withdrawn",
+                                     time="time"                                     
+  ))
+  
+  expect_equal(r.false,r.default)
+  expect_equal(nrow(r.false@subject.data),nrow(e))
+  expect_equal(e[51:nrow(e),]$subject,r.true@subject.data$subject)
+  
+})
+
+
+test_that("Column_names",{
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         has.event="hasevent",
+                         withdrawn="withdrawn",
+                         time="time"))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randdate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time=time))
+  
+  expect_error(EventData(data=event.data,
+                         subject="sudbject",
+                         site="site",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time="time"))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="sited",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time="time"))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="sited",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time="time"))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn"
+                         ))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         time="time"
+                         ))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time="time"
+  ))
+  
+  expect_error(EventData(subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         has.event="hasEvent",
+                         withdrawn="withdrawn",
+                         time="time"
+  ))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         withdrawn="withdrawn",
+                         time="time"
+  ))
+  
+  expect_error(EventData(data=event.data,
+                         subject="subject",
+                         site="site",
+                         rand.date="randDate",
+                         withdrawn="withdrawn",
+                         time="time",
+                         event.type="dfg"
+  ))
+  
+  
+})
+
+test_that("Invalid_data_in_df",{
+  e <- event.data
+  e$hasEvent[5] <- "3"
+  
+  expect_error(expect_watning(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time")))
+  e <- event.data
+  e$withdrawn[15] <- "NO"
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  e <- event.data
+  e$randDate[5] <- NA
+  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  e <- event.data
+  e$hasEvent <- rep(0,nrow(e))
+  expect_warning(a <- EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  expect_error(fit(a))
+  
+  
+  e <- event.data
+  e$hasEvent <- rep(1,nrow(e))
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  e <- event.data
+  e$withdrawn[1] <- 1
+  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
+                           has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  
+  e <- event.data
+  e$subject[1] <- 505
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  e <- event.data
+  e$time[1] <- "refd"
+  #also get a warning here as code thinks time is factor
+  expect_error(expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time")))
+  
+  e <- event.data
+  e$time[1] <- 0
+  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
+                           has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+ 
+  
+  e <- event.data
+  e$time[1] <- -5
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+
+  
+  e <- event.data
+  e$randDate[1] <- "15/10/2015"
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  
+  e <- event.data
+  e$randDate[1] <- "15 Jan 2015"
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  
+  e <- event.data
+  e$randDate[1] <- "15-10-31"
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+})
+
+
+test_that("Derived_Time_Test",{
+  
+ test.data <- data.frame(Asubject=c(1:8,"",10:12),
+             ArandDate=c("01/01/2015","01/01/2015","05/01/2015",
+                         "08/01/2015","12/01/2015","15/01/2015",
+                         "10/01/2015",          "","06/05/2015",
+                         "04/02/2015","08/02/2015","12/03/2015"),
+             Ahasevent=c(1,0,0,0,0,0,1,0,0,1,1,1),
+             Awithdrawn=c(1,1,1,1,0,0,0,0,0,0,0,0),
+             AprogDate=c("","","","10/01/2015","05/04/2015","",
+                        "04/12/2015","","","","","05/08/2015"),
+             AdthDate=c("04/05/2015","","","","","",
+                       "03/05/2015","","","08/02/2015","",""),
+             AlastDate=c("","06/06/2015","05/06/2015","",
+               "04/04/2015","05/05/2015","","01/05/2015",
+               "12/05/2015","05/02/2015","12/02/2015",""),
+             AwithdrawnDate=c("01/10/2015","","06/06/2015","12/01/2015",
+                             "","05/08/2015","","","","","","06/08/2015")
+ )
+ 
+ expect_warning(my.data <- EventData(data=test.data, subject="Asubject", rand.date="ArandDate",
+           has.event="Ahasevent", withdrawn="Awithdrawn",
+           time=list(last.date="AlastDate",prog.date="AprogDate",withdrawn.date="AwithdrawnDate",dth.date="AdthDate")))
+ 
+ NA.fact <- as.factor(NA)
+ 
+ indat <- data.frame(subject=c(1:7,10:12),
+                     rand.date=FixDates(c("01/01/2015","01/01/2015","05/01/2015",
+                                 "08/01/2015","12/01/2015","15/01/2015",
+                                 "10/01/2015",
+                                 "04/02/2015","08/02/2015","12/03/2015")),
+                     time=c(124,157,153,5,83,111,114,5,5,147),
+                     has.event=c(1,0,0,0,0,0,1,1,1,1),
+                     withdrawn=c(0,1,1,1,0,0,0,0,0,0),
+                     site=rep(NA,10),
+                     event.type=c("Has Event",rep(NA.fact,5),"Has Event","Has Event",
+                                  "Has Event","Has Event"),
+                     censored.at.follow.up=rep(0,10))
+ 
+  indat$subject <- factor(indat$subject,levels=levels(my.data@subject.data$subject)) 
+  
+  rownames(indat) <- NULL
+  rownames(my.data@subject.data) <- NULL
+  expect_equal(indat,my.data@subject.data)
+})
+
+test_that("Derived_Time",{
+  e <- event.data
+  
+  
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",
+                         time=list()))
+  
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",
+                         time=list(event.date="eD",last.date="lastDate")))
+  
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",
+                         time=list(event.date="eventDate")))
+  
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",
+                         time=list(last.date="lastDate",eventt.date="eventDate")))
+  
+  e$wDate <- rep(as.Date(NA),nrow(e))
+  e$wDate[1] <-as.Date("2014-01-16")
+  
+  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",
+                         time=list(last.date="lastDate",event.date="eventDate",withdrawn.date="wDate")))
+  
+  e <- event.data
+  e$wDate <- rep(as.Date(NA),nrow(e))
+  e$withdrawn[1] <- 1
+  e$hasEvent[1] <- 0
+  
+  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
+                           has.event="hasEvent", withdrawn="withdrawn",
+                           time=list(last.date="lastDate",event.date="eventDate",withdrawn.date="wDate")))
+  
+})
+
+test_that("CalculateDaysAtRisk",{
+  e <- event.data
+  e$time <- rep(4,nrow(e))
+  my.data <- EventData(data=e,
+                       subject="subject",
+                       rand.date="randDate",
+                       has.event="hasEvent",
+                       withdrawn="withdrawn",
+                       time="time",
+                       site="site")
+  
+  expect_equal(4*nrow(e),CalculateDaysAtRisk(my.data))
+  
+})
+
+
+test_that("Derived_Time_logic",{
+  #this is a companion test to Derived_Time_Test above
+  e <- event.data
+
+  e$wDate <- rep(NA,nrow(e))
+  e$dth.date <- rep(NA,nrow(e))
+  e$prog.date <- rep(NA,nrow(e))
+    
+  e$hasEvent[1] <- 0
+  e$eventDate[1] <- NA
+  e$lastDate[1] <- "2014-01-14"
+  e$hasEvent[2] <- 0
+  e$eventDate[2] <- NA
+  e$prog.date[2] <- "2014-02-01"
+  e$lastDate[2] <- "2014-02-06"
+  
+  e$hasEvent[3:5] <- 0
+  e$withdrawn[3:5] <- 1
+  e$eventDate[3:4] <- NA
+  e$lastDate[4] <- "2014-02-10"
+  e$wDate[4] <- "2014-02-05"
+  
+  e$lastDate[5] <- "2014-02-20"
+  e$wDate[5] <- "2014-03-05"
+  
+  e$lastDate[6] <- NA
+  e$eventDate[7] <- NA
+  e$dth.date[7] <- "2014-01-10"
+  
+  e$prog.date[8] <- "2014-12-03"
+  e$eventDate[8] <- "2014-04-04"
+  
+  e$eventDate[9] <- NA
+  e$wDate[9] <- "2014-02-28"
+  
+  e$withdrawn[10:11] <- 1
+  e$eventDate[10:11] <- NA
+  e$wdate[11] <- "2014-03-01"
+  e$prog.date[11] <- "2014-05-05"
+  
+  
+  expect_warning(a <- EventData(data=e, subject="subject", rand.date="randDate",
+            has.event="hasEvent", withdrawn="withdrawn",
+            time=list(last.date="lastDate",event.date="eventDate",withdrawn.date="wDate",dth.date="dth.date",
+                      prog.date="prog.date")))
+  
+  expect_equal(c(4,17,45,28,37,41,1,76,26,42,94),a@subject.data$time[1:11])
+  
+  
+})
+
+test_that("prog_dth_warning",{
+  
+  #check if have both prog and dth date then get warning if dth is before prog
+  e <- data.frame(subject=1:3,
+                  has.event=c(1,1,0),
+                  withdrawn=c(0,0,0),
+                  rand.date=rep("2014-01-01",3),
+                  last.date=c("","","2015-01-01"),
+                  prog.date=c("2015-01-01","2015-01-01",""),
+                  dth.date=c("2014-06-06","2015-01-01","")
+                  )
+  
+  expect_warning(EventData(data=e, subject="subject", rand.date="rand.date",
+                 has.event="has.event", withdrawn="withdrawn",
+                 time=list(last.date="last.date",dth.date="dth.date",prog.date="prog.date")),
+                 regexp ="Subjects 1 have progression date after death date. This is invalid and should be fixed" )
+  
+  
+   
+})
+
+
+test_that("followup",{
+  e <- data.frame(subject=1:6,
+                  randDate=c("2015-01-01","2015-02-01","2015-03-01","2015-04-01","2015-05-01","2015-06-01"),
+                  time=(1:6)*10,
+                  hasEvent=c(1,1,1,0,1,0),
+                  withdrawn=c(0,0,1,0,0,1))
+  
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+            has.event="hasEvent", withdrawn="withdrawn",time="time",followup=0))
+  
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time",followup=c(3,4)))
+  
+  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
+                         has.event="hasEvent", withdrawn="withdrawn",time="time",followup=-10))
+  
+  #warning for subject 3 having withdrawn and hasEvent=1
+  expect_warning(inf.followup <- EventData(data=e, subject="subject", rand.date="randDate",
+            has.event="hasEvent", withdrawn="withdrawn",time="time"))
+  
+  expect_equal(rep(0,6),inf.followup@subject.data$censored.at.follow.up)
+  expect_true(is.infinite(inf.followup@followup))
+  
+  expect_warning(seventy.followup <- EventData(data=e, subject="subject", rand.date="randDate",
+                                has.event="hasEvent", withdrawn="withdrawn",time="time",followup=70))
+  
+  expect_equal(70,seventy.followup@followup)
+  expect_equal(inf.followup@subject.data,seventy.followup@subject.data)
+
+  expect_warning(fifteen.followup <- EventData(data=e, subject="subject", rand.date="randDate",
+                                               has.event="hasEvent", withdrawn="withdrawn",time="time",followup=15))
+
+  expect_equal(c(1,0,0,0,0,0),fifteen.followup@subject.data$has.event)
+  expect_equal(rep(0,6),fifteen.followup@subject.data$withdrawn)
+  expect_equal(c(0,rep(1,5)),fifteen.followup@subject.data$censored.at.follow.up)
+  
+  expect_equal(c(10,rep(15,5)),fifteen.followup@subject.data$time)
+  
+  expect_warning(twenty.followup <- EventData(data=e, subject="subject", rand.date="randDate",
+                                               has.event="hasEvent", withdrawn="withdrawn",time="time",followup=20))
+  
+  
+  expect_equal(c(10,rep(20,5)),twenty.followup@subject.data$time)
+  expect_equal(c(1,1,0,0,0,0),twenty.followup@subject.data$has.event)
+  
+})
+
+
+test_that("CalculateProgEventTypes",{
+  e <- c(0,1,1,1,1,1,1)
+  p <- c("01/01/2015","01/01/2015","01/01/2015","01/01/2015","01/01/2015","","")
+  d <- c("","","01/01/2014","01/01/2016","01/01/2015","02/01/2015","")  
+  
+  
+  expect_equal(c(NA,"Progression (not death)","Death","Progression (not death)",
+                 "Death","Death","Progression (unknown if death)"),
+                 CalculateProgEventTypes(e,p,d))
+  
+  expect_error(CalculateProgEventTypes(c(e,1),p,d))
+  expect_error(CalculateProgEventTypes(e,c(p,1),d))
+  e[1] <- -3
+  expect_error(CalculateProgEventTypes(e,p,d))
+  e[1] <- 0
+  p[1] <- 23
+  expect_error(CalculateProgEventTypes(e,p,d))
+  
+}) 
+
+
+test_that("EmptyEventData",{
+  e <- EmptyEventData()
+  expect_equal(Inf,e@followup)
+  expect_equal(0,nrow(e@subject.data))
+  e <- EmptyEventData(followup=10)
+  expect_equal(10,e@followup)
+  expect_error(EmptyEventData(followup=-10))
+  expect_error(EmptyEventData(followup=c(1,2,3)))
+})
+