classdef test_expcodes < matlab.unittest.TestCase
  
  properties
    expcode_obj;
    SCDexps;
  end
  
  properties(MethodSetupParameter)
    expcode_number = {1,1005,1006}; % list of expcodes to test
  end
  
  methods(TestClassSetup)
    function setup_environment(testCase)
      testCase.addTeardown(@cd,pwd);
      testCase.addTeardown(@path,path);
      
      basePath = fullfile(fileparts(mfilename('fullpath')),'..');
      run(fullfile(basePath,'rtccode_paths'));
      
      % get SCD experimental code object container
      testCase.SCDexps = SCDconf_createexpcodes;
    end
  end
    
  methods(TestMethodSetup)
    function setup_expcode(testCase,expcode_number)
      % get this expcode object from expcode object container
      testCase.expcode_obj = getbymaincode(testCase.SCDexps,expcode_number);
      testCase.expcode_obj.setup; % run setup this exp code
    end 
  end
  
  methods(Test)
    function test_expcode(testCase)
      % attempt compiling tcv.slx for this expcode
      try
        tcv([],[],[],'compile');
        tcv([],[],[],'term');
      catch ME
        tcv([],[],[],'term');
        rethrow(ME)
      end
      testCase.assertTrue(true); % dummy
    end
    
   function test_compilation(testCase)
     expcode_ignore_compile = 1006; % ignore for now, until fixed
     testCase.assumeTrue(~any(testCase.expcode_obj.maincode ~= expcode_ignore_compile))
     
     node_to_compile = 'SCD_rtccode_02_02';
     load_system(node_to_compile);
     SCDconf_setCODEconf;
     rtwbuild(node_to_compile);
   end
  end
end
