summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2016-03-03 01:40:12 +0100
committerPetr Mrázek <peterix@gmail.com>2016-03-03 01:40:12 +0100
commit94d46848095bc75627873708b1d0d5b2632b85db (patch)
treeaaff777681ea6b6fe8107460a011511984b948b5
parentb54839b8976b5c1455c838828f2bc92cdeb178eb (diff)
downloadMultiMC-94d46848095bc75627873708b1d0d5b2632b85db.tar
MultiMC-94d46848095bc75627873708b1d0d5b2632b85db.tar.gz
MultiMC-94d46848095bc75627873708b1d0d5b2632b85db.tar.lz
MultiMC-94d46848095bc75627873708b1d0d5b2632b85db.tar.xz
MultiMC-94d46848095bc75627873708b1d0d5b2632b85db.zip
NOISSUE add basic unit tests for MojangVersionFormat reading/writing
will have to make them pass now
-rw-r--r--logic/minecraft/MojangVersionFormat.cpp7
-rw-r--r--logic/minecraft/MojangVersionFormat.h4
-rw-r--r--logic/minecraft/OneSixRule.cpp5
-rw-r--r--tests/CMakeLists.txt38
-rw-r--r--tests/data/1.9-simple.json198
-rw-r--r--tests/data/1.9.json529
-rw-r--r--tests/tst_MojangVersionFormat.cpp54
7 files changed, 814 insertions, 21 deletions
diff --git a/logic/minecraft/MojangVersionFormat.cpp b/logic/minecraft/MojangVersionFormat.cpp
index e28a38ab..4d6f205b 100644
--- a/logic/minecraft/MojangVersionFormat.cpp
+++ b/logic/minecraft/MojangVersionFormat.cpp
@@ -63,13 +63,12 @@ VersionFilePtr MojangVersionFormat::versionFileFromJson(const QJsonDocument &doc
if (root.contains("libraries"))
{
- out->shouldOverwriteLibs = true;
for (auto libVal : requireArray(root.value("libraries")))
{
auto libObj = requireObject(libVal);
auto lib = OneSixVersionFormat::libraryFromJson(libObj, filename);
- out->overwriteLibs.append(lib);
+ out->addLibs.append(lib);
}
}
return out;
@@ -86,6 +85,10 @@ static QJsonDocument versionFileToJson(VersionFilePtr patch)
writeString(root, "assets", patch->assets);
writeString(root, "releaseTime", timeToS3Time(patch->m_releaseTime));
writeString(root, "time", timeToS3Time(patch->m_updateTime));
+ if(patch->minimumLauncherVersion != -1)
+ {
+ root.insert("minimumLauncherVersion", patch->minimumLauncherVersion);
+ }
if (!patch->addLibs.isEmpty())
{
diff --git a/logic/minecraft/MojangVersionFormat.h b/logic/minecraft/MojangVersionFormat.h
index 925990ab..cd87d68e 100644
--- a/logic/minecraft/MojangVersionFormat.h
+++ b/logic/minecraft/MojangVersionFormat.h
@@ -3,7 +3,9 @@
#include <minecraft/VersionFile.h>
#include <QJsonDocument>
-class MojangVersionFormat
+#include "multimc_logic_export.h"
+
+class MULTIMC_LOGIC_EXPORT MojangVersionFormat
{
public:
// version files / profile patches
diff --git a/logic/minecraft/OneSixRule.cpp b/logic/minecraft/OneSixRule.cpp
index fc9f8f71..3f4a6bb9 100644
--- a/logic/minecraft/OneSixRule.cpp
+++ b/logic/minecraft/OneSixRule.cpp
@@ -82,7 +82,10 @@ QJsonObject OsRule::toJson()
QJsonObject osObj;
{
osObj.insert("name", OpSys_toString(m_system));
- osObj.insert("version", m_version_regexp);
+ if(!m_version_regexp.isEmpty())
+ {
+ osObj.insert("version", m_version_regexp);
+ }
}
ruleObj.insert("os", osObj);
return ruleObj;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 1e5c1aa9..f95bf905 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,16 +1,19 @@
# run the unit tests with `make test`
find_package(Qt5Test)
+add_custom_target(test_data)
+
unset(MultiMC_TESTS)
macro(add_unit_test name)
unset(srcs)
foreach(arg ${testname} ${ARGN})
list(APPEND srcs ${CMAKE_CURRENT_SOURCE_DIR}/${arg})
- if(WIN32)
- list(APPEND srcs ${CMAKE_CURRENT_SOURCE_DIR}/test.rc)
- endif()
endforeach()
+ if(WIN32)
+ list(APPEND srcs ${CMAKE_CURRENT_SOURCE_DIR}/test.rc)
+ endif()
add_executable(tst_${name} ${srcs})
+ add_dependencies(tst_${name} test_data)
target_link_libraries(tst_${name} MultiMC_logic)
qt5_use_modules(tst_${name} Test Core Network)
list(APPEND MultiMC_TESTS tst_${name})
@@ -32,6 +35,7 @@ add_unit_test(Resource tst_Resource.cpp)
add_unit_test(GZip tst_GZip.cpp)
add_unit_test(JavaVersion tst_JavaVersion.cpp)
add_unit_test(ParseUtils tst_ParseUtils.cpp)
+add_unit_test(MojangVersionFormat tst_MojangVersionFormat.cpp)
# Tests END #
@@ -91,7 +95,21 @@ if(MultiMC_CODE_COVERAGE)
add_custom_target(MultiMC_RUN_TESTS DEPENDS MultiMC_GENERATE_COVERAGE_HTML)
endif(MultiMC_CODE_COVERAGE)
+
set(MultiMC_TEST_DATA_PATH "${CMAKE_CURRENT_BINARY_DIR}/data")
+set(MultiMC_TEST_DATA_PATH_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/data")
+set(MultiMC_TEST_DATA_PATH_RAW "${CMAKE_CURRENT_BINARY_DIR}/data_raw")
+set(MultiMC_TEST_DATA_PATH_SOURCE_RAW "${CMAKE_CURRENT_SOURCE_DIR}/data_raw")
+
+# clean and replace test data
+add_custom_command(
+ TARGET test_data
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${MultiMC_TEST_DATA_PATH}
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${MultiMC_TEST_DATA_PATH}
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${MultiMC_TEST_DATA_PATH_SOURCE} ${MultiMC_TEST_DATA_PATH}
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${MultiMC_TEST_DATA_PATH_SOURCE_RAW} ${MultiMC_TEST_DATA_PATH_RAW}
+)
+
message("${CMAKE_CURRENT_BINARY_DIR}/data")
if(UNIX)
# on unix we get the third / from the filename
@@ -100,18 +118,4 @@ else()
# we don't on windows, so we have to add it ourselves
set(MultiMC_TEST_DATA_PATH "file:///${MultiMC_TEST_DATA_PATH}")
endif()
-file(GLOB data_files "data/*")
-foreach(data_file ${data_files})
- get_filename_component(filename ${data_file} NAME)
- configure_file(
- ${data_file}
- ${CMAKE_CURRENT_BINARY_DIR}/data/${filename}
- @ONLY
- NEWLINE_STYLE LF
- )
-endforeach()
-
-file(GLOB raw_data_files "data_raw/*")
-file(COPY ${raw_data_files} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data/)
-
configure_file(test_config.h.in test_config.h @ONLY)
diff --git a/tests/data/1.9-simple.json b/tests/data/1.9-simple.json
new file mode 100644
index 00000000..574c5b06
--- /dev/null
+++ b/tests/data/1.9-simple.json
@@ -0,0 +1,198 @@
+{
+ "assets": "1.9",
+ "id": "1.9",
+ "libraries": [
+ {
+ "name": "oshi-project:oshi-core:1.1"
+ },
+ {
+ "name": "net.java.dev.jna:jna:3.4.0"
+ },
+ {
+ "name": "net.java.dev.jna:platform:3.4.0"
+ },
+ {
+ "name": "com.ibm.icu:icu4j-core-mojang:51.2"
+ },
+ {
+ "name": "net.sf.jopt-simple:jopt-simple:4.6"
+ },
+ {
+ "name": "com.paulscode:codecjorbis:20101023"
+ },
+ {
+ "name": "com.paulscode:codecwav:20101023"
+ },
+ {
+ "name": "com.paulscode:libraryjavasound:20101123"
+ },
+ {
+ "name": "com.paulscode:librarylwjglopenal:20100824"
+ },
+ {
+ "name": "com.paulscode:soundsystem:20120107"
+ },
+ {
+ "name": "io.netty:netty-all:4.0.23.Final"
+ },
+ {
+ "name": "com.google.guava:guava:17.0"
+ },
+ {
+ "name": "org.apache.commons:commons-lang3:3.3.2"
+ },
+ {
+ "name": "commons-io:commons-io:2.4"
+ },
+ {
+ "name": "commons-codec:commons-codec:1.9"
+ },
+ {
+ "name": "net.java.jinput:jinput:2.0.5"
+ },
+ {
+ "name": "net.java.jutils:jutils:1.0.0"
+ },
+ {
+ "name": "com.google.code.gson:gson:2.2.4"
+ },
+ {
+ "name": "com.mojang:authlib:1.5.22"
+ },
+ {
+ "name": "com.mojang:realms:1.8.4"
+ },
+ {
+ "name": "org.apache.commons:commons-compress:1.8.1"
+ },
+ {
+ "name": "org.apache.httpcomponents:httpclient:4.3.3"
+ },
+ {
+ "name": "commons-logging:commons-logging:1.1.3"
+ },
+ {
+ "name": "org.apache.httpcomponents:httpcore:4.3.2"
+ },
+ {
+ "name": "org.apache.logging.log4j:log4j-api:2.0-beta9"
+ },
+ {
+ "name": "org.apache.logging.log4j:log4j-core:2.0-beta9"
+ },
+ {
+ "name": "org.lwjgl.lwjgl:lwjgl:2.9.4-nightly-20150209",
+ "rules": [
+ {
+ "action": "allow"
+ },
+ {
+ "action": "disallow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.4-nightly-20150209",
+ "rules": [
+ {
+ "action": "allow"
+ },
+ {
+ "action": "disallow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "extract": {
+ "exclude": [
+ "META-INF/"
+ ]
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.4-nightly-20150209",
+ "natives": {
+ "linux": "natives-linux",
+ "osx": "natives-osx",
+ "windows": "natives-windows"
+ },
+ "rules": [
+ {
+ "action": "allow"
+ },
+ {
+ "action": "disallow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "name": "org.lwjgl.lwjgl:lwjgl:2.9.2-nightly-20140822",
+ "rules": [
+ {
+ "action": "allow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.2-nightly-20140822",
+ "rules": [
+ {
+ "action": "allow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "extract": {
+ "exclude": [
+ "META-INF/"
+ ]
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.2-nightly-20140822",
+ "natives": {
+ "linux": "natives-linux",
+ "osx": "natives-osx",
+ "windows": "natives-windows"
+ },
+ "rules": [
+ {
+ "action": "allow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "extract": {
+ "exclude": [
+ "META-INF/"
+ ]
+ },
+ "name": "net.java.jinput:jinput-platform:2.0.5",
+ "natives": {
+ "linux": "natives-linux",
+ "osx": "natives-osx",
+ "windows": "natives-windows"
+ }
+ }
+ ],
+ "mainClass": "net.minecraft.client.main.Main",
+ "minecraftArguments": "--username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userType ${user_type} --versionType ${version_type}",
+ "minimumLauncherVersion": 18,
+ "releaseTime": "2016-02-29T13:49:54+00:00",
+ "time": "2016-03-01T13:14:53+00:00",
+ "type": "release"
+}
diff --git a/tests/data/1.9.json b/tests/data/1.9.json
new file mode 100644
index 00000000..697c6059
--- /dev/null
+++ b/tests/data/1.9.json
@@ -0,0 +1,529 @@
+{
+ "assetIndex": {
+ "id": "1.9",
+ "sha1": "cde65b47a43f638653ab1da3848b53f8a7477b16",
+ "size": 136916,
+ "totalSize": 119917473,
+ "url": "https://launchermeta.mojang.com/mc-staging/assets/1.9/cde65b47a43f638653ab1da3848b53f8a7477b16/1.9.json"
+ },
+ "assets": "1.9",
+ "downloads": {
+ "client": {
+ "sha1": "2f67dfe8953299440d1902f9124f0f2c3a2c940f",
+ "size": 8697592,
+ "url": "https://launcher.mojang.com/mc/game/1.9/client/2f67dfe8953299440d1902f9124f0f2c3a2c940f/client.jar"
+ },
+ "server": {
+ "sha1": "b4d449cf2918e0f3bd8aa18954b916a4d1880f0d",
+ "size": 8848015,
+ "url": "https://launcher.mojang.com/mc/game/1.9/server/b4d449cf2918e0f3bd8aa18954b916a4d1880f0d/server.jar"
+ }
+ },
+ "id": "1.9",
+ "libraries": [
+ {
+ "downloads": {
+ "artifact": {
+ "path": "oshi-project/oshi-core/1.1/oshi-core-1.1.jar",
+ "sha1": "9ddf7b048a8d701be231c0f4f95fd986198fd2d8",
+ "size": 30973,
+ "url": "https://libraries.minecraft.net/oshi-project/oshi-core/1.1/oshi-core-1.1.jar"
+ }
+ },
+ "name": "oshi-project:oshi-core:1.1"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar",
+ "sha1": "803ff252fedbd395baffd43b37341dc4a150a554",
+ "size": 1008730,
+ "url": "https://libraries.minecraft.net/net/java/dev/jna/jna/3.4.0/jna-3.4.0.jar"
+ }
+ },
+ "name": "net.java.dev.jna:jna:3.4.0"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "net/java/dev/jna/platform/3.4.0/platform-3.4.0.jar",
+ "sha1": "e3f70017be8100d3d6923f50b3d2ee17714e9c13",
+ "size": 913436,
+ "url": "https://libraries.minecraft.net/net/java/dev/jna/platform/3.4.0/platform-3.4.0.jar"
+ }
+ },
+ "name": "net.java.dev.jna:platform:3.4.0"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.jar",
+ "sha1": "63d216a9311cca6be337c1e458e587f99d382b84",
+ "size": 1634692,
+ "url": "https://libraries.minecraft.net/com/ibm/icu/icu4j-core-mojang/51.2/icu4j-core-mojang-51.2.jar"
+ }
+ },
+ "name": "com.ibm.icu:icu4j-core-mojang:51.2"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar",
+ "sha1": "306816fb57cf94f108a43c95731b08934dcae15c",
+ "size": 62477,
+ "url": "https://libraries.minecraft.net/net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar"
+ }
+ },
+ "name": "net.sf.jopt-simple:jopt-simple:4.6"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/paulscode/codecjorbis/20101023/codecjorbis-20101023.jar",
+ "sha1": "c73b5636faf089d9f00e8732a829577de25237ee",
+ "size": 103871,
+ "url": "https://libraries.minecraft.net/com/paulscode/codecjorbis/20101023/codecjorbis-20101023.jar"
+ }
+ },
+ "name": "com.paulscode:codecjorbis:20101023"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/paulscode/codecwav/20101023/codecwav-20101023.jar",
+ "sha1": "12f031cfe88fef5c1dd36c563c0a3a69bd7261da",
+ "size": 5618,
+ "url": "https://libraries.minecraft.net/com/paulscode/codecwav/20101023/codecwav-20101023.jar"
+ }
+ },
+ "name": "com.paulscode:codecwav:20101023"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/paulscode/libraryjavasound/20101123/libraryjavasound-20101123.jar",
+ "sha1": "5c5e304366f75f9eaa2e8cca546a1fb6109348b3",
+ "size": 21679,
+ "url": "https://libraries.minecraft.net/com/paulscode/libraryjavasound/20101123/libraryjavasound-20101123.jar"
+ }
+ },
+ "name": "com.paulscode:libraryjavasound:20101123"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/paulscode/librarylwjglopenal/20100824/librarylwjglopenal-20100824.jar",
+ "sha1": "73e80d0794c39665aec3f62eee88ca91676674ef",
+ "size": 18981,
+ "url": "https://libraries.minecraft.net/com/paulscode/librarylwjglopenal/20100824/librarylwjglopenal-20100824.jar"
+ }
+ },
+ "name": "com.paulscode:librarylwjglopenal:20100824"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/paulscode/soundsystem/20120107/soundsystem-20120107.jar",
+ "sha1": "419c05fe9be71f792b2d76cfc9b67f1ed0fec7f6",
+ "size": 65020,
+ "url": "https://libraries.minecraft.net/com/paulscode/soundsystem/20120107/soundsystem-20120107.jar"
+ }
+ },
+ "name": "com.paulscode:soundsystem:20120107"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.jar",
+ "sha1": "0294104aaf1781d6a56a07d561e792c5d0c95f45",
+ "size": 1779991,
+ "url": "https://libraries.minecraft.net/io/netty/netty-all/4.0.23.Final/netty-all-4.0.23.Final.jar"
+ }
+ },
+ "name": "io.netty:netty-all:4.0.23.Final"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/google/guava/guava/17.0/guava-17.0.jar",
+ "sha1": "9c6ef172e8de35fd8d4d8783e4821e57cdef7445",
+ "size": 2243036,
+ "url": "https://libraries.minecraft.net/com/google/guava/guava/17.0/guava-17.0.jar"
+ }
+ },
+ "name": "com.google.guava:guava:17.0"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar",
+ "sha1": "90a3822c38ec8c996e84c16a3477ef632cbc87a3",
+ "size": 412739,
+ "url": "https://libraries.minecraft.net/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar"
+ }
+ },
+ "name": "org.apache.commons:commons-lang3:3.3.2"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "commons-io/commons-io/2.4/commons-io-2.4.jar",
+ "sha1": "b1b6ea3b7e4aa4f492509a4952029cd8e48019ad",
+ "size": 185140,
+ "url": "https://libraries.minecraft.net/commons-io/commons-io/2.4/commons-io-2.4.jar"
+ }
+ },
+ "name": "commons-io:commons-io:2.4"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "commons-codec/commons-codec/1.9/commons-codec-1.9.jar",
+ "sha1": "9ce04e34240f674bc72680f8b843b1457383161a",
+ "size": 263965,
+ "url": "https://libraries.minecraft.net/commons-codec/commons-codec/1.9/commons-codec-1.9.jar"
+ }
+ },
+ "name": "commons-codec:commons-codec:1.9"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar",
+ "sha1": "39c7796b469a600f72380316f6b1f11db6c2c7c4",
+ "size": 208338,
+ "url": "https://libraries.minecraft.net/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar"
+ }
+ },
+ "name": "net.java.jinput:jinput:2.0.5"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar",
+ "sha1": "e12fe1fda814bd348c1579329c86943d2cd3c6a6",
+ "size": 7508,
+ "url": "https://libraries.minecraft.net/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar"
+ }
+ },
+ "name": "net.java.jutils:jutils:1.0.0"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/google/code/gson/gson/2.2.4/gson-2.2.4.jar",
+ "sha1": "a60a5e993c98c864010053cb901b7eab25306568",
+ "size": 190432,
+ "url": "https://libraries.minecraft.net/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar"
+ }
+ },
+ "name": "com.google.code.gson:gson:2.2.4"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/mojang/authlib/1.5.22/authlib-1.5.22.jar",
+ "sha1": "afaa8f6df976fcb5520e76ef1d5798c9e6b5c0b2",
+ "size": 64539,
+ "url": "https://libraries.minecraft.net/com/mojang/authlib/1.5.22/authlib-1.5.22.jar"
+ }
+ },
+ "name": "com.mojang:authlib:1.5.22"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "com/mojang/realms/1.8.4/realms-1.8.4.jar",
+ "sha1": "15f8dc326c97a96dee6e65392e145ad6d1cb46cb",
+ "size": 1131574,
+ "url": "https://libraries.minecraft.net/com/mojang/realms/1.8.4/realms-1.8.4.jar"
+ }
+ },
+ "name": "com.mojang:realms:1.8.4"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar",
+ "sha1": "a698750c16740fd5b3871425f4cb3bbaa87f529d",
+ "size": 365552,
+ "url": "https://libraries.minecraft.net/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar"
+ }
+ },
+ "name": "org.apache.commons:commons-compress:1.8.1"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/apache/httpcomponents/httpclient/4.3.3/httpclient-4.3.3.jar",
+ "sha1": "18f4247ff4572a074444572cee34647c43e7c9c7",
+ "size": 589512,
+ "url": "https://libraries.minecraft.net/org/apache/httpcomponents/httpclient/4.3.3/httpclient-4.3.3.jar"
+ }
+ },
+ "name": "org.apache.httpcomponents:httpclient:4.3.3"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar",
+ "sha1": "f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f",
+ "size": 62050,
+ "url": "https://libraries.minecraft.net/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar"
+ }
+ },
+ "name": "commons-logging:commons-logging:1.1.3"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2.jar",
+ "sha1": "31fbbff1ddbf98f3aa7377c94d33b0447c646b6e",
+ "size": 282269,
+ "url": "https://libraries.minecraft.net/org/apache/httpcomponents/httpcore/4.3.2/httpcore-4.3.2.jar"
+ }
+ },
+ "name": "org.apache.httpcomponents:httpcore:4.3.2"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar",
+ "sha1": "1dd66e68cccd907880229f9e2de1314bd13ff785",
+ "size": 108161,
+ "url": "https://libraries.minecraft.net/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar"
+ }
+ },
+ "name": "org.apache.logging.log4j:log4j-api:2.0-beta9"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar",
+ "sha1": "678861ba1b2e1fccb594bb0ca03114bb05da9695",
+ "size": 681134,
+ "url": "https://libraries.minecraft.net/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar"
+ }
+ },
+ "name": "org.apache.logging.log4j:log4j-core:2.0-beta9"
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/lwjgl/lwjgl/lwjgl/2.9.4-nightly-20150209/lwjgl-2.9.4-nightly-20150209.jar",
+ "sha1": "697517568c68e78ae0b4544145af031c81082dfe",
+ "size": 1047168,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl/2.9.4-nightly-20150209/lwjgl-2.9.4-nightly-20150209.jar"
+ }
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl:2.9.4-nightly-20150209",
+ "rules": [
+ {
+ "action": "allow"
+ },
+ {
+ "action": "disallow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/lwjgl/lwjgl/lwjgl_util/2.9.4-nightly-20150209/lwjgl_util-2.9.4-nightly-20150209.jar",
+ "sha1": "d51a7c040a721d13efdfbd34f8b257b2df882ad0",
+ "size": 173887,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl_util/2.9.4-nightly-20150209/lwjgl_util-2.9.4-nightly-20150209.jar"
+ }
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.4-nightly-20150209",
+ "rules": [
+ {
+ "action": "allow"
+ },
+ {
+ "action": "disallow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209.jar",
+ "sha1": "b04f3ee8f5e43fa3b162981b50bb72fe1acabb33",
+ "size": 22,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209.jar"
+ },
+ "classifiers": {
+ "natives-linux": {
+ "path": "org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-linux.jar",
+ "sha1": "931074f46c795d2f7b30ed6395df5715cfd7675b",
+ "size": 578680,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-linux.jar"
+ },
+ "natives-osx": {
+ "path": "org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar",
+ "sha1": "bcab850f8f487c3f4c4dbabde778bb82bd1a40ed",
+ "size": 426822,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar"
+ },
+ "natives-windows": {
+ "path": "org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-windows.jar",
+ "sha1": "b84d5102b9dbfabfeb5e43c7e2828d98a7fc80e0",
+ "size": 613748,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-windows.jar"
+ }
+ }
+ },
+ "extract": {
+ "exclude": [
+ "META-INF/"
+ ]
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.4-nightly-20150209",
+ "natives": {
+ "linux": "natives-linux",
+ "osx": "natives-osx",
+ "windows": "natives-windows"
+ },
+ "rules": [
+ {
+ "action": "allow"
+ },
+ {
+ "action": "disallow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/lwjgl/lwjgl/lwjgl/2.9.2-nightly-20140822/lwjgl-2.9.2-nightly-20140822.jar",
+ "sha1": "7707204c9ffa5d91662de95f0a224e2f721b22af",
+ "size": 1045632,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl/2.9.2-nightly-20140822/lwjgl-2.9.2-nightly-20140822.jar"
+ }
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl:2.9.2-nightly-20140822",
+ "rules": [
+ {
+ "action": "allow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "downloads": {
+ "artifact": {
+ "path": "org/lwjgl/lwjgl/lwjgl_util/2.9.2-nightly-20140822/lwjgl_util-2.9.2-nightly-20140822.jar",
+ "sha1": "f0e612c840a7639c1f77f68d72a28dae2f0c8490",
+ "size": 173887,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl_util/2.9.2-nightly-20140822/lwjgl_util-2.9.2-nightly-20140822.jar"
+ }
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl_util:2.9.2-nightly-20140822",
+ "rules": [
+ {
+ "action": "allow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "downloads": {
+ "classifiers": {
+ "natives-linux": {
+ "path": "org/lwjgl/lwjgl/lwjgl-platform/2.9.2-nightly-20140822/lwjgl-platform-2.9.2-nightly-20140822-natives-linux.jar",
+ "sha1": "d898a33b5d0a6ef3fed3a4ead506566dce6720a5",
+ "size": 578539,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.2-nightly-20140822/lwjgl-platform-2.9.2-nightly-20140822-natives-linux.jar"
+ },
+ "natives-osx": {
+ "path": "org/lwjgl/lwjgl/lwjgl-platform/2.9.2-nightly-20140822/lwjgl-platform-2.9.2-nightly-20140822-natives-osx.jar",
+ "sha1": "79f5ce2fea02e77fe47a3c745219167a542121d7",
+ "size": 468116,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.2-nightly-20140822/lwjgl-platform-2.9.2-nightly-20140822-natives-osx.jar"
+ },
+ "natives-windows": {
+ "path": "org/lwjgl/lwjgl/lwjgl-platform/2.9.2-nightly-20140822/lwjgl-platform-2.9.2-nightly-20140822-natives-windows.jar",
+ "sha1": "78b2a55ce4dc29c6b3ec4df8ca165eba05f9b341",
+ "size": 613680,
+ "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.2-nightly-20140822/lwjgl-platform-2.9.2-nightly-20140822-natives-windows.jar"
+ }
+ }
+ },
+ "extract": {
+ "exclude": [
+ "META-INF/"
+ ]
+ },
+ "name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.2-nightly-20140822",
+ "natives": {
+ "linux": "natives-linux",
+ "osx": "natives-osx",
+ "windows": "natives-windows"
+ },
+ "rules": [
+ {
+ "action": "allow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
+ },
+ {
+ "downloads": {
+ "classifiers": {
+ "natives-linux": {
+ "path": "net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-linux.jar",
+ "sha1": "7ff832a6eb9ab6a767f1ade2b548092d0fa64795",
+ "size": 10362,
+ "url": "https://libraries.minecraft.net/net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-linux.jar"
+ },
+ "natives-osx": {
+ "path": "net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-osx.jar",
+ "sha1": "53f9c919f34d2ca9de8c51fc4e1e8282029a9232",
+ "size": 12186,
+ "url": "https://libraries.minecraft.net/net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-osx.jar"
+ },
+ "natives-windows": {
+ "path": "net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-windows.jar",
+ "sha1": "385ee093e01f587f30ee1c8a2ee7d408fd732e16",
+ "size": 155179,
+ "url": "https://libraries.minecraft.net/net/java/jinput/jinput-platform/2.0.5/jinput-platform-2.0.5-natives-windows.jar"
+ }
+ }
+ },
+ "extract": {
+ "exclude": [
+ "META-INF/"
+ ]
+ },
+ "name": "net.java.jinput:jinput-platform:2.0.5",
+ "natives": {
+ "linux": "natives-linux",
+ "osx": "natives-osx",
+ "windows": "natives-windows"
+ }
+ }
+ ],
+ "mainClass": "net.minecraft.client.main.Main",
+ "minecraftArguments": "--username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userType ${user_type} --versionType ${version_type}",
+ "minimumLauncherVersion": 18,
+ "releaseTime": "2016-02-29T13:49:54+00:00",
+ "time": "2016-03-01T13:14:53+00:00",
+ "type": "release"
+}
diff --git a/tests/tst_MojangVersionFormat.cpp b/tests/tst_MojangVersionFormat.cpp
new file mode 100644
index 00000000..760f65b1
--- /dev/null
+++ b/tests/tst_MojangVersionFormat.cpp
@@ -0,0 +1,54 @@
+#include <QTest>
+#include <QDebug>
+#include "TestUtil.h"
+
+#include "minecraft/MojangVersionFormat.h"
+
+class MojangVersionFormatTest : public QObject
+{
+ Q_OBJECT
+
+ static QJsonDocument readJson(const char *file)
+ {
+ auto path = QFINDTESTDATA(file);
+ QFile jsonFile(path);
+ jsonFile.open(QIODevice::ReadOnly);
+ auto data = jsonFile.readAll();
+ jsonFile.close();
+ return QJsonDocument::fromJson(data);
+ }
+ static void writeJson(const char *file, QJsonDocument doc)
+ {
+ QFile jsonFile(file);
+ jsonFile.open(QIODevice::WriteOnly | QIODevice::Text);
+ auto data = doc.toJson(QJsonDocument::Indented);
+ jsonFile.write(data);
+ jsonFile.close();
+ }
+
+private
+slots:
+ void test_Through_Simple()
+ {
+
+ QJsonDocument doc = readJson("tests/data/1.9-simple.json");
+ auto vfile = MojangVersionFormat::versionFileFromJson(doc, "1.9-simple.json");
+ auto doc2 = MojangVersionFormat::profilePatchToJson(vfile);
+ writeJson("beast.json", doc2);
+ QCOMPARE(doc, doc2);
+ }
+ void test_Through()
+ {
+
+ QJsonDocument doc = readJson("tests/data/1.9.json");
+ auto vfile = MojangVersionFormat::versionFileFromJson(doc, "1.9.json");
+ auto doc2 = MojangVersionFormat::profilePatchToJson(vfile);
+ QCOMPARE(doc, doc2);
+ }
+
+};
+
+QTEST_GUILESS_MAIN(MojangVersionFormatTest)
+
+#include "tst_MojangVersionFormat.moc"
+