import pytest import rpy2.robjects as robjects import rpy2.robjects.language as lg from rpy2 import rinterface from rpy2.rinterface_lib import embedded @pytest.fixture(scope='module') def clean_globalenv(): yield for name in robjects.globalenv.keys(): del robjects.globalenv[name] def test_eval(clean_globalenv): code = """ x <- 1+2 y <- (x+1) / 2 """ res = lg.eval(code) assert 'x' in robjects.globalenv.keys() assert robjects.globalenv['x'][0] == 3 assert 'y' in robjects.globalenv.keys() assert robjects.globalenv['y'][0] == 2 def testeval_in_environment(clean_globalenv): code = """ x <- 1+2 y <- (x+1) / 2 """ env = robjects.Environment() res = lg.eval(code, envir=env) assert 'x' in env.keys() assert env['x'][0] == 3 assert 'y' in env.keys() assert env['y'][0] == 2 def test_LangVector_from_string(): lang_obj = lg.LangVector.from_string('1+2') assert lang_obj.typeof == rinterface.RTYPES.LANGSXP def test_LangVector_repr(): lang_obj = lg.LangVector.from_string('1+2') assert repr(lang_obj) == 'Rlang( 1 + 2 )' def test_LangVector_from_string_invalid(): with pytest.raises(embedded.RRuntimeError): lang_obj = lg.LangVector.from_string(1)