Skip to content

Commit

Permalink
Match public interface to Coco's
Browse files Browse the repository at this point in the history
  • Loading branch information
G33kDude committed Sep 8, 2021
1 parent a4781ee commit 691f8df
Show file tree
Hide file tree
Showing 8 changed files with 329 additions and 323 deletions.
4 changes: 2 additions & 2 deletions Build.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ SetWorkingDir, %A_LineFile%\..\Src
c := "#include ""dumps.c""`n#include ""loads.c"""

; Pull in the AHK file
ahk := FileOpen(A_LineFile "\..\Src\cJson.ahk", "r").Read()
ahk := FileOpen(A_LineFile "\..\Src\JSON.ahk", "r").Read()

; Compile the C code and generate a standalone loader
MCL.CompilerSuffix += " -O3"
Expand Down Expand Up @@ -51,7 +51,7 @@ ahk := RegExReplace(ahk, "`a)\R", "`r`n")

; Save to the Dist folder
FileCreateDir, %A_LineFile%\..\Dist
FileOpen(A_LineFile "\..\Dist\cJson.ahk", "w").Write(ahk)
FileOpen(A_LineFile "\..\Dist\JSON.ahk", "w").Write(ahk)

; Test the build
Run, %A_AhkPath%\..\AutoHotkeyU64.exe %A_LineFile%\..\Tests\!TestDist.ahk
Expand Down
289 changes: 289 additions & 0 deletions Dist/JSON.ahk

Large diffs are not rendered by default.

283 changes: 0 additions & 283 deletions Dist/cJson.ahk

This file was deleted.

8 changes: 4 additions & 4 deletions Src/cJson.ahk → Src/JSON.ahk
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

