// 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 TulsiGenerator

class BuildLabelTests: XCTestCase {
  let a1 = BuildLabel("//test/place:a")
  let a2 = BuildLabel("//test/place:a")
  let b = BuildLabel("//test/place:b")
  let c = BuildLabel("//test/place:c")
  let noTargetName = BuildLabel("//test/place")
  let noLeadingSlash = BuildLabel("no/leading/slash")
  let emptyLabel = BuildLabel("")
  let justSlashLabel = BuildLabel("//")
  let invalidTrailingSlash = BuildLabel("invalid/trailing/slash/")

  func testEquality() {
    XCTAssertEqual(a1, a1)
    XCTAssertEqual(a1, a2)
    XCTAssertNotEqual(a1, b)
  }

  func testHash() {
    XCTAssertEqual(a1.hashValue, a2.hashValue)
  }

  func testComparison() {
    XCTAssertLessThan(a1, b)
    XCTAssertGreaterThan(c, b)
  }

  func testTargetName() {
    XCTAssertEqual(a1.targetName, "a")
    XCTAssertEqual(b.targetName, "b")
    XCTAssertEqual(c.targetName, "c")
    XCTAssertEqual(noTargetName.targetName, "place")
    XCTAssertNil(emptyLabel.targetName)
    XCTAssertNil(justSlashLabel.targetName)
    XCTAssertNil(invalidTrailingSlash.targetName)
  }

  func testPackageName() {
    XCTAssertEqual(a1.packageName, "test/place")
    XCTAssertEqual(a1.packageName, b.packageName)
    XCTAssertEqual(noLeadingSlash.packageName, "no/leading/slash")
    XCTAssertEqual(emptyLabel.packageName, "")
    XCTAssertEqual(justSlashLabel.packageName, "")
    XCTAssertEqual(invalidTrailingSlash.packageName, "")
  }

  func testAsFileName() {
    XCTAssertEqual(a1.asFileName, "test/place/a")
    XCTAssertEqual(a1.asFileName, a2.asFileName)
    XCTAssertEqual(noLeadingSlash.asFileName, "no/leading/slash/slash")
    XCTAssertNil(emptyLabel.asFileName)
    XCTAssertNil(justSlashLabel.asFileName)
    XCTAssertNil(invalidTrailingSlash.asFileName)
  }
}
