// RUN: %empty-directory(%t)
// RUN: %empty-directory(%t/Inputs)
// RUN: %empty-directory(%t/rth)
// RUN: env PYTHONPATH=%S/Inputs %gyb < %s > %t/test_keypaths.swift
// RUN: env PYTHONPATH=%S/Inputs %gyb < %S/Inputs/keypaths.swift.gyb > %t/Inputs/keypaths.swift
// RUN: %target-resilience-test --t "%t/rth" --S "%t" --s "%t/test_keypaths.swift" --no-symbol-diff

// REQUIRES: executable_test

import keypaths
import StdlibUnittest

%{
from keypaths_gyb import testCases
}%

var tests = TestSuite("key path resilience")

% for (name, kind, before, after, addsAPI) in testCases:

%  if addsAPI:
#if BEFORE
%  end

%  if kind == "mutating" or kind == "nonmutating":

tests.test("AnEnum.${name}") {
  let fromModule = AnEnum.keyPath_${name}
  let formedLocally = \AnEnum.${name}

  expectEqual(fromModule, formedLocally)
}

%  elif kind == "stored":

%  else:
     %{ raise ValueError("improper test case kind") }%
%  end

%  if addsAPI:
#endif // BEFORE
%  end

% end

% for (name, kind, before, after, addsAPI) in testCases:

%  if addsAPI:
#if BEFORE
%  end

%  if kind == "mutating" or kind == "nonmutating" or kind == "stored":

tests.test("AStruct.${name}") {
  let fromModule = AStruct.keyPath_${name}
  let formedLocally = \AStruct.${name}

  expectEqual(fromModule, formedLocally)
}

%  else:
     %{ raise ValueError("improper test case kind") }%
%  end

%  if addsAPI:
#endif // BEFORE
%  end

% end

% for (name, kind, before, after, addsAPI) in testCases:

%  if addsAPI:
#if BEFORE
%  end

%  if kind == "nonmutating" or kind == "stored":

tests.test("AClass.${name}") {
  let fromModule = AClass.keyPath_${name}
  let formedLocally = \AClass.${name}

  expectEqual(fromModule, formedLocally)
}

tests.test("AFinalClass.${name}") {
  let fromModule = AFinalClass.keyPath_${name}
  let formedLocally = \AFinalClass.${name}

  expectEqual(fromModule, formedLocally)
}

%  elif kind == "mutating":

%  else:
     %{ raise ValueError("improper test case kind") }%
%  end

%  if addsAPI:
#endif
%  end

% end

runAllTests()
