EqualsAndHashCodeTest.scala 2.1 KB
Newer Older
梦境迷离's avatar
梦境迷离 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
package io.github.dreamylost

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

/**
 *
 * @author 梦境迷离
 * @since 2021/7/18
 * @version 1.0
 */
class EqualsAndHashCodeTest extends AnyFlatSpec with Matchers {

  @equalsAndHashCode(verbose = true)
  @toString
  class Employee(name: String, age: Int, var role: String) extends Person(name, age)

  @toString
  @equalsAndHashCode(verbose = true)
  class Person(var name: String, var age: Int)

  "equals1" should "ok" in {
    // these first two instances should be equal
    val nimoy = new Person("Leonard Nimoy", 82)
    val nimoy2 = new Person("Leonard Nimoy", 82)
    val shatner = new Person("William Shatner", 82)
    val stewart = new Person("Patrick Stewart", 47)

    println(nimoy)
    println(nimoy.hashCode())

    // all tests pass
    assert(nimoy != null)

    // these should be equal
    assert(nimoy == nimoy)
    assert(nimoy == nimoy2)
    assert(nimoy2 == nimoy)

    // these should not be equal
    assert(nimoy != shatner)
    assert(shatner != nimoy)
    assert(nimoy != "Leonard Nimoy")
    assert(nimoy != stewart)
  }

  "equals2" should "ok" in {
    // these first two instance should be equal
    val eNimoy1 = new Employee("Leonard Nimoy", 82, "Actor")
    val eNimoy2 = new Employee("Leonard Nimoy", 82, "Actor")
    val pNimoy = new Person("Leonard Nimoy", 82)
    val eShatner = new Employee("William Shatner", 82, "Actor")

    // equality tests
    assert(eNimoy1 == eNimoy1)
    assert(eNimoy1 == eNimoy2)
    assert(eNimoy2 == eNimoy1)

    // non-equality tests
    assert(eNimoy1 != pNimoy)
    assert(pNimoy != eNimoy1)
    assert(eNimoy1 != eShatner)
    assert(eShatner != eNimoy1)

    println(eNimoy1)
    println(eNimoy1.hashCode())
  }

  "equals3" should "ok even if exists a canEqual" in {
    """
      |    @equalsAndHashCode
      |    class Employee(name: String, age: Int, var role: String) extends Person(name, age) {
      |      override def canEqual(that: Any) = that.getClass == classOf[Employee];
      |    }
      |""".stripMargin should compile
  }
}