Class: Oktest::FixtureManager

Inherits:
Object
  • Object
show all
Defined in:
lib/oktest.rb

Instance Method Summary collapse

Instance Method Details

#get_fixture_value(name, node, spec, context, location = nil, _resolved = {}, _resolving = []) ⇒ Object



1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
# File 'lib/oktest.rb', line 1351

def get_fixture_value(name, node, spec, context, location=nil, _resolved={}, _resolving=[])
  return _resolved[name] if _resolved.key?(name)
  location ||= spec.location
  tuple = node.get_fixture_block(name)
  if tuple
    block, param_names, location = tuple
    #; [!2esaf] resolves fixture dependencies.
    if param_names
      _resolving << name
      args = get_fixture_values(param_names, node, spec, context, location, _resolved, _resolving)
      (popped = _resolving.pop) == name  or
        raise "** assertion failed: name=#{name.inspect}, resolvng[-1]=#{popped.inspect}"
      #; [!4xghy] calls fixture block with context object as self.
      val = context.instance_exec(*args, &block)
    else
      val = context.instance_eval(&block)
    end
    #; [!8t3ul] caches fixture value to call fixture block only once per spec.
    _resolved[name] = val
    return val
  elsif node.parent
    #; [!4chb9] traverses parent topics if fixture not found in current topic.
    return get_fixture_value(name, node.parent, spec, context, location, _resolved, _resolving)
  elsif ! node.equal?(THE_GLOBAL_SCOPE)
    #; [!wt3qk] suports global scope.
    return get_fixture_value(name, THE_GLOBAL_SCOPE, spec, context, location, _resolved, _resolving)
  else
    #; [!nr79z] raises error when fixture not found.
    exc = FixtureNotFoundError.new("#{name}: fixture not found. (spec: #{spec.desc})")
    exc.set_backtrace([location]) if location
    raise exc
  end
end

#get_fixture_values(names, node, spec, context, location = nil, _resolved = {}, _resolving = []) ⇒ Object



1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
# File 'lib/oktest.rb', line 1336

def get_fixture_values(names, node, spec, context, location=nil, _resolved={}, _resolving=[])
  #; [!w6ffs] resolves 'this_topic' fixture name as target objec of current topic.
  _resolved[:this_topic] = node.target if !_resolved.key?(:this_topic) && node.topic?
  #; [!ja2ew] resolves 'this_spec' fixture name as description of current spec.
  _resolved[:this_spec]  = spec.desc   if !_resolved.key?(:this_spec)
  #; [!v587k] resolves fixtures.
  location ||= spec.location
  return names.collect {|name|
    #; [!np4p9] raises error when loop exists in dependency.
    ! _resolving.include?(name)  or
      raise _looped_dependency_error(name, _resolving, location)
    get_fixture_value(name, node, spec, context, location, _resolved, _resolving)
  }
end