Skip to content

Commit

Permalink
No idempotency on JS Charsequence/String rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
ilmirons committed Feb 21, 2025
1 parent 8350e79 commit 6870485
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
8 changes: 8 additions & 0 deletions ast/jvm/src/test/scala/jawn/ast/AstCheckPlatform.scala
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,14 @@ private[jawn] trait AstCheckPlatform { self: AstCheck =>
p0 && p1
}

property("string/charSequence parsing") = forAll { (value: JValue) =>
val s = CanonicalRenderer.render(value)
val j1 = JParser.parseFromString(s)
val cs = java.nio.CharBuffer.wrap(s.toCharArray)
val j2 = JParser.parseFromCharSequence(cs)
Prop(j1 == j2 && j1.## == j2.##)
}

import AsyncParser.SingleValue

property("async parsing") = forAll { (v: JValue) =>
Expand Down
17 changes: 16 additions & 1 deletion ast/native/src/test/scala/jawn/ast/AstCheckPlatform.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,19 @@
package org.typelevel.jawn
package ast

private[jawn] trait AstCheckPlatform
import org.typelevel.jawn.ast.ArbitraryUtil.arbitraryJValue

import org.scalacheck.Prop
import org.scalacheck.Prop.forAll

private[jawn] trait AstCheckPlatform { self: AstCheck =>

// Rendering/parsing numbers on JS isn't always idempotent
property("string/charSequence parsing") = forAll { (value: JValue) =>
val s = CanonicalRenderer.render(value)
val j1 = JParser.parseFromString(s)
val cs = java.nio.CharBuffer.wrap(s.toCharArray)
val j2 = JParser.parseFromCharSequence(cs)
Prop(j1 == j2 && j1.## == j2.##)
}
}
8 changes: 0 additions & 8 deletions ast/shared/src/test/scala/jawn/AstCheck.scala
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,6 @@ class AstCheck extends Properties("AstCheck") with AstCheckPlatform {
)
}

property("string/charSequence parsing") = forAll { (value: JValue) =>
val s = CanonicalRenderer.render(value)
val j1 = JParser.parseFromString(s)
val cs = java.nio.CharBuffer.wrap(s.toCharArray)
val j2 = JParser.parseFromCharSequence(cs)
Prop(j1 == j2 && j1.## == j2.##)
}

implicit val facade: Facade[JValue] = JawnFacade

val percs = List(0.0, 0.2, 0.4, 0.8, 1.0)
Expand Down

0 comments on commit 6870485

Please sign in to comment.