classdef (SharedTestFixtures={...
    check_mds,setup_gdatpaths}) ...
    test_requestnames < matlab.unittest.TestCase
  
  properties (Abstract)
    Machine;
  end
  
  properties(TestParameter,Abstract)
    % parameters that will vary during tests
    shot;
    requests_fast; % placeholders
    requests_slow;
  end
  
  methods(Test,TestTags = {'fast'})
    function test_gdat_call_fast(testCase,shot,requests_fast)
      test_gdat_call(testCase,shot,requests_fast);
    end
  end
  
  methods(Test,TestTags = {'slow'})
    function test_gdat_call_slow(testCase,shot,requests_slow)
      test_gdat_call(testCase,shot,requests_slow);
    end
  end
  
end

function test_gdat_call(testCase,shot,request)
% actual function to test gdat call
testCase.assertTrue(isnumeric(str2double(shot)));
testCase.assertTrue(ischar(request));

% gdat call
gdat_call = sprintf(['gdat_' lower(testCase.Machine) '(%s,''%s'')'],shot,request);

% logging
fprintf('Testing gdat call: %s\n',gdat_call);

gdat_out = eval(gdat_call); %#ok<NASGU>

% in some future: check for warnings
%gdat_out = verifyWarningFree(testCase,eval(gdat_call),...
%  'Warning issued from gdat call:\n   %s\n',gdat_call);

% (add optional sanity checks of gdat_out here)
end