JUnit test runtime for Scala.js - provides the runtime infrastructure for running JUnit tests compiled with Scala.js
—
JUnit provides specialized assertion methods for comparing arrays element-by-element. These methods offer detailed failure messages showing exactly which elements differ and support different array types including primitive arrays and object arrays.
def assertArrayEquals(expecteds: Array[AnyRef], actuals: Array[AnyRef]): Unit
def assertArrayEquals(message: String, expecteds: Array[AnyRef], actuals: Array[AnyRef]): UnitUsage:
val expected = Array("apple", "banana", "cherry")
val actual = fruitProcessor.getSortedFruits()
assertArrayEquals(expected, actual)
assertArrayEquals("Fruit sorting failed", expected, actual)def assertArrayEquals(expecteds: Array[Boolean], actuals: Array[Boolean]): Unit
def assertArrayEquals(message: String, expecteds: Array[Boolean], actuals: Array[Boolean]): UnitUsage:
val expected = Array(true, false, true, false)
val actual = validator.validateInputs(Array("valid", "invalid", "valid", "invalid"))
assertArrayEquals("Validation results mismatch", expected, actual)// Byte arrays
def assertArrayEquals(expecteds: Array[Byte], actuals: Array[Byte]): Unit
def assertArrayEquals(message: String, expecteds: Array[Byte], actuals: Array[Byte]): Unit
// Character arrays
def assertArrayEquals(expecteds: Array[Char], actuals: Array[Char]): Unit
def assertArrayEquals(message: String, expecteds: Array[Char], actuals: Array[Char]): Unit
// Short arrays
def assertArrayEquals(expecteds: Array[Short], actuals: Array[Short]): Unit
def assertArrayEquals(message: String, expecteds: Array[Short], actuals: Array[Short]): Unit
// Integer arrays
def assertArrayEquals(expecteds: Array[Int], actuals: Array[Int]): Unit
def assertArrayEquals(message: String, expecteds: Array[Int], actuals: Array[Int]): Unit
// Long arrays
def assertArrayEquals(expecteds: Array[Long], actuals: Array[Long]): Unit
def assertArrayEquals(message: String, expecteds: Array[Long], actuals: Array[Long]): UnitUsage Examples:
// Integer array comparison
val expectedScores = Array(95, 87, 92, 78)
val actualScores = grader.calculateScores(submissions)
assertArrayEquals("Score calculation failed", expectedScores, actualScores)
// Byte array comparison (useful for binary data)
val expectedBytes = Array[Byte](0x48, 0x65, 0x6C, 0x6C, 0x6F) // "Hello" in ASCII
val actualBytes = encoder.encode("Hello")
assertArrayEquals(expectedBytes, actualBytes)
// Character array comparison
val expectedChars = Array('H', 'e', 'l', 'l', 'o')
val actualChars = stringProcessor.toCharArray("Hello")
assertArrayEquals(expectedChars, actualChars)def assertArrayEquals(expecteds: Array[Double], actuals: Array[Double], delta: Double): Unit
def assertArrayEquals(message: String, expecteds: Array[Double], actuals: Array[Double], delta: Double): UnitUsage:
val expectedValues = Array(3.14159, 2.71828, 1.41421)
val actualValues = calculator.computeMathConstants()
assertArrayEquals("Math constants calculation", expectedValues, actualValues, 0.001)def assertArrayEquals(expecteds: Array[Float], actuals: Array[Float], delta: Float): Unit
def assertArrayEquals(message: String, expecteds: Array[Float], actuals: Array[Float], delta: Float): UnitUsage:
val expectedCoordinates = Array(1.5f, 2.3f, 4.7f)
val actualCoordinates = geometryEngine.calculateCoordinates(shape)
assertArrayEquals("Coordinate calculation failed", expectedCoordinates, actualCoordinates, 0.01f)Array assertions provide detailed error messages showing:
val expected = Array(1, 2, 3)
val actual = Array(1, 2)
assertArrayEquals(expected, actual)
// Error: arrays length differ expected:<3> but was:<2>val expected = Array("a", "b", "c")
val actual = Array("a", "x", "c")
assertArrayEquals(expected, actual)
// Error: arrays first differed at element [1]; expected:<b> but was:<x>val expected = Array(Array(1, 2), Array(3, 4))
val actual = Array(Array(1, 2), Array(3, 5))
assertArrayEquals(expected, actual)
// Error: arrays first differed at element [1][1]; expected:<4> but was:<5>class ArrayProcessorTest {
@Test
def shouldSortIntegerArray(): Unit = {
val input = Array(3, 1, 4, 1, 5, 9, 2, 6)
val expected = Array(1, 1, 2, 3, 4, 5, 6, 9)
val actual = ArrayProcessor.sort(input)
assertArrayEquals("Array should be sorted in ascending order", expected, actual)
}
@Test
def shouldFilterEvenNumbers(): Unit = {
val input = Array(1, 2, 3, 4, 5, 6, 7, 8)
val expected = Array(2, 4, 6, 8)
val actual = ArrayProcessor.filterEven(input)
assertArrayEquals(expected, actual)
}
@Test
def shouldComputeMovingAverage(): Unit = {
val input = Array(1.0, 2.0, 3.0, 4.0, 5.0)
val expected = Array(1.5, 2.5, 3.5, 4.5) // Window size 2
val actual = StatisticsEngine.movingAverage(input, windowSize = 2)
assertArrayEquals("Moving average calculation", expected, actual, 0.001)
}
}class BinaryDataTest {
@Test
def shouldEncodeStringToBytes(): Unit = {
val input = "Hello, 世界"
val expected = Array[Byte](-2, -1, 0, 72, 0, 101, 0, 108, 0, 108, 0, 111, 0, 44, 0, 32, 78, 22, 117, -26)
val actual = BinaryEncoder.encodeUTF16(input)
assertArrayEquals("UTF-16 encoding failed", expected, actual)
}
@Test
def shouldCompressData(): Unit = {
val originalData = "Hello World! ".repeat(100).getBytes("UTF-8")
val compressed = CompressionEngine.compress(originalData)
val decompressed = CompressionEngine.decompress(compressed)
assertArrayEquals("Compression round-trip failed", originalData, decompressed)
}
}class MatrixTest {
@Test
def shouldMultiplyMatrices(): Unit = {
val matrixA = Array(
Array(1, 2),
Array(3, 4)
)
val matrixB = Array(
Array(5, 6),
Array(7, 8)
)
val expected = Array(
Array(19, 22),
Array(43, 50)
)
val actual = MatrixOperations.multiply(matrixA, matrixB)
// Compare each row
for (i <- expected.indices) {
assertArrayEquals(s"Row $i multiplication failed", expected(i), actual(i))
}
}
}Array assertions use specialized comparison criteria:
// Internal comparison classes
abstract class ComparisonCriteria {
def arrayEquals(message: String, expecteds: AnyRef, actuals: AnyRef): Unit
protected def assertElementsEqual(expected: AnyRef, actual: AnyRef): Unit
}
class ExactComparisonCriteria extends ComparisonCriteria {
// Uses Objects.equals for exact comparison
}
class InexactComparisonCriteria(delta: Double) extends ComparisonCriteria {
// Uses delta tolerance for floating-point comparison
}// Too strict - may fail due to precision
assertArrayEquals(expected, actual, 0.0)
// Appropriate for most calculations
assertArrayEquals(expected, actual, 1e-10)
// Too loose - may miss real errors
assertArrayEquals(expected, actual, 1.0)// Test length first
assertEquals("Array length mismatch", expected.length, actual.length)
// Then test contents
assertArrayEquals("Array contents differ", expected, actual)// Both null - passes
assertArrayEquals(null, null)
// One null - fails with clear message
assertArrayEquals("Expected array", expectedArray, null)assertArrayEquals("User permission flags", expectedPermissions, actualPermissions)
assertArrayEquals("Pixel RGB values", expectedPixels, actualPixels)import scala.collection.JavaConverters._
// More flexible collection assertions
assertEquals(expectedArray.toList, actualArray.toList)
assertThat(actualArray.toList, hasItems(expectedElements: _*))Install with Tessl CLI
npx tessl i tessl/maven-org-scala-js--scalajs-junit-test-runtime