class cJson
class JSON
{
static version := "0.3.1-git-dev"
static version := "0.4.0-git-dev"

BoolsAsInts[]
{
Expand Down Expand Up @@ -43,7 +43,7 @@ class cJson
return MCL.FromC("#include ""dumps.c""`n#include ""loads.c""")
}

Dumps(obj, pretty := 0)
Dump(obj, pretty := 0)
{
this._init()
if (!IsObject(obj))
Expand All @@ -57,7 +57,7 @@ class cJson
return StrGet(&buf, size, "UTF-16")
}

Loads(ByRef json)
Load(ByRef json)
{
this._init()

Expand Down
2 changes: 1 addition & 1 deletion Tests/!TestDev.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ SetWorkingDir, %A_LineFile%/../../Src/
#Include OutputDebug.ahk

; Include dev cJson
#Include %A_LineFile%/../../Src/cJson.ahk
#Include %A_LineFile%/../../Src/JSON.ahk

; Include test suites
#Include %A_LineFile%\..\
Expand Down
2 changes: 1 addition & 1 deletion Tests/!TestDist.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ SetBatchLines, -1
#Include OutputDebug.ahk

; Include Dist cJson
#Include %A_LineFile%/../../Dist/cJson.ahk
#Include %A_LineFile%/../../Dist/JSON.ahk

; Include test suites
#Include %A_LineFile%\..\
Expand Down
28 changes: 14 additions & 14 deletions Tests/DumpsTestSuite.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class DumpsTestSuite
{
expected = Input must be object
try
produced := cJson.Dumps(42)
produced := JSON.Dump(42)
catch e
produced := e.message
Yunit.assert(produced == expected, Format(this.message, expected, produced))
Expand All @@ -21,7 +21,7 @@ class DumpsTestSuite
{
expected = Input must be object
try
produced := cJson.Dumps("string")
produced := JSON.Dump("string")
catch e
produced := e.message
Yunit.assert(produced == expected, Format(this.message, expected, produced))
Expand All @@ -30,63 +30,63 @@ class DumpsTestSuite
Test_Object_Empty()
{
expected = []
produced := cJson.Dumps({})
produced := JSON.Dump({})
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Array_Numbers()
{
expected = [3, 2, 1]
produced := cJson.Dumps([3, 2, 1])
produced := JSON.Dump([3, 2, 1])
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Array_Strings()
{
expected = ["a", "1", ""]
produced := cJson.Dumps(["a", "1", ""])
produced := JSON.Dump(["a", "1", ""])
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Object_Numbers()
{
expected = {"key1": 1, "key2": 2}
produced := cJson.Dumps({"key2": 2, "key1": 1})
produced := JSON.Dump({"key2": 2, "key1": 1})
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Object_Strings()
{
expected = {"key1": "1", "key2": "2"}
produced := cJson.Dumps({"key2": "2", "key1": "1"})
produced := JSON.Dump({"key2": "2", "key1": "1"})
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Array_Empty()
{
expected = []
produced := cJson.Dumps([])
produced := JSON.Dump([])
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Array_Nested()
{
expected = [[1, 2], [3, [4, 5], 6], [7, 8]]
produced := cJson.Dumps([[1, 2], [3, [4, 5], 6], [7, 8]])
produced := JSON.Dump([[1, 2], [3, [4, 5], 6], [7, 8]])
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Array_Com()
{
expected = \["Unknown_Object_\d+"\]
produced := cJson.Dumps([ComObjCreate("WScript.Shell")])
produced := JSON.Dump([ComObjCreate("WScript.Shell")])
Yunit.assert(produced ~= expected, Format(this.message, expected, produced))
}

Test_Array_Specials()
{
expected = [true, false, null]
produced := cJson.Dumps([cJson.True, cJson.False, cJson.Null])
produced := JSON.Dump([JSON.True, JSON.False, JSON.Null])
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Expand All @@ -96,7 +96,7 @@ class DumpsTestSuite
expected = [0.500000, -0.750000, "0.5", 85070591730234616000000000000000000000.000000]
else
expected = [0.500000, -0.750000, "0.5", 85070591730234615865843651857942052864.000000]
produced := cJson.Dumps([1/2, -3/4, 0.5, (0xFFFFFFFFFFFFFFFF*1.0)**2])
produced := JSON.Dump([1/2, -3/4, 0.5, (0xFFFFFFFFFFFFFFFF*1.0)**2])
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Expand All @@ -108,7 +108,7 @@ class DumpsTestSuite
\uD83C\uDF69\uD83C\uDF05\uD83C\uDF33\uD83D\uDC14\uD83C\uDFE9\uD83C\uDF4E
\uD83D\uDCF5\uD83C\uDF6D\uD83C\uDF16\uD83D\uDD20\uD83C\uDF5A"]
)
produced := cJson.Dumps(["📎🐟💝🐤🔼🏡👓 🍩🌅🌳🐔🏩🍎 📵🍭🌖🔠🍚"])
produced := JSON.Dump(["📎🐟💝🐤🔼🏡👓 🍩🌅🌳🐔🏩🍎 📵🍭🌖🔠🍚"])
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Expand All @@ -126,7 +126,7 @@ class DumpsTestSuite
, 2147483648: 0 ; 32-bit -2147483648
, 9223372036854775808: 0} ; 32-bit -1

produced := cJson.Dumps(produced)
produced := JSON.Dump(produced)
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Expand Down
36 changes: 18 additions & 18 deletions Tests/LoadsTestSuite.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@ class LoadsTestSuite
{
input = "\"\\\/\b\f\n\r\t\u1234"
expected := """\/`b`f`n`r`t" Chr(0x1234)
produced := cJson.Loads(input)
produced := JSON.Load(input)
Yunit.assert(produced == expected, Format(this.message, expected, produced))
}

Test_Floats()
{
input = 1.12345
expected := 1.12345
produced := cJson.Loads(input)
produced := JSON.Load(input)
Yunit.assert(Abs(produced - expected) < 0.0005, Format(this.message, expected, produced))
}

Test_Invalid_Input_Array()
{
input = [1}
try
cJson.Loads(input)
JSON.Load(input)
catch e
pass = pass
Yunit.assert(e.message == "Failed to parse JSON (-1,0)", e.message)
Expand All @@ -39,7 +39,7 @@ class LoadsTestSuite
{
input = [trne]
try
cJson.Loads(input)
JSON.Load(input)
catch e
pass = pass
Yunit.assert(e.message == "Failed to parse JSON (-1,0)", e.message)
Expand All @@ -50,55 +50,55 @@ class LoadsTestSuite
{
expected := [1, 2, 3]
produced = [1, 2, 3]
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Test_Array_Strings()
{
expected := ["a", "b", "c"]
produced = ["a", "b", "c"]
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Test_Array_Specials()
{
; Test BoolsAsInts True (default)
expected := [1, 0, cJson.null]
expected := [1, 0, JSON.null]
produced = [true, false, null]
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))

; Test BoolsAsInts False
cJson.BoolsAsInts := False
expected := [cJson.true, cJson.false, cJson.null]
JSON.BoolsAsInts := False
expected := [JSON.true, JSON.false, JSON.null]
produced = [true, false, null]
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Test_Array_Nested()
{
expected := [[1, 2], [3, [4, 5], 6], [7, 8]]
produced = [[1, 2], [3, [4, 5], 6], [7, 8]]
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Test_Object_Numbers()
{
expected := {"key2": 2, "key1": 1}
produced = {"key2": 2, "key1": 1}
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Test_Object_Numeric_Keys()
{
input = {1: "failure"}
try
cJson.Loads(input)
JSON.Load(input)
catch e
pass = pass
Yunit.assert(e.message == "Failed to parse JSON (-1,0)", e.message)
Expand All @@ -109,23 +109,23 @@ class LoadsTestSuite
{
expected := {"key2": "2", "key1": "1"}
produced = {"key2": "2", "key1": "1"}
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Test_Object_Nested()
{
expected := {"k1": {"k1": 1, "k2": 2}, "k2": {"k1": 3, "k2": {"k1": 4, "k2": 5}, "k3": 6}, "k3": {"k1": 7, "k2": 8}}
produced = {"k1": {"k1": 1, "k2": 2}, "k2": {"k1": 3, "k2": {"k1": 4, "k2": 5}, "k3": 6}, "k3": {"k1": 7, "k2": 8}}
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Test_Data_Types()
{
expected := [1, 2147483649, 0.1, "a"]
produced = [1, 2147483649, 0.1, "a"]
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(ObjGetCapacity(produced, 1) == "", "1 decoded as string")
Yunit.assert(ObjGetCapacity(produced, 2) == "", "2147483649 decoded as string")
Yunit.assert(ObjGetCapacity(produced, 3) == "", "0.1 decoded as string")
Expand All @@ -136,7 +136,7 @@ class LoadsTestSuite
{
expected := [9223372036854775807, -9223372036854775808, {-1: -2147483648, 0: 2147483648, 1: -2147483649, "a": 2147483649}]
produced = [9223372036854775807, -9223372036854775808, {"-1": -2147483648, "0": 2147483648, "1": -2147483649, "a": 2147483649}]
produced := cJson.Loads(produced)
produced := JSON.Load(produced)
Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced))
}

Expand Down

0 comments on commit 691f8df

Please sign in to comment.