// RUN: %target-resilience-test
// REQUIRES: executable_test

// Use swift-version 4.
// UNSUPPORTED: swift_test_mode_optimize_none_with_implicit_dynamic

import StdlibUnittest
import class_resilient_superclass_reorder_methods


var SuperclassReorderMethodsTest = TestSuite("SuperclassReorderMethods")

SuperclassReorderMethodsTest.test("TestOverrides") {
  class MyDerived : Base {
    override func firstMethod() -> Int {
      return 3
    }
    override func secondMethod() -> Int {
      return 4
    }
  }

  expectEqual(MyDerived().callOverriddenMethods(), 34)
}

SuperclassReorderMethodsTest.test("TestSuper") {
  class MyDerived : Base {
    override func firstMethod() -> Int {
      return super.firstMethod() + 3
    }
    override func secondMethod() -> Int {
      return super.secondMethod() + 3
    }
  }

  expectEqual(MyDerived().callOverriddenMethods(), 45)
}

extension Derived {
  public func firstMethodExt() -> Int {
    return firstMethod() + super.firstMethod()
  }

  public func secondMethodExt() -> Int {
    return secondMethod() + super.secondMethod()
  }
}

SuperclassReorderMethodsTest.test("TestSuperExtension") {
  let obj = Derived()
  expectEqual(obj.firstMethodExt(), 11)
  expectEqual(obj.secondMethodExt(), 22)
}

runAllTests()

