diff --git a/sources/Data/JSONArray.uc b/sources/Data/JArray.uc
similarity index 75%
rename from sources/Data/JSONArray.uc
rename to sources/Data/JArray.uc
index d0e9e71..d160b54 100644
--- a/sources/Data/JSONArray.uc
+++ b/sources/Data/JArray.uc
@@ -21,14 +21,14 @@
* You should have received a copy of the GNU General Public License
* along with Acedia. If not, see .
*/
-class JSONArray extends JSONBase;
+class JArray extends JSON;
// Data will simply be stored as an array of JSON values
-var private array data;
+var private array data;
// Return type of value stored at a given index.
// Returns `JSON_Undefined` if and only if given index is out of bounds.
-public final function JSONType GetType(int index)
+public final function JType GetTypeOf(int index)
{
if (index < 0) return JSON_Undefined;
if (index >= data.length) return JSON_Undefined;
@@ -72,27 +72,27 @@ public final function SetLength(int newLength)
// will simply return `none`.
public final function float GetNumber(int index, optional float defaultValue)
{
- if (index < 0) return defaultValue;
- if (index >= data.length) return defaultValue;
- if (data[index].type != JSON_Number) return defaultValue;
+ if (index < 0) return defaultValue;
+ if (index >= data.length) return defaultValue;
+ if (data[index].type != JSON_Number) return defaultValue;
return data[index].numberValue;
}
public final function string GetString(int index, optional string defaultValue)
{
- if (index < 0) return defaultValue;
- if (index >= data.length) return defaultValue;
- if (data[index].type != JSON_String) return defaultValue;
+ if (index < 0) return defaultValue;
+ if (index >= data.length) return defaultValue;
+ if (data[index].type != JSON_String) return defaultValue;
return data[index].stringValue;
}
public final function bool GetBoolean(int index, optional bool defaultValue)
{
- if (index < 0) return defaultValue;
- if (index >= data.length) return defaultValue;
- if (data[index].type != JSON_Boolean) return defaultValue;
+ if (index < 0) return defaultValue;
+ if (index >= data.length) return defaultValue;
+ if (data[index].type != JSON_Boolean) return defaultValue;
return data[index].booleanValue;
}
@@ -105,22 +105,22 @@ public final function bool IsNull(int index)
return (data[index].type == JSON_Null);
}
-public final function JSONArray GetArray(int index)
+public final function JArray GetArray(int index)
{
- if (index < 0) return none;
- if (index >= data.length) return none;
- if (data[index].type != JSON_Array) return none;
+ if (index < 0) return none;
+ if (index >= data.length) return none;
+ if (data[index].type != JSON_Array) return none;
- return JSONArray(data[index].complexValue);
+ return JArray(data[index].complexValue);
}
-public final function JSONObject GetObject(int index)
+public final function JObject GetObject(int index)
{
- if (index < 0) return none;
- if (index >= data.length) return none;
- if (data[index].type != JSON_Object) return none;
+ if (index < 0) return none;
+ if (index >= data.length) return none;
+ if (data[index].type != JSON_Object) return none;
- return JSONObject(data[index].complexValue);
+ return JObject(data[index].complexValue);
}
// Following functions provide simple setters for boolean, string, number
@@ -132,14 +132,14 @@ public final function JSONObject GetObject(int index)
// `false` (nothing will be done in this case).
// They return object itself, allowing user to chain calls like this:
// `array.SetNumber("num1", 1).SetNumber("num2", 2);`.
-public final function JSONArray SetNumber
+public final function JArray SetNumber
(
int index,
float value,
optional bool preventExpansion
)
{
- local JSONStorageValue newStorageValue;
+ local JStorageAtom newStorageValue;
if (index < 0) return self;
if (index >= data.length)
@@ -159,14 +159,14 @@ public final function JSONArray SetNumber
return self;
}
-public final function JSONArray SetString
+public final function JArray SetString
(
int index,
string value,
optional bool preventExpansion
)
{
- local JSONStorageValue newStorageValue;
+ local JStorageAtom newStorageValue;
if (index < 0) return self;
if (index >= data.length)
@@ -186,14 +186,14 @@ public final function JSONArray SetString
return self;
}
-public final function JSONArray SetBoolean
+public final function JArray SetBoolean
(
int index,
bool value,
optional bool preventExpansion
)
{
- local JSONStorageValue newStorageValue;
+ local JStorageAtom newStorageValue;
if (index < 0) return self;
if (index >= data.length)
@@ -213,13 +213,13 @@ public final function JSONArray SetBoolean
return self;
}
-public final function JSONArray SetNull
+public final function JArray SetNull
(
int index,
optional bool preventExpansion
)
{
- local JSONStorageValue newStorageValue;
+ local JStorageAtom newStorageValue;
if (index < 0) return self;
if (index >= data.length)
@@ -247,13 +247,13 @@ public final function JSONArray SetNull
// `false` (nothing will be done in this case).
// They return object itself, allowing user to chain calls like this:
// `array.CreateObject("sub object").CreateArray("sub array");`.
-public final function JSONArray CreateArray
+public final function JArray CreateArray
(
int index,
optional bool preventExpansion
)
{
- local JSONStorageValue newStorageValue;
+ local JStorageAtom newStorageValue;
if (index < 0) return self;
if (index >= data.length)
@@ -268,18 +268,18 @@ public final function JSONArray CreateArray
}
}
newStorageValue.type = JSON_Array;
- newStorageValue.complexValue = new class'JSONArray';
+ newStorageValue.complexValue = _.json.newArray();
data[index] = newStorageValue;
return self;
}
-public final function JSONArray CreateObject
+public final function JArray CreateObject
(
int index,
optional bool preventExpansion
)
{
- local JSONStorageValue newStorageValue;
+ local JStorageAtom newStorageValue;
if (index < 0) return self;
if (index >= data.length)
@@ -294,51 +294,51 @@ public final function JSONArray CreateObject
}
}
newStorageValue.type = JSON_Object;
- newStorageValue.complexValue = new class'JSONObject';
+ newStorageValue.complexValue = _.json.newObject();
data[index] = newStorageValue;
return self;
}
// Wrappers for setter functions that don't take index or
// `preventExpansion` parameters and add/create value at the end of the array.
-public final function JSONArray AddNumber(float value)
+public final function JArray AddNumber(float value)
{
return SetNumber(data.length, value);
}
-public final function JSONArray AddString(string value)
+public final function JArray AddString(string value)
{
return SetString(data.length, value);
}
-public final function JSONArray AddBoolean(bool value)
+public final function JArray AddBoolean(bool value)
{
return SetBoolean(data.length, value);
}
-public final function JSONArray AddNull()
+public final function JArray AddNull()
{
return SetNull(data.length);
}
-public final function JSONArray AddArray()
+public final function JArray AddArray()
{
return CreateArray(data.length);
}
-public final function JSONArray AddObject()
+public final function JArray AddObject()
{
return CreateObject(data.length);
}
-// Removes up to `amount` of values, starting from a given index.
-// If `index` falls outside array boundaries - nothing will be done.
+// Removes up to `amount` (minimum of `1`) of values, starting from
+// a given index.
+// If `index` falls outside array boundaries - nothing will be done.
// Returns `true` if value was actually removed and `false` if it didn't exist.
public final function bool RemoveValue(int index, optional int amount)
{
if (index < 0) return false;
if (index >= data.length) return false;
- if (amount < 1) return false;
amount = Max(amount, 1);
amount = Min(amount, data.length - index);
diff --git a/sources/Data/JObject.uc b/sources/Data/JObject.uc
new file mode 100644
index 0000000..9d81cf8
--- /dev/null
+++ b/sources/Data/JObject.uc
@@ -0,0 +1,265 @@
+/**
+ * This class implements JSON object storage capabilities.
+ * Whenever one wants to store JSON data, they need to define such object.
+ * It stores name-value pairs, where names are strings and values can be:
+ * ~ Boolean, string, null or number (float in this implementation) data;
+ * ~ Other JSON objects;
+ * ~ JSON Arrays (see `JArray` class).
+ *
+ * This implementation provides getters and setters for boolean, string,
+ * null or number types that allow to freely set and fetch their values
+ * by name.
+ * JSON objects and arrays can be fetched by getters, but you cannot
+ * add existing object or array to another object. Instead one has to create
+ * a new, empty object with a certain name and then fill it with data.
+ * This allows to avoid loop situations, where object is contained in itself.
+ * Functions to remove existing values are also provided and are applicable
+ * to all variable types.
+ * Setters can also be used to overwrite any value by a different value,
+ * even of a different type.
+ * Copyright 2020 Anton Tarasenko
+ *------------------------------------------------------------------------------
+ * This file is part of Acedia.
+ *
+ * Acedia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Acedia is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Acedia. If not, see .
+ */
+class JObject extends JSON;
+
+// We will store all our properties as a simple array of name-value pairs.
+struct JProperty
+{
+ var string name;
+ var JStorageAtom value;
+};
+var private array properties;
+
+// Returns index of name-value pair in `properties` for a given name.
+// Returns `-1` if such a pair does not exist.
+private final function int GetPropertyIndex(string name)
+{
+ local int i;
+ for (i = 0; i < properties.length; i += 1)
+ {
+ if (name == properties[i].name)
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+
+// Returns `JType` of a variable with a given name in our properties.
+// This function can be used to check if certain variable exists
+// in this object, since if such variable does not exist -
+// function will return `JSON_Undefined`.
+public final function JType GetTypeOf(string name)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return JSON_Undefined;
+
+ return properties[index].value.type;
+}
+
+// Following functions are getters for various types of variables.
+// Getter for null value simply checks if it's null
+// and returns true/false as a result.
+// Getters for simple types (number, string, boolean) can have optional
+// default value specified, that will be returned if requested variable
+// doesn't exist or has a different type.
+// Getters for object and array types don't take default values and
+// will simply return `none`.
+public final function float GetNumber(string name, optional float defaultValue)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return defaultValue;
+ if (properties[index].value.type != JSON_Number) return defaultValue;
+
+ return properties[index].value.numberValue;
+}
+
+public final function string GetString
+(
+ string name,
+ optional string defaultValue
+)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return defaultValue;
+ if (properties[index].value.type != JSON_String) return defaultValue;
+
+ return properties[index].value.stringValue;
+}
+
+public final function bool GetBoolean(string name, optional bool defaultValue)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return defaultValue;
+ if (properties[index].value.type != JSON_Boolean) return defaultValue;
+
+ return properties[index].value.booleanValue;
+}
+
+public final function bool IsNull(string name)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return false;
+ if (properties[index].value.type != JSON_Null) return false;
+
+ return (properties[index].value.type == JSON_Null);
+}
+
+public final function JArray GetArray(string name)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return none;
+ if (properties[index].value.type != JSON_Array) return none;
+
+ return JArray(properties[index].value.complexValue);
+}
+
+public final function JObject GetObject(string name)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return none;
+ if (properties[index].value.type != JSON_Object) return none;
+
+ return JObject(properties[index].value.complexValue);
+}
+
+// Following functions provide simple setters for boolean, string, number
+// and null values.
+// They return object itself, allowing user to chain calls like this:
+// `object.SetNumber("num1", 1).SetNumber("num2", 2);`.
+public final function JObject SetNumber(string name, float value)
+{
+ local int index;
+ local JProperty newProperty;
+ index = GetPropertyIndex(name);
+ if (index < 0)
+ {
+ index = properties.length;
+ }
+
+ newProperty.name = name;
+ newProperty.value.type = JSON_Number;
+ newProperty.value.numberValue = value;
+ properties[index] = newProperty;
+ return self;
+}
+
+public final function JObject SetString(string name, string value)
+{
+ local int index;
+ local JProperty newProperty;
+ index = GetPropertyIndex(name);
+ if (index < 0)
+ {
+ index = properties.length;
+ }
+ newProperty.name = name;
+ newProperty.value.type = JSON_String;
+ newProperty.value.stringValue = value;
+ properties[index] = newProperty;
+ return self;
+}
+
+public final function JObject SetBoolean(string name, bool value)
+{
+ local int index;
+ local JProperty newProperty;
+ index = GetPropertyIndex(name);
+ if (index < 0)
+ {
+ index = properties.length;
+ }
+ newProperty.name = name;
+ newProperty.value.type = JSON_Boolean;
+ newProperty.value.booleanValue = value;
+ properties[index] = newProperty;
+ return self;
+}
+
+public final function JObject SetNull(string name)
+{
+ local int index;
+ local JProperty newProperty;
+ index = GetPropertyIndex(name);
+ if (index < 0)
+ {
+ index = properties.length;
+ }
+ newProperty.name = name;
+ newProperty.value.type = JSON_Null;
+ properties[index] = newProperty;
+ return self;
+}
+
+// JSON array and object types don't have setters, but instead have
+// functions to create a new, empty array/object under a certain name.
+// They return object itself, allowing user to chain calls like this:
+// `object.CreateObject("folded object").CreateArray("names list");`.
+public final function JObject CreateArray(string name)
+{
+ local int index;
+ local JProperty newProperty;
+ index = GetPropertyIndex(name);
+ if (index < 0)
+ {
+ index = properties.length;
+ }
+ newProperty.name = name;
+ newProperty.value.type = JSON_Array;
+ newProperty.value.complexValue = _.json.newArray();
+ properties[index] = newProperty;
+ return self;
+}
+
+public final function JObject CreateObject(string name)
+{
+ local int index;
+ local JProperty newProperty;
+ index = GetPropertyIndex(name);
+ if (index < 0)
+ {
+ index = properties.length;
+ }
+ newProperty.name = name;
+ newProperty.value.type = JSON_Object;
+ newProperty.value.complexValue = _.json.newObject();
+ properties[index] = newProperty;
+ return self;
+}
+
+// Removes values with a given name.
+// Returns `true` if value was actually removed and `false` if it didn't exist.
+public final function bool RemoveValue(string name)
+{
+ local int index;
+ index = GetPropertyIndex(name);
+ if (index < 0) return false;
+
+ properties.Remove(index, 1);
+ return true;
+}
+
+defaultproperties
+{
+}
\ No newline at end of file
diff --git a/sources/Data/JSONBase.uc b/sources/Data/JSON.uc
similarity index 77%
rename from sources/Data/JSONBase.uc
rename to sources/Data/JSON.uc
index 60e6196..8a94157 100644
--- a/sources/Data/JSONBase.uc
+++ b/sources/Data/JSON.uc
@@ -28,10 +28,11 @@
* You should have received a copy of the GNU General Public License
* along with Acedia. If not, see .
*/
-class JSONBase extends Object;
+class JSON extends AcediaActor
+ abstract;
// Enumeration for possible types of JSON values.
-enum JSONType
+enum JType
{
// Technical type, used to indicate that requested value is missing.
// Undefined values are not part of JSON format.
@@ -53,18 +54,31 @@ enum JSONType
};
// Stores a single JSON value
-struct JSONStorageValue
+struct JStorageAtom
{
// What type is stored exactly?
// Depending on that, uses one of the other fields as a storage.
- var public JSONType type;
+ var protected JType type;
var protected float numberValue;
var protected string stringValue;
var protected bool booleanValue;
// Used for storing both JSON objects and arrays.
- var protected JSONBase complexValue;
+ var protected JSON complexValue;
};
+// TODO: Rewrite JSON object to use more efficient storage data structures
+// that will support subtypes:
+// ~ Number: byte, int, float
+// ~ String: string, class
+// (maybe move to auto generated code?).
+// TODO: Add cleanup queue to efficiently and without crashes clean up
+// removed objects.
+// TODO: Add `JValue` - a reference type for number / string / boolean / null
+// TODO: Add accessors for last values.
+// TODO: Add path-getters.
+// TODO: Add iterators.
+// TODO: Add parsing/printing.
+// TODO: Add functions for deep copy.
defaultproperties
{
}
\ No newline at end of file
diff --git a/sources/Data/JSONAPI.uc b/sources/Data/JSONAPI.uc
new file mode 100644
index 0000000..12d4c9d
--- /dev/null
+++ b/sources/Data/JSONAPI.uc
@@ -0,0 +1,41 @@
+/**
+ * Singleton is an auxiliary class, meant to be used as a base for others,
+ * that allows for only one instance of it to exist.
+ * To make sure your child class properly works, either don't overload
+ * 'PreBeginPlay' or make sure to call it's parent's version.
+ * Copyright 2019 Anton Tarasenko
+ *------------------------------------------------------------------------------
+ * This file is part of Acedia.
+ *
+ * Acedia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Acedia is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Acedia. If not, see .
+ */
+class JSONAPI extends Singleton;
+
+public function JObject newObject()
+{
+ local JObject newObject;
+ newObject = Spawn(class'JObject');
+ return newObject;
+}
+
+public function JArray newArray()
+{
+ local JArray newArray;
+ newArray = Spawn(class'JArray');
+ return newArray;
+}
+
+defaultproperties
+{
+}
\ No newline at end of file
diff --git a/sources/Data/JSONObject.uc b/sources/Data/JSONObject.uc
deleted file mode 100644
index 6e1667e..0000000
--- a/sources/Data/JSONObject.uc
+++ /dev/null
@@ -1,272 +0,0 @@
-/**
- * This class implements JSON object storage capabilities.
- * Whenever one wants to store JSON data, they need to define such object.
- * It stores name-value pairs, where names are strings and values can be:
- * ~ Boolean, string, null or number (float in this implementation) data;
- * ~ Other JSON objects;
- * ~ JSON Arrays (see `JSONArray` class).
- *
- * This implementation provides getters and setters for boolean, string,
- * null or number types that allow to freely set and fetch their values
- * by name.
- * JSON objects and arrays can be fetched by getters, but you cannot
- * add existing object or array to another object. Instead one has to create
- * a new, empty object with a certain name and then fill it with data.
- * This allows to avoid loop situations, where object is contained in itself.
- * Functions to remove existing values are also provided and are applicable
- * to all variable types.
- * Setters can also be used to overwrite any value by a different value,
- * even of a different type.
- * Copyright 2020 Anton Tarasenko
- *------------------------------------------------------------------------------
- * This file is part of Acedia.
- *
- * Acedia is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License, or
- * (at your option) any later version.
- *
- * Acedia is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Acedia. If not, see .
- */
-class JSONObject extends JSONBase;
-
-// We will store all our data as a simple array of key(name)-value pairs.
-struct JSONKeyValuePair
-{
- var string key;
- var JSONStorageValue value;
-};
-var private array data;
-
-// Returns index of key-value pair in `data` with a given key.
-// Returns `-1` if such a pair does not exist in `data`.
-private final function int GetIndex(string key)
-{
- local int i;
- for (i = 0; i < data.length; i += 1)
- {
- if (key == data[i].key)
- {
- return i;
- }
- }
- return -1;
-}
-
-// Returns `JSONType` of a variable with a given key in our data.
-// This function can be used to check if certain variable exists
-// in this object, since if such variable does not exist -
-// function will return `JSON_Undefined`.
-public final function JSONType GetType(string key)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return JSON_Undefined;
-
- return data[index].value.type;
-}
-
-// Following functions are getters for various types of variables.
-// Getter for null value simply checks if it's null
-// and returns true/false as a result.
-// Getters for simple types (number, string, boolean) can have optional
-// default value specified, that will be returned if requested variable
-// doesn't exist or has a different type.
-// Getters for object and array types don't take default values and
-// will simply return `none`.
-public final function float GetNumber(string key, optional float defaultValue)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return defaultValue;
- if (data[index].value.type != JSON_Number) return defaultValue;
-
- return data[index].value.numberValue;
-}
-
-public final function string GetString(string key, optional string defaultValue)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return defaultValue;
- if (data[index].value.type != JSON_String) return defaultValue;
-
- return data[index].value.stringValue;
-}
-
-public final function bool GetBoolean(string key, optional bool defaultValue)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return defaultValue;
- if (data[index].value.type != JSON_Boolean) return defaultValue;
-
- return data[index].value.booleanValue;
-}
-
-public final function bool IsNull(string key)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return false;
- if (data[index].value.type != JSON_Null) return false;
-
- return (data[index].value.type == JSON_Null);
-}
-
-public final function JSONArray GetArray(string key)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return none;
- if (data[index].value.type != JSON_Array) return none;
-
- return JSONArray(data[index].value.complexValue);
-}
-
-public final function JSONObject GetObject(string key)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return none;
- if (data[index].value.type != JSON_Object) return none;
-
- return JSONObject(data[index].value.complexValue);
-}
-
-// Following functions provide simple setters for boolean, string, number
-// and null values.
-// They return object itself, allowing user to chain calls like this:
-// `object.SetNumber("num1", 1).SetNumber("num2", 2);`.
-public final function JSONObject SetNumber(string key, float value)
-{
- local int index;
- local JSONKeyValuePair newKeyValuePair;
- local JSONStorageValue newStorageValue;
- index = GetIndex(key);
- if (index < 0)
- {
- index = data.length;
- }
- newStorageValue.type = JSON_Number;
- newStorageValue.numberValue = value;
- newKeyValuePair.key = key;
- newKeyValuePair.value = newStorageValue;
- data[index] = newKeyValuePair;
- return self;
-}
-
-public final function JSONObject SetString(string key, string value)
-{
- local int index;
- local JSONKeyValuePair newKeyValuePair;
- local JSONStorageValue newStorageValue;
- index = GetIndex(key);
- if (index < 0)
- {
- index = data.length;
- }
- newStorageValue.type = JSON_String;
- newStorageValue.stringValue = value;
- newKeyValuePair.key = key;
- newKeyValuePair.value = newStorageValue;
- data[index] = newKeyValuePair;
- return self;
-}
-
-public final function JSONObject SetBoolean(string key, bool value)
-{
- local int index;
- local JSONKeyValuePair newKeyValuePair;
- local JSONStorageValue newStorageValue;
- index = GetIndex(key);
- if (index < 0)
- {
- index = data.length;
- }
- newStorageValue.type = JSON_Boolean;
- newStorageValue.booleanValue = value;
- newKeyValuePair.key = key;
- newKeyValuePair.value = newStorageValue;
- data[index] = newKeyValuePair;
- return self;
-}
-
-public final function JSONObject SetNull(string key)
-{
- local int index;
- local JSONKeyValuePair newKeyValuePair;
- local JSONStorageValue newStorageValue;
- index = GetIndex(key);
- if (index < 0)
- {
- index = data.length;
- }
- newStorageValue.type = JSON_Null;
- newKeyValuePair.key = key;
- newKeyValuePair.value = newStorageValue;
- data[index] = newKeyValuePair;
- return self;
-}
-
-// JSON array and object types don't have setters, but instead have
-// functions to create a new, empty array/object under a certain name.
-// They return object itself, allowing user to chain calls like this:
-// `object.CreateObject("folded object").CreateArray("names list");`.
-public final function JSONObject CreateArray(string key)
-{
- local int index;
- local JSONKeyValuePair newKeyValuePair;
- local JSONStorageValue newStorageValue;
- index = GetIndex(key);
- if (index < 0)
- {
- index = data.length;
- }
- newStorageValue.type = JSON_Array;
- newStorageValue.complexValue = new class'JSONArray';
- newKeyValuePair.key = key;
- newKeyValuePair.value = newStorageValue;
- data[index] = newKeyValuePair;
- return self;
-}
-
-public final function JSONObject CreateObject(string key)
-{
- local int index;
- local JSONKeyValuePair newKeyValuePair;
- local JSONStorageValue newStorageValue;
- index = GetIndex(key);
- if (index < 0)
- {
- index = data.length;
- }
- newStorageValue.type = JSON_Object;
- newStorageValue.complexValue = new class'JSONObject';
- newKeyValuePair.key = key;
- newKeyValuePair.value = newStorageValue;
- data[index] = newKeyValuePair;
- return self;
-}
-
-// Removes values with a given name.
-// Returns `true` if value was actually removed and `false` if it didn't exist.
-public final function bool RemoveValue(string key)
-{
- local int index;
- index = GetIndex(key);
- if (index < 0) return false;
-
- data.Remove(index, 1);
- return true;
-}
-
-defaultproperties
-{
-}
\ No newline at end of file
diff --git a/sources/Data/TEST_JSON.uc b/sources/Data/TEST_JSON.uc
index 64da167..f9801c4 100644
--- a/sources/Data/TEST_JSON.uc
+++ b/sources/Data/TEST_JSON.uc
@@ -1,6 +1,6 @@
/**
* Set of tests for JSON data storage, implemented via
- * `JSONObject` and `JSONArray`.
+ * `JObject` and `JArray`.
* Copyright 2020 Anton Tarasenko
*------------------------------------------------------------------------------
* This file is part of Acedia.
@@ -23,8 +23,8 @@ class TEST_JSON extends TestCase
protected static function TESTS()
{
- local JSONObject jsonData;
- jsonData = new class'JSONObject';
+ local JObject jsonData;
+ jsonData = _().json.newObject();
Test_ObjectGetSetRemove();
Test_ArrayGetSetRemove();
}
@@ -56,14 +56,15 @@ protected static function Test_ArrayGetSetRemove()
protected static function SubTest_Undefined()
{
- local JSONObject testJSON;
- testJSON = new class'JSONObject';
- Context("Testing how `JSONObject` handles undefined values");
+ local JObject testJSON;
+ testJSON = _().json.newObject();
+
+ Context("Testing how `JObject` handles undefined values");
Issue("Undefined variable doesn't have proper type.");
- TEST_ExpectTrue(testJSON.GetType("some_var") == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_var") == JSON_Undefined);
- Issue("There is a variable in an empty object after `GetType` call.");
- TEST_ExpectTrue(testJSON.GetType("some_var") == JSON_Undefined);
+ Issue("There is a variable in an empty object after `GetTypeOf` call.");
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_var") == JSON_Undefined);
Issue("Getters don't return default values for undefined variables.");
TEST_ExpectTrue(testJSON.GetNumber("some_var", 0) == 0);
@@ -75,14 +76,14 @@ protected static function SubTest_Undefined()
protected static function SubTest_BooleanGetSetRemove()
{
- local JSONObject testJSON;
- testJSON = new class'JSONObject';
+ local JObject testJSON;
+ testJSON = _().json.newObject();
testJSON.SetBoolean("some_boolean", true);
- Context("Testing `JSONObject`'s get/set/remove functions for" @
+ Context("Testing `JObject`'s get/set/remove functions for" @
"boolean variables");
Issue("Boolean type isn't properly set by `SetBoolean`");
- TEST_ExpectTrue(testJSON.GetType("some_boolean") == JSON_Boolean);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_boolean") == JSON_Boolean);
Issue("Variable value is incorrectly assigned by `SetBoolean`");
TEST_ExpectTrue(testJSON.GetBoolean("some_boolean") == true);
@@ -97,7 +98,7 @@ protected static function SubTest_BooleanGetSetRemove()
Issue("Boolean variable isn't being properly removed");
testJSON.RemoveValue("some_boolean");
- TEST_ExpectTrue(testJSON.GetType("some_boolean") == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_boolean") == JSON_Undefined);
Issue( "Getters don't return default value for missing key that" @
"previously stored boolean value, that got removed");
@@ -106,14 +107,14 @@ protected static function SubTest_BooleanGetSetRemove()
protected static function SubTest_StringGetSetRemove()
{
- local JSONObject testJSON;
- testJSON = new class'JSONObject';
+ local JObject testJSON;
+ testJSON = _().json.newObject();
testJSON.SetString("some_string", "first string");
- Context("Testing `JSONObject`'s get/set/remove functions for" @
+ Context("Testing `JObject`'s get/set/remove functions for" @
"string variables");
Issue("String type isn't properly set by `SetString`");
- TEST_ExpectTrue(testJSON.GetType("some_string") == JSON_String);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_string") == JSON_String);
Issue("Value is incorrectly assigned by `SetString`");
TEST_ExpectTrue(testJSON.GetString("some_string") == "first string");
@@ -133,7 +134,7 @@ protected static function SubTest_StringGetSetRemove()
Issue("String variable isn't being properly removed");
testJSON.RemoveValue("some_string");
- TEST_ExpectTrue(testJSON.GetType("some_string") == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_string") == JSON_Undefined);
Issue( "Getters don't return default value for missing key that" @
"previously stored string value, but got removed");
@@ -142,14 +143,14 @@ protected static function SubTest_StringGetSetRemove()
protected static function SubTest_NumberGetSetRemove()
{
- local JSONObject testJSON;
- testJSON = new class'JSONObject';
+ local JObject testJSON;
+ testJSON = _().json.newObject();
testJSON.SetNumber("some_number", 3.5);
- Context("Testing `JSONObject`'s get/set/remove functions for" @
+ Context("Testing `JObject`'s get/set/remove functions for" @
"number variables");
Issue("Number type isn't properly set by `SetNumber`");
- TEST_ExpectTrue(testJSON.GetType("some_number") == JSON_Number);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_number") == JSON_Number);
Issue("Value is incorrectly assigned by `SetNumber`");
TEST_ExpectTrue(testJSON.GetNumber("some_number") == 3.5);
@@ -168,7 +169,7 @@ protected static function SubTest_NumberGetSetRemove()
Issue("Number type isn't being properly removed");
testJSON.RemoveValue("some_number");
- TEST_ExpectTrue(testJSON.GetType("some_number") == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_number") == JSON_Undefined);
Issue( "Getters don't return default value for missing key that" @
"previously stored number value, that got removed");
@@ -177,10 +178,10 @@ protected static function SubTest_NumberGetSetRemove()
protected static function SubTest_NullGetSetRemove()
{
- local JSONObject testJSON;
- testJSON = new class'JSONObject';
+ local JObject testJSON;
+ testJSON = _().json.newObject();
- Context("Testing `JSONObject`'s get/set/remove functions for" @
+ Context("Testing `JObject`'s get/set/remove functions for" @
"null values");
Issue("Undefined variable is incorrectly considered `null`");
TEST_ExpectFalse(testJSON.IsNull("some_var"));
@@ -202,35 +203,35 @@ protected static function SubTest_NullGetSetRemove()
TEST_ExpectTrue(testJSON.IsNull("some_var"));
Issue("Null type isn't properly set by `SetNumber`");
- TEST_ExpectTrue(testJSON.GetType("some_var") == JSON_Null);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_var") == JSON_Null);
Issue("Null value isn't being properly removed.");
testJSON.RemoveValue("some_var");
- TEST_ExpectTrue(testJSON.GetType("some_var") == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf("some_var") == JSON_Undefined);
}
protected static function SubTest_MultipleVariablesGetSet()
{
local int i;
local bool correctValue, allValuesCorrect;
- local JSONObject testJSON;
- testJSON = new class'JSONObject';
- Context("Testing how `JSONObject` handles addition, change and removal" @
+ local JObject testJSON;
+ testJSON = _().json.newObject();
+ Context("Testing how `JObject` handles addition, change and removal" @
"of relatively large (hundreds) number of variables");
- for (i = 0;i < 2000; i += 1)
+ for (i = 0; i < 2000; i += 1)
{
testJSON.SetNumber("num" $ string(i), 4 * i*i - 2.6 * i + 0.75);
}
- for (i = 0;i < 500; i += 1)
+ for (i = 0; i < 500; i += 1)
{
testJSON.SetString("num" $ string(i), "str" $ string(Sin(i)));
}
- for (i = 1500;i < 2000; i += 1)
+ for (i = 1500; i < 2000; i += 1)
{
testJSON.RemoveValue("num" $ string(i));
}
allValuesCorrect = true;
- for (i = 0;i < 200; i += 1)
+ for (i = 0; i < 200; i += 1)
{
if (i < 500)
{
@@ -246,7 +247,7 @@ protected static function SubTest_MultipleVariablesGetSet()
}
else
{
- correctValue = ( testJSON.GetType("num" $ string(i))
+ correctValue = ( testJSON.GetTypeOf("num" $ string(i))
== JSON_Undefined);
Issue("Variables aren't removed");
}
@@ -261,9 +262,9 @@ protected static function SubTest_MultipleVariablesGetSet()
protected static function SubTest_Object()
{
- local JSONObject testObject;
+ local JObject testObject;
Context("Testing setters and getters for folded objects");
- testObject = new class'JSONObject';
+ testObject = _().json.newObject();
testObject.CreateObject("folded");
testObject.GetObject("folded").CreateObject("folded");
testObject.SetString("out", "string outside");
@@ -285,17 +286,17 @@ protected static function SubTest_Object()
protected static function SubTest_ArrayUndefined()
{
- local JSONArray testJSON;
- testJSON = new class'JSONArray';
- Context("Testing how `JSONArray` handles undefined values");
+ local JArray testJSON;
+ testJSON = _().json.newArray();
+ Context("Testing how `JArray` handles undefined values");
Issue("Undefined variable doesn't have `JSON_Undefined` type");
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Undefined);
- Issue("There is a variable in an empty object after `GetType` call");
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Undefined);
+ Issue("There is a variable in an empty object after `GetTypeOf` call");
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Undefined);
Issue("Negative index refers to a defined value");
- TEST_ExpectTrue(testJSON.GetType(-1) == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf(-1) == JSON_Undefined);
Issue("Getters don't return default values for undefined variables");
TEST_ExpectTrue(testJSON.GetNumber(0, 0) == 0);
@@ -313,14 +314,14 @@ protected static function SubTest_ArrayUndefined()
protected static function SubTest_ArrayBooleanGetSetRemove()
{
- local JSONArray testJSON;
- testJSON = new class'JSONArray';
+ local JArray testJSON;
+ testJSON = _().json.newArray();
testJSON.SetBoolean(0, true);
- Context("Testing `JSONArray`'s get/set/remove functions for" @
+ Context("Testing `JArray`'s get/set/remove functions for" @
"boolean variables");
Issue("Boolean type isn't properly set by `SetBoolean`");
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Boolean);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Boolean);
Issue("Value is incorrectly assigned by `SetBoolean`");
TEST_ExpectTrue(testJSON.GetBoolean(0) == true);
@@ -335,7 +336,7 @@ protected static function SubTest_ArrayBooleanGetSetRemove()
Issue("Boolean variable isn't being properly removed");
testJSON.RemoveValue(0);
- TEST_ExpectTrue( testJSON.GetType(0) == JSON_Undefined);
+ TEST_ExpectTrue( testJSON.GetTypeOf(0) == JSON_Undefined);
Issue( "Getters don't return default value for missing key that" @
"previously stored boolean value, but got removed");
@@ -344,14 +345,14 @@ protected static function SubTest_ArrayBooleanGetSetRemove()
protected static function SubTest_ArrayStringGetSetRemove()
{
- local JSONArray testJSON;
- testJSON = new class'JSONArray';
+ local JArray testJSON;
+ testJSON = _().json.newArray();
testJSON.SetString(0, "first string");
- Context("Testing `JSONArray`'s get/set/remove functions for" @
+ Context("Testing `JArray`'s get/set/remove functions for" @
"string variables");
Issue("String type isn't properly set by `SetString`");
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_String);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_String);
Issue("Value is incorrectly assigned by `SetString`");
TEST_ExpectTrue(testJSON.GetString(0) == "first string");
@@ -370,7 +371,7 @@ protected static function SubTest_ArrayStringGetSetRemove()
Issue("Boolean variable isn't being properly removed");
testJSON.RemoveValue(0);
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Undefined);
Issue( "Getters don't return default value for missing key that" @
"previously stored string value, but got removed");
@@ -379,14 +380,14 @@ protected static function SubTest_ArrayStringGetSetRemove()
protected static function SubTest_ArrayNumberGetSetRemove()
{
- local JSONArray testJSON;
- testJSON = new class'JSONArray';
+ local JArray testJSON;
+ testJSON = _().json.newArray();
testJSON.SetNumber(0, 3.5);
- Context("Testing `JSONArray`'s get/set/remove functions for" @
+ Context("Testing `JArray`'s get/set/remove functions for" @
"number variables");
Issue("Number type isn't properly set by `SetNumber`");
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Number);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Number);
Issue("Value is incorrectly assigned by `SetNumber`");
TEST_ExpectTrue(testJSON.GetNumber(0) == 3.5);
@@ -405,7 +406,7 @@ protected static function SubTest_ArrayNumberGetSetRemove()
Issue("Number type isn't being properly removed");
testJSON.RemoveValue(0);
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Undefined);
Issue( "Getters don't return default value for missing key that" @
"previously stored number value, but got removed");
@@ -414,10 +415,10 @@ protected static function SubTest_ArrayNumberGetSetRemove()
protected static function SubTest_ArrayNullGetSetRemove()
{
- local JSONArray testJSON;
- testJSON = new class'JSONArray';
+ local JArray testJSON;
+ testJSON = _().json.newArray();
- Context("Testing `JSONArray`'s get/set/remove functions for" @
+ Context("Testing `JArray`'s get/set/remove functions for" @
"null values");
Issue("Undefined variable is incorrectly considered `null`");
@@ -442,19 +443,19 @@ protected static function SubTest_ArrayNullGetSetRemove()
TEST_ExpectTrue(testJSON.IsNull(0));
Issue("Null type isn't properly set by `SetNumber`");
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Null);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Null);
Issue("Null value isn't being properly removed");
testJSON.RemoveValue(0);
- TEST_ExpectTrue(testJSON.GetType(0) == JSON_Undefined);
+ TEST_ExpectTrue(testJSON.GetTypeOf(0) == JSON_Undefined);
}
// Returns following array:
// [10.0, "test string", "another string", true, 0.0, {"var": 7.0}]
-protected static function JSONArray Prepare_Array()
+protected static function JArray Prepare_Array()
{
- local JSONArray testArray;
- testArray = new class'JSONArray';
+ local JArray testArray;
+ testArray = _().json.newArray();
testArray.AddNumber(10.0f)
.AddString("test string")
.AddString("another string")
@@ -467,10 +468,10 @@ protected static function JSONArray Prepare_Array()
protected static function SubTest_ArrayMultipleVariablesStorage()
{
- local JSONArray testArray;
+ local JArray testArray;
testArray = Prepare_Array();
- Context("Testing how `JSONArray` handles adding and" @
+ Context("Testing how `JArray` handles adding and" @
"changing several variables");
Issue("Stored values are compromised.");
TEST_ExpectTrue(testArray.GetNumber(0) == 10.0f);
@@ -490,18 +491,18 @@ protected static function SubTest_ArrayMultipleVariablesStorage()
TEST_ExpectTrue(testArray.GetBoolean(3, false) == false);
Issue("Type of the variable is incorrectly changed.");
- TEST_ExpectTrue(testArray.GetType(3) == JSON_String);
+ TEST_ExpectTrue(testArray.GetTypeOf(3) == JSON_String);
}
protected static function SubTest_ArrayMultipleVariablesRemoval()
{
- local JSONArray testArray;
+ local JArray testArray;
testArray = Prepare_Array();
// Test removing variables
// After `Prepare_Array`, our array should be:
// [10.0, "test string", "another string", true, 0.0, {"var": 7.0}]
- Context("Testing how `JSONArray` handles adding and" @
+ Context("Testing how `JArray` handles adding and" @
"removing several variables");
Issue("Values are incorrectly removed");
testArray.RemoveValue(2);
@@ -511,7 +512,7 @@ protected static function SubTest_ArrayMultipleVariablesRemoval()
TEST_ExpectTrue(testArray.GetString(1) == "test string");
TEST_ExpectTrue(testArray.GetBoolean(2) == true);
TEST_ExpectTrue(testArray.GetNumber(3) == 0.0f);
- TEST_ExpectTrue(testArray.GetType(4) == JSON_Object);
+ TEST_ExpectTrue(testArray.GetTypeOf(4) == JSON_Object);
Issue("First element incorrectly removed");
testArray.RemoveValue(0);
@@ -519,7 +520,7 @@ protected static function SubTest_ArrayMultipleVariablesRemoval()
TEST_ExpectTrue(testArray.GetString(0) == "test string");
TEST_ExpectTrue(testArray.GetBoolean(1) == true);
TEST_ExpectTrue(testArray.GetNumber(2) == 0.0f);
- TEST_ExpectTrue(testArray.GetType(3) == JSON_Object);
+ TEST_ExpectTrue(testArray.GetTypeOf(3) == JSON_Object);
TEST_ExpectTrue(testArray.GetObject(3).GetNumber("var") == 7.0);
Issue("Last element incorrectly removed");
@@ -535,19 +536,19 @@ protected static function SubTest_ArrayMultipleVariablesRemoval()
testArray.RemoveValue(0);
testArray.RemoveValue(0);
TEST_ExpectTrue(testArray.Getlength() == 0);
- TEST_ExpectTrue(testArray.GetType(0) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(0) == JSON_Undefined);
}
protected static function SubTest_ArrayRemovingMultipleVariablesAtOnce()
{
- local JSONArray testArray;
- testArray = new class'JSONArray';
+ local JArray testArray;
+ testArray = _().json.newArray();
testArray.AddNumber(10.0f)
.AddString("test string")
.AddString("another string")
.AddNumber(7.0);
- Context("Testing how `JSONArray`' handles removing" @
+ Context("Testing how `JArray`' handles removing" @
"multiple elements at once");
Issue("Multiple values are incorrectly removed");
testArray.RemoveValue(1, 2);
@@ -577,31 +578,31 @@ protected static function SubTest_ArrayRemovingMultipleVariablesAtOnce()
Issue("Array empties incorrectly");
testArray.RemoveValue(0, testArray.GetLength());
TEST_ExpectTrue(testArray.GetLength() == 0);
- TEST_ExpectTrue(testArray.GetType(0) == JSON_Undefined);
- TEST_ExpectTrue(testArray.GetType(1) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(0) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(1) == JSON_Undefined);
}
protected static function SubTest_ArrayExpansions()
{
- local JSONArray testArray;
- testArray = new class'JSONArray';
+ local JArray testArray;
+ testArray = _().json.newArray();
- Context("Testing how `JSONArray`' handles expansions/shrinking " @
+ Context("Testing how `JArray`' handles expansions/shrinking " @
"via `SetLength()`");
Issue("`SetLength()` doesn't properly expand empty array");
testArray.SetLength(2);
TEST_ExpectTrue(testArray.GetLength() == 2);
- TEST_ExpectTrue(testArray.GetType(0) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(1) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(0) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(1) == JSON_Null);
Issue("`SetLength()` doesn't properly expand non-empty array");
testArray.AddNumber(1);
testArray.SetLength(4);
TEST_ExpectTrue(testArray.GetLength() == 4);
- TEST_ExpectTrue(testArray.GetType(0) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(1) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(2) == JSON_Number);
- TEST_ExpectTrue(testArray.GetType(3) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(0) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(1) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(2) == JSON_Number);
+ TEST_ExpectTrue(testArray.GetTypeOf(3) == JSON_Null);
TEST_ExpectTrue(testArray.GetNumber(2) == 1);
SubSubTest_ArraySetNumberExpansions();
SubSubTest_ArraySetStringExpansions();
@@ -610,10 +611,10 @@ protected static function SubTest_ArrayExpansions()
protected static function SubSubTest_ArraySetNumberExpansions()
{
- local JSONArray testArray;
- testArray = new class'JSONArray';
+ local JArray testArray;
+ testArray = _().json.newArray();
- Context("Testing how `JSONArray`' handles expansions via" @
+ Context("Testing how `JArray`' handles expansions via" @
"`SetNumber()` function");
Issue("Setters don't create correct first element");
testArray.SetNumber(0, 1);
@@ -622,30 +623,30 @@ protected static function SubSubTest_ArraySetNumberExpansions()
Issue( "`SetNumber()` doesn't properly define array when setting" @
"value out-of-bounds");
- testArray = new class'JSONArray';
+ testArray = _().json.newArray();
testArray.AddNumber(1);
testArray.SetNumber(4, 2);
TEST_ExpectTrue(testArray.GetLength() == 5);
TEST_ExpectTrue(testArray.GetNumber(0) == 1);
- TEST_ExpectTrue(testArray.GetType(1) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(2) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(3) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(1) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(2) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(3) == JSON_Null);
TEST_ExpectTrue(testArray.GetNumber(4) == 2);
Issue("`SetNumber()` expands array even when it told not to");
testArray.SetNumber(6, 7, true);
TEST_ExpectTrue(testArray.GetLength() == 5);
TEST_ExpectTrue(testArray.GetNumber(6) == 0);
- TEST_ExpectTrue(testArray.GetType(5) == JSON_Undefined);
- TEST_ExpectTrue(testArray.GetType(6) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(5) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(6) == JSON_Undefined);
}
protected static function SubSubTest_ArraySetStringExpansions()
{
- local JSONArray testArray;
- testArray = new class'JSONArray';
+ local JArray testArray;
+ testArray = _().json.newArray();
- Context("Testing how `JSONArray`' handles expansions via" @
+ Context("Testing how `JArray`' handles expansions via" @
"`SetString()` function");
Issue("Setters don't create correct first element");
testArray.SetString(0, "str");
@@ -654,30 +655,30 @@ protected static function SubSubTest_ArraySetStringExpansions()
Issue( "`SetString()` doesn't properly define array when setting" @
"value out-of-bounds");
- testArray = new class'JSONArray';
+ testArray = _().json.newArray();
testArray.AddString("str");
testArray.SetString(4, "str2");
TEST_ExpectTrue(testArray.GetLength() == 5);
TEST_ExpectTrue(testArray.GetString(0) == "str");
- TEST_ExpectTrue(testArray.GetType(1) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(2) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(3) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(1) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(2) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(3) == JSON_Null);
TEST_ExpectTrue(testArray.GetString(4) == "str2");
Issue("`SetString()` expands array even when it told not to");
testArray.SetString(6, "new string", true);
TEST_ExpectTrue(testArray.GetLength() == 5);
TEST_ExpectTrue(testArray.GetString(6) == "");
- TEST_ExpectTrue(testArray.GetType(5) == JSON_Undefined);
- TEST_ExpectTrue(testArray.GetType(6) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(5) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(6) == JSON_Undefined);
}
protected static function SubSubTest_ArraySetBooleanExpansions()
{
- local JSONArray testArray;
- testArray = new class'JSONArray';
+ local JArray testArray;
+ testArray = _().json.newArray();
- Context("Testing how `JSONArray`' handles expansions via" @
+ Context("Testing how `JArray`' handles expansions via" @
"`SetBoolean()` function");
Issue("Setters don't create correct first element");
testArray.SetBoolean(0, false);
@@ -686,22 +687,22 @@ protected static function SubSubTest_ArraySetBooleanExpansions()
Issue( "`SetBoolean()` doesn't properly define array when setting" @
"value out-of-bounds");
- testArray = new class'JSONArray';
+ testArray = _().json.newArray();
testArray.AddBoolean(true);
testArray.SetBoolean(4, true);
TEST_ExpectTrue(testArray.GetLength() == 5);
TEST_ExpectTrue(testArray.GetBoolean(0) == true);
- TEST_ExpectTrue(testArray.GetType(1) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(2) == JSON_Null);
- TEST_ExpectTrue(testArray.GetType(3) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(1) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(2) == JSON_Null);
+ TEST_ExpectTrue(testArray.GetTypeOf(3) == JSON_Null);
TEST_ExpectTrue(testArray.GetBoolean(4) == true);
Issue("`SetBoolean()` expands array even when it told not to");
testArray.SetBoolean(6, true, true);
TEST_ExpectTrue(testArray.GetLength() == 5);
TEST_ExpectTrue(testArray.GetBoolean(6) == false);
- TEST_ExpectTrue(testArray.GetType(5) == JSON_Undefined);
- TEST_ExpectTrue(testArray.GetType(6) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(5) == JSON_Undefined);
+ TEST_ExpectTrue(testArray.GetTypeOf(6) == JSON_Undefined);
}
defaultproperties
diff --git a/sources/Global.uc b/sources/Global.uc
index 8c46772..75c0728 100644
--- a/sources/Global.uc
+++ b/sources/Global.uc
@@ -21,9 +21,12 @@
*/
class Global extends Singleton;
-var public Acedia acedia;
+var public Acedia acedia;
+var public JSONAPI json;
protected function OnCreated()
{
- acedia = class'Acedia'.static.GetInstance();
+ acedia = class'Acedia'.static.GetInstance();
+ Spawn(class'JSONAPI');
+ json = JSONAPI(class'JSONAPI'.static.GetInstance());
}
\ No newline at end of file