setClass("maybe") setClass("A", representation(x = "numeric")) setIs("A", "maybe", test = function(object)length(object@x) >= 1 && object@x[[1]] > 0, coerce = function(from)from, replace = function(from, value) stop("meaningless to replace the \"maybe\" part of an object")) aa <- new("A", x=1) setGeneric("ff", function(x)"default ff") ## test that the setGeneric() call created the generic & default stopifnot(is(ff, "standardGeneric"), identical(body(getMethod("ff","ANY")), "default ff")) ffMaybe <- function(x) "ff maybe method" setMethod("ff", "maybe", ffMaybe) aa2 <- new("A", x = -1) # condition not TRUE stopifnot(identical(ff(aa), "default ff"), identical(ff(aa2), "default ff"))# failed in R 2.11.0 ## a method to test the condition setMethod("ff", "A", function(x) { if(is(x, "maybe")) ffMaybe(x) else callNextMethod() }) stopifnot(identical(ff(aa), "ff maybe method"), identical(ff(aa2), "default ff")) removeClass("A") removeClass("maybe") removeGeneric("ff")