
// Copyright 2016 The Tulsi Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import XCTest
@testable import BazelIntegrationTestCase
@testable import TulsiEndToEndTestBase
@testable import TulsiGenerator


// End to end test that generates the Buttons project and runs its unit tests. This variation of the
// test uses the nightly Bazel binary.
class ButtonsNightlyEndToEndTest: TulsiEndToEndTest {
  fileprivate let buttonsProjectPath = "third_party/tulsi/src/TulsiEndToEndTests/Resources/Buttons.tulsiproj"

  override func setUp() {
    super.setUp()
    guard let nightlyBazelURL = fakeBazelWorkspace.nightlyBazelURL else {
      XCTFail("Expected Bazel nightly URL.")
      return
    }
    XCTAssert(fileManager.fileExists(atPath: nightlyBazelURL.path), "Bazel nightly binary is missing.")

    bazelURL = nightlyBazelURL
    let completionInfo = ProcessRunner.launchProcessSync(bazelURL.path, arguments: ["version"])
    if let versionOutput = String(data: completionInfo.stdout, encoding: .utf8) {
      print(versionOutput)
    }

    if (!copyDataToFakeWorkspace("third_party/tulsi/src/TulsiEndToEndTests/Resources")) {
      XCTFail("Failed to copy Buttons files to fake execroot.")
    }
  }

  func testButtonsWithNightlyBazel() throws {
    let xcodeProjectURL = generateXcodeProject(tulsiProject: buttonsProjectPath,
                                               config: "Buttons")
    XCTAssert(fileManager.fileExists(atPath: xcodeProjectURL.path), "Xcode project was not generated.")
    testXcodeProject(xcodeProjectURL, scheme: "ButtonsLogicTests")
  }
}
