Skip to content

Commit

Permalink
Fix ScalaJS Compilation by Removing JVM-specific java.util.Objects Re…
Browse files Browse the repository at this point in the history
…ferences in PathCodecPlatformSpecific (#3155)
  • Loading branch information
asr2003 authored Sep 20, 2024
1 parent 20d27fb commit 4764c98
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package zio.http.codec

import java.util.Objects

trait PathCodecPlatformSpecific {
private[codec] def parseLong(s: CharSequence, beginIndex: Int, endIndex: Int, radix: Int): Long = {
Objects.requireNonNull(s)
Objects.checkFromToIndex(beginIndex, endIndex, s.length)
require(s != null, "CharSequence cannot be null")
checkFromToIndex(beginIndex, endIndex, s.length)

if (radix < Character.MIN_RADIX)
throw new NumberFormatException("radix " + radix + " less than Character.MIN_RADIX")
if (radix > Character.MAX_RADIX)
Expand Down Expand Up @@ -42,8 +41,9 @@ trait PathCodecPlatformSpecific {
}

private[codec] def parseInt(s: CharSequence, beginIndex: Int, endIndex: Int, radix: Int): Int = {
Objects.requireNonNull(s)
Objects.checkFromToIndex(beginIndex, endIndex, s.length)
require(s != null, "CharSequence cannot be null")
checkFromToIndex(beginIndex, endIndex, s.length)

if (radix < Character.MIN_RADIX)
throw new NumberFormatException("radix " + radix + " less than Character.MIN_RADIX")
if (radix > Character.MAX_RADIX)
Expand Down Expand Up @@ -88,4 +88,10 @@ trait PathCodecPlatformSpecific {
"For input string: \"" + s + "\"" + (if (radix == 10) ""
else " under radix " + radix),
)

private def checkFromToIndex(from: Int, to: Int, length: Int): Unit = {
if (from < 0 || to > length || from > to) {
throw new IndexOutOfBoundsException(s"Range [$from, $to) out of bounds for length $length")
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package zio.http.codec

import zio._
import zio.test.Assertion._
import zio.test._

object PathCodecPlatformSpecificSpec extends ZIOSpecDefault {

def spec = suite("PathCodecJSPlatformSpecificSpec")(
test("parseInt should correctly parse a valid integer from a CharSequence") {
val charSequence = "12345"
val result = new PathCodecPlatformSpecific {}.parseInt(charSequence, 0, charSequence.length, 10)
assert(result)(equalTo(12345))
},
test("parseInt should throw an error for an invalid radix") {
val charSequence = "12345"
val result = ZIO.attempt {
new PathCodecPlatformSpecific {}.parseInt(charSequence, 0, charSequence.length, Character.MAX_RADIX + 1)
}.either
assertZIO(result)(isLeft(hasMessage(containsString("radix"))))
},
test("parseLong should correctly parse a valid long from a CharSequence") {
val charSequence = "123456789012345"
val result = new PathCodecPlatformSpecific {}.parseLong(charSequence, 0, charSequence.length, 10)
assert(result)(equalTo(123456789012345L))
},
test("parseLong should throw an error for an invalid input") {
val charSequence = "invalid123"
val result = ZIO.attempt {
new PathCodecPlatformSpecific {}.parseLong(charSequence, 0, charSequence.length, 10)
}.either
assertZIO(result)(isLeft(hasMessage(containsString("Error at index"))))
},
)
}

0 comments on commit 4764c98

Please sign in to comment.