From de8a04960db151c7156bfb1d107dabcd3b271664 Mon Sep 17 00:00:00 2001 From: Nahuel Gomez Castro Date: Tue, 5 Oct 2021 02:14:01 -0300 Subject: [PATCH 01/41] work in progress --- .vscode/settings.json | 3 + meson.build | 9 ++- src/meson.build | 11 +-- src/models/Package.vala | 165 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 180 insertions(+), 8 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/models/Package.vala diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..1277f84 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.rulers": [80] +} diff --git a/meson.build b/meson.build index 5ed0e73..41fcfec 100644 --- a/meson.build +++ b/meson.build @@ -1,9 +1,12 @@ project('vamp', 'vala', 'c', - version: '0.0.1') + version: '0.0.1' +) dependencies = [ - dependency('glib-2.0'), - dependency('gobject-2.0') + dependency('glib-2.0'), + dependency('gobject-2.0'), + dependency('gee-0.8'), + dependency('json-glib-1.0'), ] add_project_arguments(['--enable-experimental'], language: 'vala') diff --git a/src/meson.build b/src/meson.build index 6973d8b..c02fd20 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,8 +1,9 @@ sources = [ - 'main.vala' + 'models/Package.vala', + 'main.vala', ] -executable('vamp', - sources, - dependencies: dependencies, - install: true) +executable('vamp', sources, + dependencies: dependencies, + install: true, +) diff --git a/src/models/Package.vala b/src/models/Package.vala new file mode 100644 index 0000000..b26b871 --- /dev/null +++ b/src/models/Package.vala @@ -0,0 +1,165 @@ +class Vamp.Package : Object, Json.Serializable { + public string name { get; set; } + public string version { get; set; } + public string description { get; set; } + public Gee.List keywords { get; set; } + public string homepage { get; set; } + public Bugs bugs { get; set; } + public string license { get; set; } + public Person author { get; set; } + public Gee.List contributors { get; set; } + public Gee.List funding { get; set; } + public Gee.List files { get; set; } + public Repository repository { get; set; } + public Gee.Map dependencies { get; set; } + public Gee.Map dev_dependencies { get; set; } + public Gee.Map optional_dependencies { get; set; } + + public static Package from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + return (Package) Json.gobject_deserialize (typeof (Package), node); + } + + public Json.Node to_json () { + return Json.gobject_serialize (this); + } + + private bool deserialize_property ( + string property_name, + out Value @value, + ParamSpec pspec, + Json.Node property_node + ) { + switch (property_name) { + case "keywords": + if (property_node.get_node_type () != ARRAY) { + @value = {}; + return false; + } + + @value = string_list_from_json (property_node); + + return true; + + case "bugs": + if (property_node.get_node_type () == OBJECT) { + @value = Bugs.from_json (property_node); + return true; + } + + @value = new Bugs () { + url = property_node.get_string (), + }; + + return true; + + case "author": + if (property_node.get_node_type () == OBJECT) { + @value = Person.from_json (property_node); + return true; + } + + if (property_node.get_value_type () != Type.STRING) { + return false; + } + + var regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; + MatchInfo info; + + if (regex.match (property_node.get_string (), 0, out info)) { + @value = new Person () { + name = info.fetch (1), + email = info.fetch (2), + url = info.fetch (3), + }; + + return true; + } + + return false; + + default: + return default_deserialize_property ( + property_name, + out @value, + pspec, + property_node + ); + } + } +} + +class Vamp.Repository : Object { + public string type { get; set; } + public string url { get; set; } + public string directory { get; set; } + + public static Repository from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + return (Repository) Json.gobject_deserialize (typeof (Repository), node); + } + + public Json.Node to_json () { + return Json.gobject_serialize (this); + } +} + +class Vamp.FundingInfo : Object { + public string type { get; set; } + public string url { get; set; } + + public static FundingInfo from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + return (FundingInfo) Json.gobject_deserialize (typeof (FundingInfo), node); + } + + public Json.Node to_json () { + return Json.gobject_serialize (this); + } +} + +class Vamp.Person : Object { + public string name { get; set; } + public string email { get; set; } + public string url { get; set; } + + public static Person from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + return (Person) Json.gobject_deserialize (typeof (Person), node); + } + + public Json.Node to_json () { + return Json.gobject_serialize (this); + } +} + +class Vamp.Bugs : Object { + public string url { get; set; } + public string email { get; set; } + + public static Bugs from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + return (Bugs) Json.gobject_deserialize (typeof (Bugs), node); + } + + public Json.Node to_json () { + return Json.gobject_serialize (this); + } +} + +Gee.List string_list_from_json (Json.Node node) { + assert (node.get_node_type () == ARRAY); + + var array = node.get_array (); + var result = new Gee.ArrayList (); + + array.foreach_element ((_, __, element_node) => { + if (element_node.get_value_type () == Type.STRING) { + return; + } + + result.add(element_node.get_string ()); + }); + + return result; +} From 63d9a2d307f866367a0619ede7b86e039e06bdc1 Mon Sep 17 00:00:00 2001 From: Darshak Parikh Date: Tue, 5 Oct 2021 15:31:16 +0530 Subject: [PATCH 02/41] fix: lint errors --- src/models/Package.vala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index b26b871..fbf48ef 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -38,7 +38,7 @@ class Vamp.Package : Object, Json.Serializable { } @value = string_list_from_json (property_node); - + return true; case "bugs": @@ -52,7 +52,7 @@ class Vamp.Package : Object, Json.Serializable { }; return true; - + case "author": if (property_node.get_node_type () == OBJECT) { @value = Person.from_json (property_node); @@ -65,7 +65,7 @@ class Vamp.Package : Object, Json.Serializable { var regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; MatchInfo info; - + if (regex.match (property_node.get_string (), 0, out info)) { @value = new Person () { name = info.fetch (1), @@ -158,7 +158,7 @@ Gee.List string_list_from_json (Json.Node node) { return; } - result.add(element_node.get_string ()); + result.add (element_node.get_string ()); }); return result; From 3a7f9d13664763cf182ad5ef10d538e5777af7ef Mon Sep 17 00:00:00 2001 From: Darshak Parikh Date: Tue, 5 Oct 2021 16:05:14 +0530 Subject: [PATCH 03/41] Disable space-before-paren on the regex Until https://github.com/vala-lang/vala-lint/issues/141 is fixed --- src/models/Package.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index fbf48ef..293c918 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -63,7 +63,7 @@ class Vamp.Package : Object, Json.Serializable { return false; } - var regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; + var regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; // vala-lint=space-before-paren MatchInfo info; if (regex.match (property_node.get_string (), 0, out info)) { From 07311b9ed863d0152f5ce8c1cc32875e9d539652 Mon Sep 17 00:00:00 2001 From: Nahuel Gomez Castro Date: Tue, 5 Oct 2021 19:47:34 -0300 Subject: [PATCH 04/41] remove .vscode directory --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 1277f84..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "editor.rulers": [80] -} From 07728daf7af03346e8468c1fb2966946300d1bf2 Mon Sep 17 00:00:00 2001 From: Nahuel Gomez Castro Date: Tue, 5 Oct 2021 20:12:52 -0300 Subject: [PATCH 05/41] move Person parsing logic to its own method --- src/models/Package.vala | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index 293c918..f615e73 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -60,23 +60,11 @@ class Vamp.Package : Object, Json.Serializable { } if (property_node.get_value_type () != Type.STRING) { + @value = {}; return false; } - var regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; // vala-lint=space-before-paren - MatchInfo info; - - if (regex.match (property_node.get_string (), 0, out info)) { - @value = new Person () { - name = info.fetch (1), - email = info.fetch (2), - url = info.fetch (3), - }; - - return true; - } - - return false; + return Person.try_parse (property_node.get_string (), out @value); default: return default_deserialize_property ( @@ -119,6 +107,8 @@ class Vamp.FundingInfo : Object { } class Vamp.Person : Object { + private static Regex regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; // vala-lint=space-before-paren + public string name { get; set; } public string email { get; set; } public string url { get; set; } @@ -128,6 +118,23 @@ class Vamp.Person : Object { return (Person) Json.gobject_deserialize (typeof (Person), node); } + public static bool try_parse (string str, out Person result) { + MatchInfo info; + + if (!Person.regex.match (str, 0, out info)) { + result = null; + return false; + } + + result = new Person () { + name = info.fetch (1), + email = info.fetch (2), + url = info.fetch (3), + }; + + return true; + } + public Json.Node to_json () { return Json.gobject_serialize (this); } From d8749971fbc55c78ccbcd906711d5dfe62b0c2c3 Mon Sep 17 00:00:00 2001 From: Nahuel Gomez Castro Date: Tue, 5 Oct 2021 20:29:54 -0300 Subject: [PATCH 06/41] add a missing check --- src/models/Package.vala | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/models/Package.vala b/src/models/Package.vala index f615e73..a32bc6c 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -47,6 +47,11 @@ class Vamp.Package : Object, Json.Serializable { return true; } + if (property_node.get_value_type () == Type.STRING) { + @value = {}; + return false; + } + @value = new Bugs () { url = property_node.get_string (), }; From b83f48217190b3a1153b83633436a4da37a5a9c7 Mon Sep 17 00:00:00 2001 From: Nahuel Gomez Castro Date: Tue, 5 Oct 2021 20:36:30 -0300 Subject: [PATCH 07/41] fix the missing check --- src/models/Package.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index a32bc6c..24ff657 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -47,7 +47,7 @@ class Vamp.Package : Object, Json.Serializable { return true; } - if (property_node.get_value_type () == Type.STRING) { + if (property_node.get_value_type () != Type.STRING) { @value = {}; return false; } From 135d3e9d2877451dbeb7e6cf48fa80e425a7e259 Mon Sep 17 00:00:00 2001 From: Nahuel Gomez Castro Date: Wed, 6 Oct 2021 02:17:00 -0300 Subject: [PATCH 08/41] some more progress --- src/models/Package.vala | 83 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/models/Package.vala b/src/models/Package.vala index 24ff657..69f018d 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -70,6 +70,55 @@ class Vamp.Package : Object, Json.Serializable { } return Person.try_parse (property_node.get_string (), out @value); + + case "contributors": + if (property_node.get_node_type () != ARRAY) { + @value = {}; + return false; + } + + @value = Person.list_from_json (property_node); + + return true; + + case "funding": + if (property_node.get_node_type () != ARRAY) { + @value = {}; + return false; + } + + @value = FundingInfo.list_from_json (property_node); + + return true; + + case "files": + if (property_node.get_node_type () != ARRAY) { + @value = {}; + return false; + } + + @value = string_list_from_json (property_node); + + return true; + + case "repository": + if (property_node.get_node_type () != OBJECT) { + @value = {}; + return false; + } + + @value = Repository.from_json (property_node); + + return false; + + case "dependencies": + return true; + + case "dev-dependencies": + return true; + + case "optional-dependencies": + return true; default: return default_deserialize_property ( @@ -106,6 +155,23 @@ class Vamp.FundingInfo : Object { return (FundingInfo) Json.gobject_deserialize (typeof (FundingInfo), node); } + public static Gee.List list_from_json (Json.Node node) { + assert (node.get_node_type () == ARRAY); + + var array = node.get_array (); + var result = new Gee.ArrayList (); + + array.foreach_element ((_, __, element_node) => { + if (element_node.get_node_type () != OBJECT) { + return; + } + + result.add (FundingInfo.from_json (element_node)); + }); + + return result; + } + public Json.Node to_json () { return Json.gobject_serialize (this); } @@ -123,6 +189,23 @@ class Vamp.Person : Object { return (Person) Json.gobject_deserialize (typeof (Person), node); } + public static Gee.List list_from_json (Json.Node node) { + assert (node.get_node_type () == ARRAY); + + var array = node.get_array (); + var result = new Gee.ArrayList (); + + array.foreach_element ((_, __, element_node) => { + if (element_node.get_node_type () != OBJECT) { + return; + } + + result.add (Person.from_json (element_node)); + }); + + return result; + } + public static bool try_parse (string str, out Person result) { MatchInfo info; From 6c2b7f4eb6459e2e966d661c4306531c1975b916 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sat, 12 Mar 2022 00:15:36 +0000 Subject: [PATCH 09/41] Start working on file test --- src/meson.build | 14 ++++++++++++++ src/models/Package.vala | 4 ++-- tests/FileTest.vala | 17 +++++++++++++++++ tests/config.vapi.in | 5 +++++ tests/meson.build | 33 ++++++++++++++++++++++++++++++++- tests/vamp.json | 5 +++++ 6 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 tests/FileTest.vala create mode 100644 tests/config.vapi.in create mode 100644 tests/vamp.json diff --git a/src/meson.build b/src/meson.build index c02fd20..1a8c4d4 100644 --- a/src/meson.build +++ b/src/meson.build @@ -7,3 +7,17 @@ executable('vamp', sources, dependencies: dependencies, install: true, ) + + +vamp_lib = library( + 'vamp', + ['models/Package.vala'], + vala_header: 'vamp.h', + vala_vapi: 'vamp.vapi', + dependencies: dependencies, +) + +vamp_dep = declare_dependency( + include_directories: include_directories('.'), + link_with: vamp_lib, +) diff --git a/src/models/Package.vala b/src/models/Package.vala index 69f018d..6ae2309 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -132,7 +132,7 @@ class Vamp.Package : Object, Json.Serializable { } class Vamp.Repository : Object { - public string type { get; set; } + public string respository_type { get; set; } public string url { get; set; } public string directory { get; set; } @@ -147,7 +147,7 @@ class Vamp.Repository : Object { } class Vamp.FundingInfo : Object { - public string type { get; set; } + public string funding_type { get; set; } public string url { get; set; } public static FundingInfo from_json (Json.Node node) { diff --git a/tests/FileTest.vala b/tests/FileTest.vala new file mode 100644 index 0000000..dfe5d1e --- /dev/null +++ b/tests/FileTest.vala @@ -0,0 +1,17 @@ +namespace Vamp { + class FileTest { + public static int main () { + string package_contents; + try { + bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); + } + print ("Test package file contents:\n%s", package_contents); + } catch (FileError e) { + error (e.message); + } + return 0; + } + } +} diff --git a/tests/config.vapi.in b/tests/config.vapi.in new file mode 100644 index 0000000..cac5fb4 --- /dev/null +++ b/tests/config.vapi.in @@ -0,0 +1,5 @@ +[CCode (cheader_filename = "config.h")] +namespace TestConfig { + [CCode (cname = "TEST_PACKAGE_FILE")] + public const string TEST_PACKAGE_FILE; +} diff --git a/tests/meson.build b/tests/meson.build index 7d3914e..ff9a2ab 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,13 +1,44 @@ if get_option('tests') +conft = configuration_data() +configure_file ( + input: 'config.vapi.in', + output: 'config.vapi', + configuration: conft +) +confht = configuration_data() +confht.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'vamp.json') +configure_file(output : 'config.h', + configuration : confht) + + +vala_args = [ + '--vapidir', meson.current_build_dir(), + '--pkg', 'config' +] + test_sources = [ 'UnitTests.vala' ] +test_dependencies = [ + vamp_dep, +] + +foreach dep : dependencies + test_dependencies += dep +endforeach + test_executable = executable('vamp-tests', test_sources, - dependencies: dependencies + dependencies: test_dependencies +) + +file_test_executable = executable('file-test', 'FileTest.vala', + dependencies: test_dependencies, + vala_args: vala_args, ) test('vamp-tests', test_executable) +test('file-test', file_test_executable) endif diff --git a/tests/vamp.json b/tests/vamp.json new file mode 100644 index 0000000..2f6b160 --- /dev/null +++ b/tests/vamp.json @@ -0,0 +1,5 @@ +{ + "name": "Test Project", + "version": "0.0.1", + "description": "Test Project", +} From 4702f75f2256f0f1b1b7a1b6ec89d400d0c1cfe6 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sat, 12 Mar 2022 10:46:52 +0000 Subject: [PATCH 10/41] Test package config file can be parsed --- src/models/Package.vala | 22 +++++++++++----------- tests/FileTest.vala | 11 +++++++++++ tests/vamp.json | 2 +- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index 6ae2309..ab14d44 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -1,4 +1,4 @@ -class Vamp.Package : Object, Json.Serializable { +public class Vamp.Package : Object, Json.Serializable { public string name { get; set; } public string version { get; set; } public string description { get; set; } @@ -70,7 +70,7 @@ class Vamp.Package : Object, Json.Serializable { } return Person.try_parse (property_node.get_string (), out @value); - + case "contributors": if (property_node.get_node_type () != ARRAY) { @value = {}; @@ -90,7 +90,7 @@ class Vamp.Package : Object, Json.Serializable { @value = FundingInfo.list_from_json (property_node); return true; - + case "files": if (property_node.get_node_type () != ARRAY) { @value = {}; @@ -100,7 +100,7 @@ class Vamp.Package : Object, Json.Serializable { @value = string_list_from_json (property_node); return true; - + case "repository": if (property_node.get_node_type () != OBJECT) { @value = {}; @@ -113,10 +113,10 @@ class Vamp.Package : Object, Json.Serializable { case "dependencies": return true; - + case "dev-dependencies": return true; - + case "optional-dependencies": return true; @@ -131,7 +131,7 @@ class Vamp.Package : Object, Json.Serializable { } } -class Vamp.Repository : Object { +public class Vamp.Repository : Object { public string respository_type { get; set; } public string url { get; set; } public string directory { get; set; } @@ -146,7 +146,7 @@ class Vamp.Repository : Object { } } -class Vamp.FundingInfo : Object { +public class Vamp.FundingInfo : Object { public string funding_type { get; set; } public string url { get; set; } @@ -157,7 +157,7 @@ class Vamp.FundingInfo : Object { public static Gee.List list_from_json (Json.Node node) { assert (node.get_node_type () == ARRAY); - + var array = node.get_array (); var result = new Gee.ArrayList (); @@ -177,7 +177,7 @@ class Vamp.FundingInfo : Object { } } -class Vamp.Person : Object { +public class Vamp.Person : Object { private static Regex regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; // vala-lint=space-before-paren public string name { get; set; } @@ -228,7 +228,7 @@ class Vamp.Person : Object { } } -class Vamp.Bugs : Object { +public class Vamp.Bugs : Object { public string url { get; set; } public string email { get; set; } diff --git a/tests/FileTest.vala b/tests/FileTest.vala index dfe5d1e..04498cd 100644 --- a/tests/FileTest.vala +++ b/tests/FileTest.vala @@ -8,10 +8,21 @@ namespace Vamp { error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); } print ("Test package file contents:\n%s", package_contents); + desrialise_package_config (package_contents); } catch (FileError e) { error (e.message); } return 0; } + + private static Vamp.Package desrialise_package_config (string config_data) { + var parser = new Json.Parser (); + try { + parser.load_from_data (config_data); + return Vamp.Package.from_json (parser.get_root ()); + } catch (Error e) { + error ("Unable to parse the package config data: %s\n", e.message); + } + } } } diff --git a/tests/vamp.json b/tests/vamp.json index 2f6b160..22d0da1 100644 --- a/tests/vamp.json +++ b/tests/vamp.json @@ -1,5 +1,5 @@ { "name": "Test Project", "version": "0.0.1", - "description": "Test Project", + "description": "Test Project" } From 6a7177754208878caf6ca321e84add9c25bc72d5 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sat, 12 Mar 2022 12:42:48 +0000 Subject: [PATCH 11/41] Add references to npm and drakkar package config specs --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c483fdd..7049919 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,8 @@ - Fetch and install Vala dependencies from Git URLs - Integrate with Meson and Flatpak + +## vamp.json spec inspirations + +- npm: https://docs.npmjs.com/cli/v8/configuring-npm/package-json +- drakkar: https://github.com/valum-framework/drakkar From 18f2672497c0c695caf27508948bd1caeb00ef57 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sat, 12 Mar 2022 13:25:34 +0000 Subject: [PATCH 12/41] Full package config file test --- tests/FileTest.vala | 28 ----------------------- tests/FileTests.vala | 53 ++++++++++++++++++++++++++++++++++++++++++++ tests/config.vapi.in | 3 +++ tests/full-vamp.json | 48 +++++++++++++++++++++++++++++++++++++++ tests/meson.build | 9 ++++++-- 5 files changed, 111 insertions(+), 30 deletions(-) delete mode 100644 tests/FileTest.vala create mode 100644 tests/FileTests.vala create mode 100644 tests/full-vamp.json diff --git a/tests/FileTest.vala b/tests/FileTest.vala deleted file mode 100644 index 04498cd..0000000 --- a/tests/FileTest.vala +++ /dev/null @@ -1,28 +0,0 @@ -namespace Vamp { - class FileTest { - public static int main () { - string package_contents; - try { - bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); - } - print ("Test package file contents:\n%s", package_contents); - desrialise_package_config (package_contents); - } catch (FileError e) { - error (e.message); - } - return 0; - } - - private static Vamp.Package desrialise_package_config (string config_data) { - var parser = new Json.Parser (); - try { - parser.load_from_data (config_data); - return Vamp.Package.from_json (parser.get_root ()); - } catch (Error e) { - error ("Unable to parse the package config data: %s\n", e.message); - } - } - } -} diff --git a/tests/FileTests.vala b/tests/FileTests.vala new file mode 100644 index 0000000..2ce97b4 --- /dev/null +++ b/tests/FileTests.vala @@ -0,0 +1,53 @@ +namespace Vamp { + class FileTest { + public static int main (string[] args) { + Test.init (ref args); + + Test.add_func ("/vamp/basic_config", () => { + string package_contents; + try { + bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); + } + Test.message ("Test package file contents:\n%s", package_contents); + Vamp.Package package = desrialise_package_config (package_contents); + Test.message ("Package name: %s\n", package.name); + Test.message ("Package version: %s\n", package.version); + Test.message ("Package description: %s\n", package.description); + } catch (FileError e) { + error (e.message); + } + }); + + Test.add_func ("/vamp/full_config", () => { + string package_contents; + try { + bool did_open = FileUtils.get_contents (TestConfig.FULL_TEST_PACKAGE_FILE, out package_contents); + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.FULL_TEST_PACKAGE_FILE)); + } + Test.message ("Test package file contents:\n%s", package_contents); + Vamp.Package package = desrialise_package_config (package_contents); + Test.message ("Package name: %s\n", package.name); + Test.message ("Package version: %s\n", package.version); + Test.message ("Package description: %s\n", package.description); + } catch (FileError e) { + error (e.message); + } + }); + + return Test.run (); + } + + private static Vamp.Package desrialise_package_config (string config_data) { + var parser = new Json.Parser (); + try { + parser.load_from_data (config_data); + return Vamp.Package.from_json (parser.get_root ()); + } catch (Error e) { + error ("Unable to parse the package config data: %s\n", e.message); + } + } + } +} diff --git a/tests/config.vapi.in b/tests/config.vapi.in index cac5fb4..60cfcbf 100644 --- a/tests/config.vapi.in +++ b/tests/config.vapi.in @@ -2,4 +2,7 @@ namespace TestConfig { [CCode (cname = "TEST_PACKAGE_FILE")] public const string TEST_PACKAGE_FILE; + + [CCode (cname = "FULL_TEST_PACKAGE_FILE")] + public const string FULL_TEST_PACKAGE_FILE; } diff --git a/tests/full-vamp.json b/tests/full-vamp.json new file mode 100644 index 0000000..990bb12 --- /dev/null +++ b/tests/full-vamp.json @@ -0,0 +1,48 @@ +{ + "name": "test-project", + "version": "0.0.1", + "description": "A Test Project", + "keywords": ["test", "project", "fake", "mock"], + "homepage": "https://wwww.test.com", + "bugs": { + "url": "https://www.notgithub.com/owner/project/issues", + "email": "bugs@test.com" + }, + "license": "MIT", + "author": { + "name": "vamp-dev", + "email": "vamp-dev@vamp.org", + "url": "https://vamp-dev.com" + }, + "contributors": [ + { + "name": "vamp-dev-2", + "email": "vamp-dev-2@vamp.org", + "url": "https://vamp-dev-2.com" + }, + { + "name": "vamp-dev-3", + "email": "vamp-dev-3@vamp.org", + "url": "https://vamp-dev-3.com" + } + ], + "funding": [ + { + "type": "individual", + "url": "https://www.vamp.com/donate" + } + ], + "files": [ + "./main-module/**/*", + "./extra-module/**/*" + ], + "dependencies": { + "json-glib": "^1.6.0" + }, + "dev_dependencies": { + "g-ir-compiler": "^1.6.0" + }, + "optional_dependencies": { + "valadoc": "^0.48.0" + } +} diff --git a/tests/meson.build b/tests/meson.build index ff9a2ab..940b2df 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -8,6 +8,7 @@ configure_file ( ) confht = configuration_data() confht.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'vamp.json') +confht.set_quoted ('FULL_TEST_PACKAGE_FILE', meson.current_source_dir() / 'full-vamp.json') configure_file(output : 'config.h', configuration : confht) @@ -25,6 +26,10 @@ test_dependencies = [ vamp_dep, ] +file_test_sources = [ + 'FileTests.vala' +] + foreach dep : dependencies test_dependencies += dep endforeach @@ -33,12 +38,12 @@ test_executable = executable('vamp-tests', test_sources, dependencies: test_dependencies ) -file_test_executable = executable('file-test', 'FileTest.vala', +file_test_executable = executable('file-test', file_test_sources, dependencies: test_dependencies, vala_args: vala_args, ) test('vamp-tests', test_executable) -test('file-test', file_test_executable) +test('file-tests', file_test_executable) endif From 4027429ecb6693ca29216431ee8ba9bef5ff6fb3 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sat, 12 Mar 2022 20:16:20 +0000 Subject: [PATCH 13/41] Fix: HashMap properties failing to be deserialized --- src/models/Package.vala | 19 +++++++++++++++---- tests/FileTests.vala | 3 +++ tests/full-vamp.json | 4 ++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index ab14d44..af71942 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -112,12 +112,21 @@ public class Vamp.Package : Object, Json.Serializable { return false; case "dependencies": - return true; - case "dev-dependencies": - return true; - case "optional-dependencies": + if (property_node.get_node_type () != OBJECT) { + @value = {}; + return false; + } + + var result = new Gee.HashMap (); + + property_node.get_object ().foreach_member ((obj, member_name, member_node) => { + result.set (member_name, member_node.get_string ()); + }); + + @value = result; + return true; default: @@ -129,6 +138,8 @@ public class Vamp.Package : Object, Json.Serializable { ); } } + + // TODO: Add "serialize_property" method } public class Vamp.Repository : Object { diff --git a/tests/FileTests.vala b/tests/FileTests.vala index 2ce97b4..aae2ca1 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -32,6 +32,9 @@ namespace Vamp { Test.message ("Package name: %s\n", package.name); Test.message ("Package version: %s\n", package.version); Test.message ("Package description: %s\n", package.description); + Test.message ("Package dependencies: %s\n", package.dependencies["json-glib"]); + Test.message ("Package developer dependencies: %s\n", package.dev_dependencies["g-ir-compiler"]); + Test.message ("Package optional dependencies: %s\n", package.optional_dependencies["valadoc"]); } catch (FileError e) { error (e.message); } diff --git a/tests/full-vamp.json b/tests/full-vamp.json index 990bb12..127700f 100644 --- a/tests/full-vamp.json +++ b/tests/full-vamp.json @@ -36,6 +36,10 @@ "./main-module/**/*", "./extra-module/**/*" ], + "repository": { + "type": "git", + "url": "https://www.notgithub.com/owner/project" + }, "dependencies": { "json-glib": "^1.6.0" }, From 68192a68a4f808f9a8de6087bfec8ffdccf7b091 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sat, 12 Mar 2022 20:54:17 +0000 Subject: [PATCH 14/41] Fix: string_list_from_json method not adding string values --- src/models/Package.vala | 2 +- tests/FileTests.vala | 27 +++++++++++++++++---------- tests/vamp.json | 4 ++-- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index af71942..ecfa33a 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -260,7 +260,7 @@ Gee.List string_list_from_json (Json.Node node) { var result = new Gee.ArrayList (); array.foreach_element ((_, __, element_node) => { - if (element_node.get_value_type () == Type.STRING) { + if (element_node.get_value_type () != Type.STRING) { return; } diff --git a/tests/FileTests.vala b/tests/FileTests.vala index aae2ca1..0375b99 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -9,12 +9,12 @@ namespace Vamp { bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); if (!did_open) { error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); - } - Test.message ("Test package file contents:\n%s", package_contents); + } + Vamp.Package package = desrialise_package_config (package_contents); - Test.message ("Package name: %s\n", package.name); - Test.message ("Package version: %s\n", package.version); - Test.message ("Package description: %s\n", package.description); + assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); + assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); + assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); } catch (FileError e) { error (e.message); } @@ -26,12 +26,19 @@ namespace Vamp { bool did_open = FileUtils.get_contents (TestConfig.FULL_TEST_PACKAGE_FILE, out package_contents); if (!did_open) { error ("Failed to get contents from: %s".printf (TestConfig.FULL_TEST_PACKAGE_FILE)); - } - Test.message ("Test package file contents:\n%s", package_contents); + } + Vamp.Package package = desrialise_package_config (package_contents); - Test.message ("Package name: %s\n", package.name); - Test.message ("Package version: %s\n", package.version); - Test.message ("Package description: %s\n", package.description); + assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); + assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); + assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); + Test.message ("Keywords:\n"); + package.keywords.foreach ((keyword) => { + Test.message ("%s\n", keyword); + return true; + }); + + assert (package.keywords.contains_all_array ({"test", "project", "fake", "mock"})); Test.message ("Package dependencies: %s\n", package.dependencies["json-glib"]); Test.message ("Package developer dependencies: %s\n", package.dev_dependencies["g-ir-compiler"]); Test.message ("Package optional dependencies: %s\n", package.optional_dependencies["valadoc"]); diff --git a/tests/vamp.json b/tests/vamp.json index 22d0da1..048796e 100644 --- a/tests/vamp.json +++ b/tests/vamp.json @@ -1,5 +1,5 @@ { - "name": "Test Project", + "name": "test-project", "version": "0.0.1", - "description": "Test Project" + "description": "A Test Project" } From 0b917ee069ebcdebf8b5dfc2bb68fdb1550aaf5b Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sat, 12 Mar 2022 21:37:44 +0000 Subject: [PATCH 15/41] Add "equals" methods to package models --- src/models/Package.vala | 44 +++++++++++++++++++++++++++++++++-------- tests/FileTests.vala | 19 ++++++++++++------ 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index ecfa33a..47ce668 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -119,13 +119,7 @@ public class Vamp.Package : Object, Json.Serializable { return false; } - var result = new Gee.HashMap (); - - property_node.get_object ().foreach_member ((obj, member_name, member_node) => { - result.set (member_name, member_node.get_string ()); - }); - - @value = result; + @value = string_map_from_json (property_node); return true; @@ -143,7 +137,7 @@ public class Vamp.Package : Object, Json.Serializable { } public class Vamp.Repository : Object { - public string respository_type { get; set; } + public string repository_type { get; set; } public string url { get; set; } public string directory { get; set; } @@ -155,6 +149,12 @@ public class Vamp.Repository : Object { public Json.Node to_json () { return Json.gobject_serialize (this); } + + public bool equals (Vamp.Repository other) { + return this.repository_type == other.repository_type + && this.url == other.url + && this.directory == other.directory; + } } public class Vamp.FundingInfo : Object { @@ -186,6 +186,11 @@ public class Vamp.FundingInfo : Object { public Json.Node to_json () { return Json.gobject_serialize (this); } + + public bool equals (Vamp.FundingInfo other) { + return this.funding_type == other.funding_type + && this.url == other.url; + } } public class Vamp.Person : Object { @@ -237,6 +242,12 @@ public class Vamp.Person : Object { public Json.Node to_json () { return Json.gobject_serialize (this); } + + public bool equals (Vamp.Person other) { + return this.name == other.name + && this.email == other.email + && this.url == other.url; + } } public class Vamp.Bugs : Object { @@ -251,6 +262,11 @@ public class Vamp.Bugs : Object { public Json.Node to_json () { return Json.gobject_serialize (this); } + + public bool equals (Vamp.Bugs other) { + return this.url == other.url + && this.email == other.email; + } } Gee.List string_list_from_json (Json.Node node) { @@ -269,3 +285,15 @@ Gee.List string_list_from_json (Json.Node node) { return result; } + +Gee.Map string_map_from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + + var result = new Gee.HashMap (); + + node.get_object ().foreach_member ((obj, member_name, member_node) => { + result.set (member_name, member_node.get_string ()); + }); + + return result; +} diff --git a/tests/FileTests.vala b/tests/FileTests.vala index 0375b99..ae1379e 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -32,13 +32,20 @@ namespace Vamp { assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); - Test.message ("Keywords:\n"); - package.keywords.foreach ((keyword) => { - Test.message ("%s\n", keyword); - return true; - }); + assert_cmpstrv (package.keywords.to_array (), {"test", "project", "fake", "mock"}); + assert_cmpstr (package.homepage, GLib.CompareOperator.EQ, "https://wwww.test.com"); + + // Assert bugs + assert_cmpstr (package.bugs.url, GLib.CompareOperator.EQ, "https://www.notgithub.com/owner/project/issues"); + assert_cmpstr (package.bugs.email, GLib.CompareOperator.EQ, "bugs@test.com"); + + assert_cmpstr (package.license, GLib.CompareOperator.EQ, "MIT"); + + // Assert author + assert_cmpstr (package.author.name, CompareOperator.EQ, "vamp-dev"); + assert_cmpstr (package.author.email, CompareOperator.EQ, "vamp-dev@vamp.org"); + assert_cmpstr (package.author.url, CompareOperator.EQ, "https://vamp-dev.com"); - assert (package.keywords.contains_all_array ({"test", "project", "fake", "mock"})); Test.message ("Package dependencies: %s\n", package.dependencies["json-glib"]); Test.message ("Package developer dependencies: %s\n", package.dev_dependencies["g-ir-compiler"]); Test.message ("Package optional dependencies: %s\n", package.optional_dependencies["valadoc"]); From 7569274355b8b3bdef72d54abd0a5d8b1f654be7 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 11:40:26 +0000 Subject: [PATCH 16/41] Check if contributors are parsed correctly --- tests/FileTests.vala | 50 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/tests/FileTests.vala b/tests/FileTests.vala index ae1379e..8bfa4eb 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -35,16 +35,14 @@ namespace Vamp { assert_cmpstrv (package.keywords.to_array (), {"test", "project", "fake", "mock"}); assert_cmpstr (package.homepage, GLib.CompareOperator.EQ, "https://wwww.test.com"); - // Assert bugs - assert_cmpstr (package.bugs.url, GLib.CompareOperator.EQ, "https://www.notgithub.com/owner/project/issues"); - assert_cmpstr (package.bugs.email, GLib.CompareOperator.EQ, "bugs@test.com"); - + // We assert objects this way so that: + // 1. We know the exact value of each object property + // 2. We can easily update our asserts as we change the + // object's properties. + assert_full_config_bugs (package.bugs); assert_cmpstr (package.license, GLib.CompareOperator.EQ, "MIT"); - - // Assert author - assert_cmpstr (package.author.name, CompareOperator.EQ, "vamp-dev"); - assert_cmpstr (package.author.email, CompareOperator.EQ, "vamp-dev@vamp.org"); - assert_cmpstr (package.author.url, CompareOperator.EQ, "https://vamp-dev.com"); + assert_full_config_author (package.author); + assert_full_config_contributors (package.contributors); Test.message ("Package dependencies: %s\n", package.dependencies["json-glib"]); Test.message ("Package developer dependencies: %s\n", package.dev_dependencies["g-ir-compiler"]); @@ -57,6 +55,40 @@ namespace Vamp { return Test.run (); } + private static void assert_full_config_contributors (Gee.List contributors) { + for (int i = 0; i < contributors.size; i++) { + Person contributor = contributors[i]; + switch (i) { + case 0: + assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-2"); + assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-2@vamp.org"); + assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-2.com"); + break; + case 1: + assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-3"); + assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-3@vamp.org"); + assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-3.com"); + break; + } + + if (i == contributors.size - 1 && i != 1) { + Test.message ("Test failed! - Did not parse 2 contributors.\nParsed: %d contributor(s).", i + 1); + Test.fail (); + } + } + } + + private static void assert_full_config_author (Vamp.Person author) { + assert_cmpstr (author.name, CompareOperator.EQ, "vamp-dev"); + assert_cmpstr (author.email, CompareOperator.EQ, "vamp-dev@vamp.org"); + assert_cmpstr (author.url, CompareOperator.EQ, "https://vamp-dev.com"); + } + + private static void assert_full_config_bugs (Vamp.Bugs bugs) { + assert_cmpstr (bugs.email, CompareOperator.EQ, "bugs@test.com"); + assert_cmpstr (bugs.url, CompareOperator.EQ, "https://www.notgithub.com/owner/project/issues"); + } + private static Vamp.Package desrialise_package_config (string config_data) { var parser = new Json.Parser (); try { From f514b0db3da0101958b1caca6a8857aa710b5b4c Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 13:22:11 +0000 Subject: [PATCH 17/41] Handle parsing of "type" property names --- src/models/Package.vala | 32 ++++++++++++++++++++++++++++++-- tests/FileTests.vala | 20 ++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index 47ce668..1ed0be9 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -143,7 +143,21 @@ public class Vamp.Repository : Object { public static Repository from_json (Json.Node node) { assert (node.get_node_type () == OBJECT); - return (Repository) Json.gobject_deserialize (typeof (Repository), node); + var result = new Repository (); + + var obj = node.get_object (); + obj.get_members ().foreach ((member_name) => { + switch (member_name) { + case "type": + result.repository_type = obj.get_string_member (member_name); + break; + default: + result.set_property (member_name, obj.get_string_member (member_name)); + break; + } + }); + + return result; } public Json.Node to_json () { @@ -163,7 +177,21 @@ public class Vamp.FundingInfo : Object { public static FundingInfo from_json (Json.Node node) { assert (node.get_node_type () == OBJECT); - return (FundingInfo) Json.gobject_deserialize (typeof (FundingInfo), node); + var result = new FundingInfo (); + + var obj = node.get_object (); + obj.get_members ().foreach ((member_name) => { + switch (member_name) { + case "type": + result.funding_type = obj.get_string_member (member_name); + break; + default: + result.set_property (member_name, obj.get_string_member (member_name)); + break; + } + }); + + return result; } public static Gee.List list_from_json (Json.Node node) { diff --git a/tests/FileTests.vala b/tests/FileTests.vala index 8bfa4eb..f0a2a04 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -43,6 +43,7 @@ namespace Vamp { assert_cmpstr (package.license, GLib.CompareOperator.EQ, "MIT"); assert_full_config_author (package.author); assert_full_config_contributors (package.contributors); + assert_full_config_funding (package.funding); Test.message ("Package dependencies: %s\n", package.dependencies["json-glib"]); Test.message ("Package developer dependencies: %s\n", package.dev_dependencies["g-ir-compiler"]); @@ -55,6 +56,25 @@ namespace Vamp { return Test.run (); } + private static void assert_full_config_funding (Gee.List funding) { + for (int i = 0; i < funding.size; i++) { + FundingInfo funding_info = funding[i]; + switch (i) { + case 0: + assert_cmpstr (funding_info.funding_type, CompareOperator.EQ, "individual"); + assert_cmpstr (funding_info.url, CompareOperator.EQ, "https://www.vamp.com/donate"); + break; + } + + if (i == funding.size - 1 && i != 0) { + Test.message ("Test failed! - Did not parse 1 funding info item.\n" + + "Parsed: %d parsing info item(s).", i + 1 + ); + + Test.fail (); + } + } + } private static void assert_full_config_contributors (Gee.List contributors) { for (int i = 0; i < contributors.size; i++) { Person contributor = contributors[i]; From 8bd091373b077ba86c9b654035d90efed8beebdd Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 14:17:48 +0000 Subject: [PATCH 18/41] Fix: Respository property object parsing The parse result for `repository` was set to "false" even when parsing was successful --- src/models/Package.vala | 2 +- tests/FileTests.vala | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index 1ed0be9..dc51120 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -109,7 +109,7 @@ public class Vamp.Package : Object, Json.Serializable { @value = Repository.from_json (property_node); - return false; + return true; case "dependencies": case "dev-dependencies": diff --git a/tests/FileTests.vala b/tests/FileTests.vala index f0a2a04..e58b058 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -44,6 +44,8 @@ namespace Vamp { assert_full_config_author (package.author); assert_full_config_contributors (package.contributors); assert_full_config_funding (package.funding); + assert_cmpstrv (package.files.to_array (), { "./main-module/**/*", "./extra-module/**/*"}); + assert_full_config_respository (package.repository); Test.message ("Package dependencies: %s\n", package.dependencies["json-glib"]); Test.message ("Package developer dependencies: %s\n", package.dev_dependencies["g-ir-compiler"]); @@ -56,6 +58,11 @@ namespace Vamp { return Test.run (); } + private static void assert_full_config_respository (Vamp.Repository repository) { + assert_cmpstr (repository.repository_type, GLib.CompareOperator.EQ, "git"); + assert_cmpstr (repository.url, GLib.CompareOperator.EQ, "https://www.notgithub.com/owner/project"); + } + private static void assert_full_config_funding (Gee.List funding) { for (int i = 0; i < funding.size; i++) { FundingInfo funding_info = funding[i]; From b7f345366d20ec1f5daaf34beac9d2c6e13a2eab Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 14:34:57 +0000 Subject: [PATCH 19/41] Test full package configuration file deserialization --- tests/FileTests.vala | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/tests/FileTests.vala b/tests/FileTests.vala index e58b058..26417a9 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -37,7 +37,7 @@ namespace Vamp { // We assert objects this way so that: // 1. We know the exact value of each object property - // 2. We can easily update our asserts as we change the + // 2. We can easily update our asserts as we update the // object's properties. assert_full_config_bugs (package.bugs); assert_cmpstr (package.license, GLib.CompareOperator.EQ, "MIT"); @@ -46,10 +46,9 @@ namespace Vamp { assert_full_config_funding (package.funding); assert_cmpstrv (package.files.to_array (), { "./main-module/**/*", "./extra-module/**/*"}); assert_full_config_respository (package.repository); - - Test.message ("Package dependencies: %s\n", package.dependencies["json-glib"]); - Test.message ("Package developer dependencies: %s\n", package.dev_dependencies["g-ir-compiler"]); - Test.message ("Package optional dependencies: %s\n", package.optional_dependencies["valadoc"]); + assert_full_config_dependencies (package.dependencies); + assert_full_config_dev_dependencies (package.dev_dependencies); + assert_full_config_optional_dependencies (package.optional_dependencies); } catch (FileError e) { error (e.message); } @@ -58,6 +57,18 @@ namespace Vamp { return Test.run (); } + private static void assert_full_config_optional_dependencies (Gee.Map dependencies) { + assert_cmpstr (dependencies["valadoc"], GLib.CompareOperator.EQ, "^0.48.0"); + } + + private static void assert_full_config_dev_dependencies (Gee.Map dependencies) { + assert_cmpstr (dependencies["g-ir-compiler"], GLib.CompareOperator.EQ, "^1.6.0"); + } + + private static void assert_full_config_dependencies (Gee.Map dependencies) { + assert_cmpstr (dependencies["json-glib"], GLib.CompareOperator.EQ, "^1.6.0"); + } + private static void assert_full_config_respository (Vamp.Repository repository) { assert_cmpstr (repository.repository_type, GLib.CompareOperator.EQ, "git"); assert_cmpstr (repository.url, GLib.CompareOperator.EQ, "https://www.notgithub.com/owner/project"); From 536dc7103fc6e539007ee0778a55dd19c4a93d2d Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 16:11:22 +0000 Subject: [PATCH 20/41] Serialized keywords --- src/models/Package.vala | 38 +++++++++++++++++++++++++++++++++++++- tests/FileTests.vala | 39 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index dc51120..910f7c7 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -133,7 +133,31 @@ public class Vamp.Package : Object, Json.Serializable { } } - // TODO: Add "serialize_property" method + private Json.Node serialize_property ( + string property_name, + Value value_to_serialize, + ParamSpec pspec + ) { + switch (property_name) { + case "keywords": + Test.message ("Value type: %s", value_to_serialize.type_name ()); + var converted_value = (Gee.List)value_to_serialize.get_object (); + if (converted_value == null) { + var blank_array_node = new Json.Node (Json.NodeType.ARRAY); + blank_array_node.set_array (new Json.Array ()); + return null; + } + + Test.message ("Converted value size: %d", converted_value.size); + return string_list_to_json (converted_value); + default: + return default_serialize_property ( + property_name, + value_to_serialize, + pspec + ); + } + } } public class Vamp.Repository : Object { @@ -297,6 +321,18 @@ public class Vamp.Bugs : Object { } } +Json.Node string_list_to_json (Gee.List list) { + var node_array = new Json.Array.sized (list.size); + list.foreach ((element) => { + node_array.add_string_element (element); + return true; + }); + + var node = new Json.Node (Json.NodeType.ARRAY); + node.set_array (node_array); + return node; +} + Gee.List string_list_from_json (Json.Node node) { assert (node.get_node_type () == ARRAY); diff --git a/tests/FileTests.vala b/tests/FileTests.vala index 26417a9..71208ad 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -3,7 +3,7 @@ namespace Vamp { public static int main (string[] args) { Test.init (ref args); - Test.add_func ("/vamp/basic_config", () => { + Test.add_func ("/vamp/deserialize_basic_config", () => { string package_contents; try { bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); @@ -20,7 +20,7 @@ namespace Vamp { } }); - Test.add_func ("/vamp/full_config", () => { + Test.add_func ("/vamp/deserialize_full_config", () => { string package_contents; try { bool did_open = FileUtils.get_contents (TestConfig.FULL_TEST_PACKAGE_FILE, out package_contents); @@ -54,6 +54,41 @@ namespace Vamp { } }); + Test.add_func ("/vamp/serialize_basic_config", () => { + Vamp.Package package = new Vamp.Package (); + package.name = "basic-project"; + package.version = "1.0.0"; + package.description = "A basic project"; + + var generator = new Json.Generator (); + generator.pretty = true; + generator.indent = 4; + generator.set_root (package.to_json ()); + Test.message ("Serialized basic config:\n%s", generator.to_data (null)); + }); + + Test.add_func ("/vamp/serialize_full_config", () => { + Vamp.Package package = new Vamp.Package (); + package.name = "full-project"; + package.version = "1.0.0"; + package.description = "A full project"; + var keywords = new Gee.ArrayList (); + keywords.add_all_array ({"full", "project"}); + package.keywords = keywords; + package.homepage = "https://www.full-project.com"; + package.bugs = new Bugs () { + url = "https://www.full-project.com/bugs", + email = "bugs@full-project.com" + }; + + + var generator = new Json.Generator (); + generator.pretty = true; + generator.indent = 4; + generator.set_root (package.to_json ()); + Test.message ("Serialized full config:\n%s", generator.to_data (null)); + }); + return Test.run (); } From d991974ea1efc571fe716aaa776aead84e58ab38 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 19:17:23 +0000 Subject: [PATCH 21/41] Fix serialization of "type" properties --- src/models/Package.vala | 90 +++++++++++++++++++++++++++++++++++++---- tests/FileTests.vala | 40 ++++++++++++++++-- 2 files changed, 120 insertions(+), 10 deletions(-) diff --git a/src/models/Package.vala b/src/models/Package.vala index 910f7c7..561ffbc 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -140,16 +140,37 @@ public class Vamp.Package : Object, Json.Serializable { ) { switch (property_name) { case "keywords": - Test.message ("Value type: %s", value_to_serialize.type_name ()); - var converted_value = (Gee.List)value_to_serialize.get_object (); + case "files": + Gee.List converted_value = (Gee.List)value_to_serialize.get_object (); if (converted_value == null) { - var blank_array_node = new Json.Node (Json.NodeType.ARRAY); - blank_array_node.set_array (new Json.Array ()); return null; } - Test.message ("Converted value size: %d", converted_value.size); return string_list_to_json (converted_value); + case "contributors": + Gee.List converted_value = (Gee.List)value_to_serialize.get_object (); + if (converted_value == null) { + return null; + } + + return Person.list_to_json (converted_value); + + case "funding": + Gee.List converted_value = (Gee.List)value_to_serialize.get_object (); + if (converted_value == null) { + return null; + } + + return FundingInfo.list_to_json (converted_value); + + case "repository": + Vamp.Repository converted_value = (Vamp.Repository)value_to_serialize.get_object (); + + if (converted_value == null) { + return null; + } + + return converted_value.to_json (); default: return default_serialize_property ( property_name, @@ -185,7 +206,21 @@ public class Vamp.Repository : Object { } public Json.Node to_json () { - return Json.gobject_serialize (this); + var obj = new Json.Object (); + + + if (this.repository_type != null) { + obj.set_string_member ("type", this.repository_type); + } + + if (this.url != null) { + obj.set_string_member ("url", this.url); + } + + var result = new Json.Node (Json.NodeType.OBJECT); + result.set_object (obj); + + return result; } public bool equals (Vamp.Repository other) { @@ -235,8 +270,33 @@ public class Vamp.FundingInfo : Object { return result; } + public static Json.Node list_to_json (Gee.List list) { + var node_array = new Json.Array.sized (list.size); + + list.foreach ((element) => { + node_array.add_element (element.to_json ()); + return true; + }); + + var node = new Json.Node (Json.NodeType.ARRAY); + node.set_array (node_array); + return node; + } + public Json.Node to_json () { - return Json.gobject_serialize (this); + var obj = new Json.Object (); + if (this.funding_type != null) { + obj.set_string_member ("type", this.funding_type); + } + + if (this.url != null) { + obj.set_string_member ("url", this.url); + } + + var result = new Json.Node (Json.NodeType.OBJECT); + result.set_object (obj); + + return result; } public bool equals (Vamp.FundingInfo other) { @@ -245,6 +305,7 @@ public class Vamp.FundingInfo : Object { } } +// TODO: Split public classes into their own files public class Vamp.Person : Object { private static Regex regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; // vala-lint=space-before-paren @@ -272,6 +333,21 @@ public class Vamp.Person : Object { }); return result; + + + } + + public static Json.Node list_to_json (Gee.List list) { + var node_array = new Json.Array.sized (list.size); + + list.foreach ((element) => { + node_array.add_element (element.to_json ()); + return true; + }); + + var node = new Json.Node (Json.NodeType.ARRAY); + node.set_array (node_array); + return node; } public static bool try_parse (string str, out Person result) { diff --git a/tests/FileTests.vala b/tests/FileTests.vala index 71208ad..d4e8c47 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -72,15 +72,49 @@ namespace Vamp { package.name = "full-project"; package.version = "1.0.0"; package.description = "A full project"; - var keywords = new Gee.ArrayList (); - keywords.add_all_array ({"full", "project"}); - package.keywords = keywords; + package.keywords = new Gee.ArrayList.wrap ({"full", "project"}); package.homepage = "https://www.full-project.com"; package.bugs = new Bugs () { url = "https://www.full-project.com/bugs", email = "bugs@full-project.com" }; + package.license = "MIT"; + package.author = new Person () { + name = "vamp-dev", + email = "vamp-dev@vamp.org", + url = "https://www.vamp-dev.com" + }; + + package.contributors = new Gee.ArrayList.wrap ({ + new Person () { + name = "vamp-dev-2", + email = "vamp-dev-2@vamp.org", + url = "https://www.vamp-dev-2.com" + }, + new Person () { + name = "vamp-dev-3", + email = "vamp-dev-3@vamp.org", + url = "https://www.vamp-dev-3.com" + }, + }); + + package.funding = new Gee.ArrayList.wrap ({ + new FundingInfo () { + funding_type = "individual", + url = "https://www.vamp.com/donate" + } + }); + + package.files = new Gee.ArrayList.wrap ({ + "./main-module/**/*", + "./extra-module/**/*" + }); + + package.repository = new Repository () { + repository_type = "git", + url = "https://www.notgithub.com/owner/project" + }; var generator = new Json.Generator (); generator.pretty = true; From e9de045c982ddd0d7af01efd3bfb8c3dfc2c9e22 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 19:53:02 +0000 Subject: [PATCH 22/41] Serialize "dependencies" properties --- src/models/Package.vala | 26 ++++++++++++++++++++++++++ tests/FileTests.vala | 12 ++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/models/Package.vala b/src/models/Package.vala index 561ffbc..e72b381 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -171,6 +171,17 @@ public class Vamp.Package : Object, Json.Serializable { } return converted_value.to_json (); + + case "dependencies": + case "dev-dependencies": + case "optional-dependencies": + Gee.Map converted_value = (Gee.Map)value_to_serialize.get_object (); + + if (converted_value == null) { + return null; + } + + return string_map_to_json (converted_value); default: return default_serialize_property ( property_name, @@ -406,6 +417,7 @@ Json.Node string_list_to_json (Gee.List list) { var node = new Json.Node (Json.NodeType.ARRAY); node.set_array (node_array); + return node; } @@ -426,6 +438,20 @@ Gee.List string_list_from_json (Json.Node node) { return result; } + +Json.Node string_map_to_json (Gee.Map map) { + var node_object = new Json.Object (); + map.entries.foreach ((entry) => { + node_object.set_string_member (entry.key, entry.value); + return true; + }); + + var node = new Json.Node (Json.NodeType.OBJECT); + node.set_object (node_object); + + return node; +} + Gee.Map string_map_from_json (Json.Node node) { assert (node.get_node_type () == OBJECT); diff --git a/tests/FileTests.vala b/tests/FileTests.vala index d4e8c47..3b4d111 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -116,6 +116,18 @@ namespace Vamp { url = "https://www.notgithub.com/owner/project" }; + var dependencies = new Gee.HashMap (); + dependencies["json-glib"] = "^1.0.0"; + package.dependencies = dependencies; + + var dev_dependencies = new Gee.HashMap (); + dev_dependencies["g-ir-compiler"] = "^1.2.0"; + package.dev_dependencies = dev_dependencies; + + var optional_dependencies = new Gee.HashMap (); + optional_dependencies["valadoc"] = "^0.56.0"; + package.optional_dependencies = optional_dependencies; + var generator = new Json.Generator (); generator.pretty = true; generator.indent = 4; From b0092a7d1dae63ccebbab5edb35992bdb176475c Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 20:20:35 +0000 Subject: [PATCH 23/41] Compare serialized content with expecrted content --- .editorconfig | 9 +++++ tests/FileTests.vala | 34 ++++++++++++++++- tests/assets/expected-basic-vamp.json | 5 +++ tests/assets/expected-full-vamp.json | 55 +++++++++++++++++++++++++++ tests/{ => assets}/full-vamp.json | 2 +- tests/{ => assets}/vamp.json | 0 tests/config.vapi.in | 6 +++ tests/meson.build | 6 ++- 8 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 tests/assets/expected-basic-vamp.json create mode 100644 tests/assets/expected-full-vamp.json rename tests/{ => assets}/full-vamp.json (99%) rename tests/{ => assets}/vamp.json (100%) diff --git a/.editorconfig b/.editorconfig index 82abb93..83d981b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,3 +13,12 @@ tab_width = 4 # Markup files [{*.html,*.xml,*.xml.in,*.yml}] tab_width = 2 + +# Ignore paths +[/tests/assets/*] +charset = unset +end_of_line = unset +indent_size = unset +indent_style = unset +insert_final_newline = unset +tab_width = unset diff --git a/tests/FileTests.vala b/tests/FileTests.vala index 3b4d111..2ba9bfd 100644 --- a/tests/FileTests.vala +++ b/tests/FileTests.vala @@ -64,7 +64,22 @@ namespace Vamp { generator.pretty = true; generator.indent = 4; generator.set_root (package.to_json ()); - Test.message ("Serialized basic config:\n%s", generator.to_data (null)); + + try { + string expected_content; + bool did_open = FileUtils.get_contents (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE, + out expected_content + ); + + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE)); + } + + assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); + + } catch (Error e) { + error (e.message); + } }); Test.add_func ("/vamp/serialize_full_config", () => { @@ -132,7 +147,24 @@ namespace Vamp { generator.pretty = true; generator.indent = 4; generator.set_root (package.to_json ()); + Test.message ("Serialized full config:\n%s", generator.to_data (null)); + + try { + string expected_content; + bool did_open = FileUtils.get_contents (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE, + out expected_content + ); + + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE)); + } + + assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); + + } catch (Error e) { + error (e.message); + } }); return Test.run (); diff --git a/tests/assets/expected-basic-vamp.json b/tests/assets/expected-basic-vamp.json new file mode 100644 index 0000000..5e33abe --- /dev/null +++ b/tests/assets/expected-basic-vamp.json @@ -0,0 +1,5 @@ +{ + "name" : "basic-project", + "version" : "1.0.0", + "description" : "A basic project" +} \ No newline at end of file diff --git a/tests/assets/expected-full-vamp.json b/tests/assets/expected-full-vamp.json new file mode 100644 index 0000000..6b7828e --- /dev/null +++ b/tests/assets/expected-full-vamp.json @@ -0,0 +1,55 @@ +{ + "name" : "full-project", + "version" : "1.0.0", + "description" : "A full project", + "keywords" : [ + "full", + "project" + ], + "homepage" : "https://www.full-project.com", + "bugs" : { + "url" : "https://www.full-project.com/bugs", + "email" : "bugs@full-project.com" + }, + "license" : "MIT", + "author" : { + "name" : "vamp-dev", + "email" : "vamp-dev@vamp.org", + "url" : "https://www.vamp-dev.com" + }, + "contributors" : [ + { + "name" : "vamp-dev-2", + "email" : "vamp-dev-2@vamp.org", + "url" : "https://www.vamp-dev-2.com" + }, + { + "name" : "vamp-dev-3", + "email" : "vamp-dev-3@vamp.org", + "url" : "https://www.vamp-dev-3.com" + } + ], + "funding" : [ + { + "type" : "individual", + "url" : "https://www.vamp.com/donate" + } + ], + "files" : [ + "./main-module/**/*", + "./extra-module/**/*" + ], + "repository" : { + "type" : "git", + "url" : "https://www.notgithub.com/owner/project" + }, + "dependencies" : { + "json-glib" : "^1.0.0" + }, + "dev-dependencies" : { + "g-ir-compiler" : "^1.2.0" + }, + "optional-dependencies" : { + "valadoc" : "^0.56.0" + } +} \ No newline at end of file diff --git a/tests/full-vamp.json b/tests/assets/full-vamp.json similarity index 99% rename from tests/full-vamp.json rename to tests/assets/full-vamp.json index 127700f..63bd869 100644 --- a/tests/full-vamp.json +++ b/tests/assets/full-vamp.json @@ -49,4 +49,4 @@ "optional_dependencies": { "valadoc": "^0.48.0" } -} +} \ No newline at end of file diff --git a/tests/vamp.json b/tests/assets/vamp.json similarity index 100% rename from tests/vamp.json rename to tests/assets/vamp.json diff --git a/tests/config.vapi.in b/tests/config.vapi.in index 60cfcbf..26bc8c7 100644 --- a/tests/config.vapi.in +++ b/tests/config.vapi.in @@ -5,4 +5,10 @@ namespace TestConfig { [CCode (cname = "FULL_TEST_PACKAGE_FILE")] public const string FULL_TEST_PACKAGE_FILE; + + [CCode (cname = "BASIC_EXPECTED_TEST_PACKAGE_FILE")] + public const string BASIC_EXPECTED_TEST_PACKAGE_FILE; + + [CCode (cname = "FULL_EXPECTED_TEST_PACKAGE_FILE")] + public const string FULL_EXPECTED_TEST_PACKAGE_FILE; } diff --git a/tests/meson.build b/tests/meson.build index 940b2df..b261c62 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -7,8 +7,10 @@ configure_file ( configuration: conft ) confht = configuration_data() -confht.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'vamp.json') -confht.set_quoted ('FULL_TEST_PACKAGE_FILE', meson.current_source_dir() / 'full-vamp.json') +confht.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'vamp.json') +confht.set_quoted ('FULL_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'full-vamp.json') +confht.set_quoted ('BASIC_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-basic-vamp.json') +confht.set_quoted ('FULL_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-full-vamp.json') configure_file(output : 'config.h', configuration : confht) From 7fc96a32045e9a5ad16ec8491cb7cad4f34a87da Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 20:35:23 +0000 Subject: [PATCH 24/41] Move File test to unit tests file --- tests/FileTests.vala | 253 ------------------------------------------- tests/UnitTests.vala | 240 +++++++++++++++++++++++++++++++++++++++- tests/meson.build | 83 ++++++-------- 3 files changed, 271 insertions(+), 305 deletions(-) delete mode 100644 tests/FileTests.vala diff --git a/tests/FileTests.vala b/tests/FileTests.vala deleted file mode 100644 index 2ba9bfd..0000000 --- a/tests/FileTests.vala +++ /dev/null @@ -1,253 +0,0 @@ -namespace Vamp { - class FileTest { - public static int main (string[] args) { - Test.init (ref args); - - Test.add_func ("/vamp/deserialize_basic_config", () => { - string package_contents; - try { - bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); - } - - Vamp.Package package = desrialise_package_config (package_contents); - assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); - assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); - assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); - } catch (FileError e) { - error (e.message); - } - }); - - Test.add_func ("/vamp/deserialize_full_config", () => { - string package_contents; - try { - bool did_open = FileUtils.get_contents (TestConfig.FULL_TEST_PACKAGE_FILE, out package_contents); - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.FULL_TEST_PACKAGE_FILE)); - } - - Vamp.Package package = desrialise_package_config (package_contents); - assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); - assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); - assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); - assert_cmpstrv (package.keywords.to_array (), {"test", "project", "fake", "mock"}); - assert_cmpstr (package.homepage, GLib.CompareOperator.EQ, "https://wwww.test.com"); - - // We assert objects this way so that: - // 1. We know the exact value of each object property - // 2. We can easily update our asserts as we update the - // object's properties. - assert_full_config_bugs (package.bugs); - assert_cmpstr (package.license, GLib.CompareOperator.EQ, "MIT"); - assert_full_config_author (package.author); - assert_full_config_contributors (package.contributors); - assert_full_config_funding (package.funding); - assert_cmpstrv (package.files.to_array (), { "./main-module/**/*", "./extra-module/**/*"}); - assert_full_config_respository (package.repository); - assert_full_config_dependencies (package.dependencies); - assert_full_config_dev_dependencies (package.dev_dependencies); - assert_full_config_optional_dependencies (package.optional_dependencies); - } catch (FileError e) { - error (e.message); - } - }); - - Test.add_func ("/vamp/serialize_basic_config", () => { - Vamp.Package package = new Vamp.Package (); - package.name = "basic-project"; - package.version = "1.0.0"; - package.description = "A basic project"; - - var generator = new Json.Generator (); - generator.pretty = true; - generator.indent = 4; - generator.set_root (package.to_json ()); - - try { - string expected_content; - bool did_open = FileUtils.get_contents (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE, - out expected_content - ); - - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE)); - } - - assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); - - } catch (Error e) { - error (e.message); - } - }); - - Test.add_func ("/vamp/serialize_full_config", () => { - Vamp.Package package = new Vamp.Package (); - package.name = "full-project"; - package.version = "1.0.0"; - package.description = "A full project"; - package.keywords = new Gee.ArrayList.wrap ({"full", "project"}); - package.homepage = "https://www.full-project.com"; - package.bugs = new Bugs () { - url = "https://www.full-project.com/bugs", - email = "bugs@full-project.com" - }; - - package.license = "MIT"; - package.author = new Person () { - name = "vamp-dev", - email = "vamp-dev@vamp.org", - url = "https://www.vamp-dev.com" - }; - - package.contributors = new Gee.ArrayList.wrap ({ - new Person () { - name = "vamp-dev-2", - email = "vamp-dev-2@vamp.org", - url = "https://www.vamp-dev-2.com" - }, - new Person () { - name = "vamp-dev-3", - email = "vamp-dev-3@vamp.org", - url = "https://www.vamp-dev-3.com" - }, - }); - - package.funding = new Gee.ArrayList.wrap ({ - new FundingInfo () { - funding_type = "individual", - url = "https://www.vamp.com/donate" - } - }); - - package.files = new Gee.ArrayList.wrap ({ - "./main-module/**/*", - "./extra-module/**/*" - }); - - package.repository = new Repository () { - repository_type = "git", - url = "https://www.notgithub.com/owner/project" - }; - - var dependencies = new Gee.HashMap (); - dependencies["json-glib"] = "^1.0.0"; - package.dependencies = dependencies; - - var dev_dependencies = new Gee.HashMap (); - dev_dependencies["g-ir-compiler"] = "^1.2.0"; - package.dev_dependencies = dev_dependencies; - - var optional_dependencies = new Gee.HashMap (); - optional_dependencies["valadoc"] = "^0.56.0"; - package.optional_dependencies = optional_dependencies; - - var generator = new Json.Generator (); - generator.pretty = true; - generator.indent = 4; - generator.set_root (package.to_json ()); - - Test.message ("Serialized full config:\n%s", generator.to_data (null)); - - try { - string expected_content; - bool did_open = FileUtils.get_contents (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE, - out expected_content - ); - - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE)); - } - - assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); - - } catch (Error e) { - error (e.message); - } - }); - - return Test.run (); - } - - private static void assert_full_config_optional_dependencies (Gee.Map dependencies) { - assert_cmpstr (dependencies["valadoc"], GLib.CompareOperator.EQ, "^0.48.0"); - } - - private static void assert_full_config_dev_dependencies (Gee.Map dependencies) { - assert_cmpstr (dependencies["g-ir-compiler"], GLib.CompareOperator.EQ, "^1.6.0"); - } - - private static void assert_full_config_dependencies (Gee.Map dependencies) { - assert_cmpstr (dependencies["json-glib"], GLib.CompareOperator.EQ, "^1.6.0"); - } - - private static void assert_full_config_respository (Vamp.Repository repository) { - assert_cmpstr (repository.repository_type, GLib.CompareOperator.EQ, "git"); - assert_cmpstr (repository.url, GLib.CompareOperator.EQ, "https://www.notgithub.com/owner/project"); - } - - private static void assert_full_config_funding (Gee.List funding) { - for (int i = 0; i < funding.size; i++) { - FundingInfo funding_info = funding[i]; - switch (i) { - case 0: - assert_cmpstr (funding_info.funding_type, CompareOperator.EQ, "individual"); - assert_cmpstr (funding_info.url, CompareOperator.EQ, "https://www.vamp.com/donate"); - break; - } - - if (i == funding.size - 1 && i != 0) { - Test.message ("Test failed! - Did not parse 1 funding info item.\n" - + "Parsed: %d parsing info item(s).", i + 1 - ); - - Test.fail (); - } - } - } - private static void assert_full_config_contributors (Gee.List contributors) { - for (int i = 0; i < contributors.size; i++) { - Person contributor = contributors[i]; - switch (i) { - case 0: - assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-2"); - assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-2@vamp.org"); - assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-2.com"); - break; - case 1: - assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-3"); - assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-3@vamp.org"); - assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-3.com"); - break; - } - - if (i == contributors.size - 1 && i != 1) { - Test.message ("Test failed! - Did not parse 2 contributors.\nParsed: %d contributor(s).", i + 1); - Test.fail (); - } - } - } - - private static void assert_full_config_author (Vamp.Person author) { - assert_cmpstr (author.name, CompareOperator.EQ, "vamp-dev"); - assert_cmpstr (author.email, CompareOperator.EQ, "vamp-dev@vamp.org"); - assert_cmpstr (author.url, CompareOperator.EQ, "https://vamp-dev.com"); - } - - private static void assert_full_config_bugs (Vamp.Bugs bugs) { - assert_cmpstr (bugs.email, CompareOperator.EQ, "bugs@test.com"); - assert_cmpstr (bugs.url, CompareOperator.EQ, "https://www.notgithub.com/owner/project/issues"); - } - - private static Vamp.Package desrialise_package_config (string config_data) { - var parser = new Json.Parser (); - try { - parser.load_from_data (config_data); - return Vamp.Package.from_json (parser.get_root ()); - } catch (Error e) { - error ("Unable to parse the package config data: %s\n", e.message); - } - } - } -} diff --git a/tests/UnitTests.vala b/tests/UnitTests.vala index f9c0d45..e8b7aec 100644 --- a/tests/UnitTests.vala +++ b/tests/UnitTests.vala @@ -3,15 +3,247 @@ namespace Vamp { public static int main (string[] args) { Test.init (ref args); - Test.add_func ("/vamp/foo", () => { - assert_null (null); + Test.add_func ("/vamp/deserialize_basic_config", () => { + string package_contents; + try { + bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); + } + + Vamp.Package package = desrialise_package_config (package_contents); + assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); + assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); + assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); + } catch (FileError e) { + error (e.message); + } }); - Test.add_func ("/vamp/bar", () => { - assert_true (true); + Test.add_func ("/vamp/deserialize_full_config", () => { + string package_contents; + try { + bool did_open = FileUtils.get_contents (TestConfig.FULL_TEST_PACKAGE_FILE, out package_contents); + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.FULL_TEST_PACKAGE_FILE)); + } + + Vamp.Package package = desrialise_package_config (package_contents); + assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); + assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); + assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); + assert_cmpstrv (package.keywords.to_array (), {"test", "project", "fake", "mock"}); + assert_cmpstr (package.homepage, GLib.CompareOperator.EQ, "https://wwww.test.com"); + + // We assert objects this way so that: + // 1. We know the exact value of each object property + // 2. We can easily update our asserts as we update the + // object's properties. + assert_full_config_bugs (package.bugs); + assert_cmpstr (package.license, GLib.CompareOperator.EQ, "MIT"); + assert_full_config_author (package.author); + assert_full_config_contributors (package.contributors); + assert_full_config_funding (package.funding); + assert_cmpstrv (package.files.to_array (), { "./main-module/**/*", "./extra-module/**/*"}); + assert_full_config_respository (package.repository); + assert_full_config_dependencies (package.dependencies); + assert_full_config_dev_dependencies (package.dev_dependencies); + assert_full_config_optional_dependencies (package.optional_dependencies); + } catch (FileError e) { + error (e.message); + } + }); + + Test.add_func ("/vamp/serialize_basic_config", () => { + Vamp.Package package = new Vamp.Package (); + package.name = "basic-project"; + package.version = "1.0.0"; + package.description = "A basic project"; + + var generator = new Json.Generator (); + generator.pretty = true; + generator.indent = 4; + generator.set_root (package.to_json ()); + try { + string expected_content; + bool did_open = FileUtils.get_contents (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE, + out expected_content + ); + + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE)); + } + + assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); + + } catch (Error e) { + error (e.message); + } + }); + + Test.add_func ("/vamp/serialize_full_config", () => { + Vamp.Package package = new Vamp.Package (); + package.name = "full-project"; + package.version = "1.0.0"; + package.description = "A full project"; + package.keywords = new Gee.ArrayList.wrap ({"full", "project"}); + package.homepage = "https://www.full-project.com"; + package.bugs = new Bugs () { + url = "https://www.full-project.com/bugs", + email = "bugs@full-project.com" + }; + + package.license = "MIT"; + package.author = new Person () { + name = "vamp-dev", + email = "vamp-dev@vamp.org", + url = "https://www.vamp-dev.com" + }; + + package.contributors = new Gee.ArrayList.wrap ({ + new Person () { + name = "vamp-dev-2", + email = "vamp-dev-2@vamp.org", + url = "https://www.vamp-dev-2.com" + }, + new Person () { + name = "vamp-dev-3", + email = "vamp-dev-3@vamp.org", + url = "https://www.vamp-dev-3.com" + }, + }); + + package.funding = new Gee.ArrayList.wrap ({ + new FundingInfo () { + funding_type = "individual", + url = "https://www.vamp.com/donate" + } + }); + + package.files = new Gee.ArrayList.wrap ({ + "./main-module/**/*", + "./extra-module/**/*" + }); + + package.repository = new Repository () { + repository_type = "git", + url = "https://www.notgithub.com/owner/project" + }; + + var dependencies = new Gee.HashMap (); + dependencies["json-glib"] = "^1.0.0"; + package.dependencies = dependencies; + + var dev_dependencies = new Gee.HashMap (); + dev_dependencies["g-ir-compiler"] = "^1.2.0"; + package.dev_dependencies = dev_dependencies; + + var optional_dependencies = new Gee.HashMap (); + optional_dependencies["valadoc"] = "^0.56.0"; + package.optional_dependencies = optional_dependencies; + + var generator = new Json.Generator (); + generator.pretty = true; + generator.indent = 4; + generator.set_root (package.to_json ()); + try { + string expected_content; + bool did_open = FileUtils.get_contents (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE, + out expected_content + ); + + if (!did_open) { + error ("Failed to get contents from: %s".printf (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE)); + } + + assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); + + } catch (Error e) { + error (e.message); + } }); return Test.run (); } + + private static void assert_full_config_optional_dependencies (Gee.Map dependencies) { + assert_cmpstr (dependencies["valadoc"], GLib.CompareOperator.EQ, "^0.48.0"); + } + + private static void assert_full_config_dev_dependencies (Gee.Map dependencies) { + assert_cmpstr (dependencies["g-ir-compiler"], GLib.CompareOperator.EQ, "^1.6.0"); + } + + private static void assert_full_config_dependencies (Gee.Map dependencies) { + assert_cmpstr (dependencies["json-glib"], GLib.CompareOperator.EQ, "^1.6.0"); + } + + private static void assert_full_config_respository (Vamp.Repository repository) { + assert_cmpstr (repository.repository_type, GLib.CompareOperator.EQ, "git"); + assert_cmpstr (repository.url, GLib.CompareOperator.EQ, "https://www.notgithub.com/owner/project"); + } + + private static void assert_full_config_funding (Gee.List funding) { + for (int i = 0; i < funding.size; i++) { + FundingInfo funding_info = funding[i]; + switch (i) { + case 0: + assert_cmpstr (funding_info.funding_type, CompareOperator.EQ, "individual"); + assert_cmpstr (funding_info.url, CompareOperator.EQ, "https://www.vamp.com/donate"); + break; + } + + if (i == funding.size - 1 && i != 0) { + Test.message ("Test failed! - Did not parse 1 funding info item.\n" + + "Parsed: %d parsing info item(s).", i + 1 + ); + + Test.fail (); + } + } + } + private static void assert_full_config_contributors (Gee.List contributors) { + for (int i = 0; i < contributors.size; i++) { + Person contributor = contributors[i]; + switch (i) { + case 0: + assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-2"); + assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-2@vamp.org"); + assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-2.com"); + break; + case 1: + assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-3"); + assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-3@vamp.org"); + assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-3.com"); + break; + } + + if (i == contributors.size - 1 && i != 1) { + Test.message ("Test failed! - Did not parse 2 contributors.\nParsed: %d contributor(s).", i + 1); + Test.fail (); + } + } + } + + private static void assert_full_config_author (Vamp.Person author) { + assert_cmpstr (author.name, CompareOperator.EQ, "vamp-dev"); + assert_cmpstr (author.email, CompareOperator.EQ, "vamp-dev@vamp.org"); + assert_cmpstr (author.url, CompareOperator.EQ, "https://vamp-dev.com"); + } + + private static void assert_full_config_bugs (Vamp.Bugs bugs) { + assert_cmpstr (bugs.email, CompareOperator.EQ, "bugs@test.com"); + assert_cmpstr (bugs.url, CompareOperator.EQ, "https://www.notgithub.com/owner/project/issues"); + } + + private static Vamp.Package desrialise_package_config (string config_data) { + var parser = new Json.Parser (); + try { + parser.load_from_data (config_data); + return Vamp.Package.from_json (parser.get_root ()); + } catch (Error e) { + error ("Unable to parse the package config data: %s\n", e.message); + } + } } } diff --git a/tests/meson.build b/tests/meson.build index b261c62..0a93d18 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,51 +1,38 @@ if get_option('tests') - -conft = configuration_data() -configure_file ( - input: 'config.vapi.in', - output: 'config.vapi', - configuration: conft -) -confht = configuration_data() -confht.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'vamp.json') -confht.set_quoted ('FULL_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'full-vamp.json') -confht.set_quoted ('BASIC_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-basic-vamp.json') -confht.set_quoted ('FULL_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-full-vamp.json') -configure_file(output : 'config.h', - configuration : confht) - - -vala_args = [ - '--vapidir', meson.current_build_dir(), - '--pkg', 'config' -] - -test_sources = [ - 'UnitTests.vala' -] - -test_dependencies = [ - vamp_dep, -] - -file_test_sources = [ - 'FileTests.vala' -] - -foreach dep : dependencies - test_dependencies += dep -endforeach - -test_executable = executable('vamp-tests', test_sources, - dependencies: test_dependencies -) - -file_test_executable = executable('file-test', file_test_sources, - dependencies: test_dependencies, - vala_args: vala_args, -) - -test('vamp-tests', test_executable) -test('file-tests', file_test_executable) + conf = configuration_data() + conf.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'vamp.json') + conf.set_quoted ('FULL_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'full-vamp.json') + conf.set_quoted ('BASIC_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-basic-vamp.json') + conf.set_quoted ('FULL_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-full-vamp.json') + + configure_file ( + input: 'config.vapi.in', + output: 'config.vapi', + configuration: conf + ) + + vala_args = [ + '--vapidir', meson.current_build_dir(), + '--pkg', 'config' + ] + + test_sources = [ + 'UnitTests.vala' + ] + + test_dependencies = [ + vamp_dep, + ] + + foreach dep : dependencies + test_dependencies += dep + endforeach + + test_executable = executable('vamp-tests', test_sources, + dependencies: test_dependencies, + vala_args: vala_args + ) + + test('vamp-tests', test_executable) endif From cd9c2a2a26b119698a6c9db8b64b2d67a5277e90 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 20:52:07 +0000 Subject: [PATCH 25/41] refactor: Move public model classes into their own files --- src/meson.build | 23 ++-- src/models/Bugs.vala | 18 +++ src/models/FundingInfo.vala | 74 ++++++++++++ src/models/Package.vala | 216 ------------------------------------ src/models/Person.vala | 71 ++++++++++++ src/models/Repository.vala | 48 ++++++++ 6 files changed, 225 insertions(+), 225 deletions(-) create mode 100644 src/models/Bugs.vala create mode 100644 src/models/FundingInfo.vala create mode 100644 src/models/Person.vala create mode 100644 src/models/Repository.vala diff --git a/src/meson.build b/src/meson.build index 1a8c4d4..4097ce6 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,17 +1,16 @@ sources = [ - 'models/Package.vala', 'main.vala', ] -executable('vamp', sources, - dependencies: dependencies, - install: true, -) - - -vamp_lib = library( + vamp_lib = library( 'vamp', - ['models/Package.vala'], + [ + 'models/Bugs.vala', + 'models/FundingInfo.vala', + 'models/Package.vala', + 'models/Person.vala', + 'models/Repository.vala', + ], vala_header: 'vamp.h', vala_vapi: 'vamp.vapi', dependencies: dependencies, @@ -21,3 +20,9 @@ vamp_dep = declare_dependency( include_directories: include_directories('.'), link_with: vamp_lib, ) + +executable('vamp', + sources, + dependencies: [dependencies , vamp_dep], + install: true, +) diff --git a/src/models/Bugs.vala b/src/models/Bugs.vala new file mode 100644 index 0000000..6f3f76a --- /dev/null +++ b/src/models/Bugs.vala @@ -0,0 +1,18 @@ +public class Vamp.Bugs : GLib.Object { + public string url { get; set; } + public string email { get; set; } + + public static Bugs from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + return (Bugs) Json.gobject_deserialize (typeof (Bugs), node); + } + + public Json.Node to_json () { + return Json.gobject_serialize (this); + } + + public bool equals (Vamp.Bugs other) { + return this.url == other.url + && this.email == other.email; + } +} diff --git a/src/models/FundingInfo.vala b/src/models/FundingInfo.vala new file mode 100644 index 0000000..6abd32e --- /dev/null +++ b/src/models/FundingInfo.vala @@ -0,0 +1,74 @@ +public class Vamp.FundingInfo : Object { + public string funding_type { get; set; } + public string url { get; set; } + + public static FundingInfo from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + var result = new FundingInfo (); + + var obj = node.get_object (); + obj.get_members ().foreach ((member_name) => { + switch (member_name) { + case "type": + result.funding_type = obj.get_string_member (member_name); + break; + default: + result.set_property (member_name, obj.get_string_member (member_name)); + break; + } + }); + + return result; + } + + public static Gee.List list_from_json (Json.Node node) { + assert (node.get_node_type () == ARRAY); + + var array = node.get_array (); + var result = new Gee.ArrayList (); + + array.foreach_element ((_, __, element_node) => { + if (element_node.get_node_type () != OBJECT) { + return; + } + + result.add (FundingInfo.from_json (element_node)); + }); + + return result; + } + + public static Json.Node list_to_json (Gee.List list) { + var node_array = new Json.Array.sized (list.size); + + list.foreach ((element) => { + node_array.add_element (element.to_json ()); + return true; + }); + + var node = new Json.Node (Json.NodeType.ARRAY); + node.set_array (node_array); + return node; + } + + public Json.Node to_json () { + var obj = new Json.Object (); + if (this.funding_type != null) { + obj.set_string_member ("type", this.funding_type); + } + + if (this.url != null) { + obj.set_string_member ("url", this.url); + } + + var result = new Json.Node (Json.NodeType.OBJECT); + result.set_object (obj); + + return result; + } + + public bool equals (Vamp.FundingInfo other) { + return this.funding_type == other.funding_type + && this.url == other.url; + } +} diff --git a/src/models/Package.vala b/src/models/Package.vala index e72b381..b5767e3 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -192,222 +192,6 @@ public class Vamp.Package : Object, Json.Serializable { } } -public class Vamp.Repository : Object { - public string repository_type { get; set; } - public string url { get; set; } - public string directory { get; set; } - - public static Repository from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); - var result = new Repository (); - - var obj = node.get_object (); - obj.get_members ().foreach ((member_name) => { - switch (member_name) { - case "type": - result.repository_type = obj.get_string_member (member_name); - break; - default: - result.set_property (member_name, obj.get_string_member (member_name)); - break; - } - }); - - return result; - } - - public Json.Node to_json () { - var obj = new Json.Object (); - - - if (this.repository_type != null) { - obj.set_string_member ("type", this.repository_type); - } - - if (this.url != null) { - obj.set_string_member ("url", this.url); - } - - var result = new Json.Node (Json.NodeType.OBJECT); - result.set_object (obj); - - return result; - } - - public bool equals (Vamp.Repository other) { - return this.repository_type == other.repository_type - && this.url == other.url - && this.directory == other.directory; - } -} - -public class Vamp.FundingInfo : Object { - public string funding_type { get; set; } - public string url { get; set; } - - public static FundingInfo from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); - var result = new FundingInfo (); - - var obj = node.get_object (); - obj.get_members ().foreach ((member_name) => { - switch (member_name) { - case "type": - result.funding_type = obj.get_string_member (member_name); - break; - default: - result.set_property (member_name, obj.get_string_member (member_name)); - break; - } - }); - - return result; - } - - public static Gee.List list_from_json (Json.Node node) { - assert (node.get_node_type () == ARRAY); - - var array = node.get_array (); - var result = new Gee.ArrayList (); - - array.foreach_element ((_, __, element_node) => { - if (element_node.get_node_type () != OBJECT) { - return; - } - - result.add (FundingInfo.from_json (element_node)); - }); - - return result; - } - - public static Json.Node list_to_json (Gee.List list) { - var node_array = new Json.Array.sized (list.size); - - list.foreach ((element) => { - node_array.add_element (element.to_json ()); - return true; - }); - - var node = new Json.Node (Json.NodeType.ARRAY); - node.set_array (node_array); - return node; - } - - public Json.Node to_json () { - var obj = new Json.Object (); - if (this.funding_type != null) { - obj.set_string_member ("type", this.funding_type); - } - - if (this.url != null) { - obj.set_string_member ("url", this.url); - } - - var result = new Json.Node (Json.NodeType.OBJECT); - result.set_object (obj); - - return result; - } - - public bool equals (Vamp.FundingInfo other) { - return this.funding_type == other.funding_type - && this.url == other.url; - } -} - -// TODO: Split public classes into their own files -public class Vamp.Person : Object { - private static Regex regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; // vala-lint=space-before-paren - - public string name { get; set; } - public string email { get; set; } - public string url { get; set; } - - public static Person from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); - return (Person) Json.gobject_deserialize (typeof (Person), node); - } - - public static Gee.List list_from_json (Json.Node node) { - assert (node.get_node_type () == ARRAY); - - var array = node.get_array (); - var result = new Gee.ArrayList (); - - array.foreach_element ((_, __, element_node) => { - if (element_node.get_node_type () != OBJECT) { - return; - } - - result.add (Person.from_json (element_node)); - }); - - return result; - - - } - - public static Json.Node list_to_json (Gee.List list) { - var node_array = new Json.Array.sized (list.size); - - list.foreach ((element) => { - node_array.add_element (element.to_json ()); - return true; - }); - - var node = new Json.Node (Json.NodeType.ARRAY); - node.set_array (node_array); - return node; - } - - public static bool try_parse (string str, out Person result) { - MatchInfo info; - - if (!Person.regex.match (str, 0, out info)) { - result = null; - return false; - } - - result = new Person () { - name = info.fetch (1), - email = info.fetch (2), - url = info.fetch (3), - }; - - return true; - } - - public Json.Node to_json () { - return Json.gobject_serialize (this); - } - - public bool equals (Vamp.Person other) { - return this.name == other.name - && this.email == other.email - && this.url == other.url; - } -} - -public class Vamp.Bugs : Object { - public string url { get; set; } - public string email { get; set; } - - public static Bugs from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); - return (Bugs) Json.gobject_deserialize (typeof (Bugs), node); - } - - public Json.Node to_json () { - return Json.gobject_serialize (this); - } - - public bool equals (Vamp.Bugs other) { - return this.url == other.url - && this.email == other.email; - } -} - Json.Node string_list_to_json (Gee.List list) { var node_array = new Json.Array.sized (list.size); list.foreach ((element) => { diff --git a/src/models/Person.vala b/src/models/Person.vala new file mode 100644 index 0000000..a4ded09 --- /dev/null +++ b/src/models/Person.vala @@ -0,0 +1,71 @@ +public class Vamp.Person : Object { + private static Regex regex = /^(.*)(?:\s)(<.*>)(?:\s)(\(.*\))/; // vala-lint=space-before-paren + + public string name { get; set; } + public string email { get; set; } + public string url { get; set; } + + public static Person from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + return (Person) Json.gobject_deserialize (typeof (Person), node); + } + + public static Gee.List list_from_json (Json.Node node) { + assert (node.get_node_type () == ARRAY); + + var array = node.get_array (); + var result = new Gee.ArrayList (); + + array.foreach_element ((_, __, element_node) => { + if (element_node.get_node_type () != OBJECT) { + return; + } + + result.add (Person.from_json (element_node)); + }); + + return result; + + + } + + public static Json.Node list_to_json (Gee.List list) { + var node_array = new Json.Array.sized (list.size); + + list.foreach ((element) => { + node_array.add_element (element.to_json ()); + return true; + }); + + var node = new Json.Node (Json.NodeType.ARRAY); + node.set_array (node_array); + return node; + } + + public static bool try_parse (string str, out Person result) { + MatchInfo info; + + if (!Person.regex.match (str, 0, out info)) { + result = null; + return false; + } + + result = new Person () { + name = info.fetch (1), + email = info.fetch (2), + url = info.fetch (3), + }; + + return true; + } + + public Json.Node to_json () { + return Json.gobject_serialize (this); + } + + public bool equals (Vamp.Person other) { + return this.name == other.name + && this.email == other.email + && this.url == other.url; + } +} diff --git a/src/models/Repository.vala b/src/models/Repository.vala new file mode 100644 index 0000000..f13c346 --- /dev/null +++ b/src/models/Repository.vala @@ -0,0 +1,48 @@ +public class Vamp.Repository : Object { + public string repository_type { get; set; } + public string url { get; set; } + public string directory { get; set; } + + public static Repository from_json (Json.Node node) { + assert (node.get_node_type () == OBJECT); + var result = new Repository (); + + var obj = node.get_object (); + obj.get_members ().foreach ((member_name) => { + switch (member_name) { + case "type": + result.repository_type = obj.get_string_member (member_name); + break; + default: + result.set_property (member_name, obj.get_string_member (member_name)); + break; + } + }); + + return result; + } + + public Json.Node to_json () { + var obj = new Json.Object (); + + + if (this.repository_type != null) { + obj.set_string_member ("type", this.repository_type); + } + + if (this.url != null) { + obj.set_string_member ("url", this.url); + } + + var result = new Json.Node (Json.NodeType.OBJECT); + result.set_object (obj); + + return result; + } + + public bool equals (Vamp.Repository other) { + return this.repository_type == other.repository_type + && this.url == other.url + && this.directory == other.directory; + } +} From 32d981a0c39e1f41e442f322f56c5ef2a052f39d Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 20:57:19 +0000 Subject: [PATCH 26/41] test config vapi formatting --- tests/config.vapi.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/config.vapi.in b/tests/config.vapi.in index 26bc8c7..a3abf42 100644 --- a/tests/config.vapi.in +++ b/tests/config.vapi.in @@ -1,7 +1,7 @@ [CCode (cheader_filename = "config.h")] namespace TestConfig { - [CCode (cname = "TEST_PACKAGE_FILE")] - public const string TEST_PACKAGE_FILE; + [CCode (cname = "TEST_PACKAGE_FILE")] + public const string TEST_PACKAGE_FILE; [CCode (cname = "FULL_TEST_PACKAGE_FILE")] public const string FULL_TEST_PACKAGE_FILE; From 537eb952ea7b59b4b3f308bd01b96a2cb4a52a37 Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Sun, 13 Mar 2022 20:57:53 +0000 Subject: [PATCH 27/41] Formatting --- .editorconfig | 2 +- src/models/Package.vala | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 83d981b..f9d9328 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,7 +14,7 @@ tab_width = 4 [{*.html,*.xml,*.xml.in,*.yml}] tab_width = 2 -# Ignore paths +# Ignore test assets (These files need to remain unformatted) [/tests/assets/*] charset = unset end_of_line = unset diff --git a/src/models/Package.vala b/src/models/Package.vala index b5767e3..ed82cf8 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -182,6 +182,7 @@ public class Vamp.Package : Object, Json.Serializable { } return string_map_to_json (converted_value); + default: return default_serialize_property ( property_name, From 3a8f22468dd9453ac4f1f82022b2306c53d0e47d Mon Sep 17 00:00:00 2001 From: Colin Kiama Date: Mon, 14 Mar 2022 00:56:19 +0000 Subject: [PATCH 28/41] Fix: Missing config header for tests --- tests/meson.build | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/meson.build b/tests/meson.build index 0a93d18..06c7493 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,4 +1,11 @@ + if get_option('tests') + configure_file ( + input: 'config.vapi.in', + output: 'config.vapi', + copy: true + ) + conf = configuration_data() conf.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'vamp.json') conf.set_quoted ('FULL_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'full-vamp.json') @@ -6,8 +13,7 @@ if get_option('tests') conf.set_quoted ('FULL_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-full-vamp.json') configure_file ( - input: 'config.vapi.in', - output: 'config.vapi', + output: 'config.h', configuration: conf ) From ab9371c1f7aecd727a3818e500ef6a13485a4f16 Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 17:13:25 +0100 Subject: [PATCH 29/41] Replaced assertcmp methods with assert --- tests/UnitTests.vala | 60 ++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/tests/UnitTests.vala b/tests/UnitTests.vala index e8b7aec..721be86 100644 --- a/tests/UnitTests.vala +++ b/tests/UnitTests.vala @@ -12,9 +12,9 @@ namespace Vamp { } Vamp.Package package = desrialise_package_config (package_contents); - assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); - assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); - assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); + assert (package.name == "test-project"); + assert (package.version == "0.0.1"); + assert (package.description == "A Test Project"); } catch (FileError e) { error (e.message); } @@ -29,22 +29,22 @@ namespace Vamp { } Vamp.Package package = desrialise_package_config (package_contents); - assert_cmpstr (package.name, GLib.CompareOperator.EQ, "test-project"); - assert_cmpstr (package.version, GLib.CompareOperator.EQ, "0.0.1"); - assert_cmpstr (package.description, GLib.CompareOperator.EQ, "A Test Project"); - assert_cmpstrv (package.keywords.to_array (), {"test", "project", "fake", "mock"}); - assert_cmpstr (package.homepage, GLib.CompareOperator.EQ, "https://wwww.test.com"); + assert (package.name == "test-project"); + assert (package.version == "0.0.1"); + assert (package.description == "A Test Project"); + assert (package.keywords.contains_all_array ({"test", "project", "fake", "mock"})); + assert (package.homepage == "https://wwww.test.com"); // We assert objects this way so that: // 1. We know the exact value of each object property // 2. We can easily update our asserts as we update the // object's properties. assert_full_config_bugs (package.bugs); - assert_cmpstr (package.license, GLib.CompareOperator.EQ, "MIT"); + assert (package.license == "MIT"); assert_full_config_author (package.author); assert_full_config_contributors (package.contributors); assert_full_config_funding (package.funding); - assert_cmpstrv (package.files.to_array (), { "./main-module/**/*", "./extra-module/**/*"}); + assert (package.files.contains_all_array ({"./main-module/**/*", "./extra-module/**/*"})); assert_full_config_respository (package.repository); assert_full_config_dependencies (package.dependencies); assert_full_config_dev_dependencies (package.dev_dependencies); @@ -74,7 +74,7 @@ namespace Vamp { error ("Failed to get contents from: %s".printf (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE)); } - assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); + assert (generator.to_data (null) == expected_content); } catch (Error e) { error (e.message); @@ -156,7 +156,7 @@ namespace Vamp { error ("Failed to get contents from: %s".printf (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE)); } - assert_cmpstr (generator.to_data (null), CompareOperator.EQ, expected_content); + assert (generator.to_data (null) == expected_content); } catch (Error e) { error (e.message); @@ -167,20 +167,20 @@ namespace Vamp { } private static void assert_full_config_optional_dependencies (Gee.Map dependencies) { - assert_cmpstr (dependencies["valadoc"], GLib.CompareOperator.EQ, "^0.48.0"); + assert (dependencies["valadoc"] == "^0.48.0"); } private static void assert_full_config_dev_dependencies (Gee.Map dependencies) { - assert_cmpstr (dependencies["g-ir-compiler"], GLib.CompareOperator.EQ, "^1.6.0"); + assert (dependencies["g-ir-compiler"] == "^1.6.0"); } private static void assert_full_config_dependencies (Gee.Map dependencies) { - assert_cmpstr (dependencies["json-glib"], GLib.CompareOperator.EQ, "^1.6.0"); + assert (dependencies["json-glib"] == "^1.6.0"); } private static void assert_full_config_respository (Vamp.Repository repository) { - assert_cmpstr (repository.repository_type, GLib.CompareOperator.EQ, "git"); - assert_cmpstr (repository.url, GLib.CompareOperator.EQ, "https://www.notgithub.com/owner/project"); + assert (repository.repository_type == "git"); + assert (repository.url == "https://www.notgithub.com/owner/project"); } private static void assert_full_config_funding (Gee.List funding) { @@ -188,8 +188,8 @@ namespace Vamp { FundingInfo funding_info = funding[i]; switch (i) { case 0: - assert_cmpstr (funding_info.funding_type, CompareOperator.EQ, "individual"); - assert_cmpstr (funding_info.url, CompareOperator.EQ, "https://www.vamp.com/donate"); + assert (funding_info.funding_type == "individual"); + assert (funding_info.url == "https://www.vamp.com/donate"); break; } @@ -207,14 +207,14 @@ namespace Vamp { Person contributor = contributors[i]; switch (i) { case 0: - assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-2"); - assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-2@vamp.org"); - assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-2.com"); + assert (contributor.name == "vamp-dev-2"); + assert (contributor.email == "vamp-dev-2@vamp.org"); + assert (contributor.url == "https://vamp-dev-2.com"); break; case 1: - assert_cmpstr (contributor.name, CompareOperator.EQ, "vamp-dev-3"); - assert_cmpstr (contributor.email, CompareOperator.EQ, "vamp-dev-3@vamp.org"); - assert_cmpstr (contributor.url, CompareOperator.EQ, "https://vamp-dev-3.com"); + assert (contributor.name == "vamp-dev-3"); + assert (contributor.email == "vamp-dev-3@vamp.org"); + assert (contributor.url == "https://vamp-dev-3.com"); break; } @@ -226,14 +226,14 @@ namespace Vamp { } private static void assert_full_config_author (Vamp.Person author) { - assert_cmpstr (author.name, CompareOperator.EQ, "vamp-dev"); - assert_cmpstr (author.email, CompareOperator.EQ, "vamp-dev@vamp.org"); - assert_cmpstr (author.url, CompareOperator.EQ, "https://vamp-dev.com"); + assert (author.name == "vamp-dev"); + assert (author.email == "vamp-dev@vamp.org"); + assert (author.url == "https://vamp-dev.com"); } private static void assert_full_config_bugs (Vamp.Bugs bugs) { - assert_cmpstr (bugs.email, CompareOperator.EQ, "bugs@test.com"); - assert_cmpstr (bugs.url, CompareOperator.EQ, "https://www.notgithub.com/owner/project/issues"); + assert (bugs.email == "bugs@test.com"); + assert (bugs.url == "https://www.notgithub.com/owner/project/issues"); } private static Vamp.Package desrialise_package_config (string config_data) { From 210b7dd519e9004d48cfbd8142c53f946a7a3be8 Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 17:14:38 +0100 Subject: [PATCH 30/41] Explicit disable new lines from being added to test asset files --- .editorconfig | 9 ++------- tests/assets/vamp.json | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.editorconfig b/.editorconfig index f9d9328..2067613 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,11 +14,6 @@ tab_width = 4 [{*.html,*.xml,*.xml.in,*.yml}] tab_width = 2 -# Ignore test assets (These files need to remain unformatted) +# Don't insert new line in test asset files. [/tests/assets/*] -charset = unset -end_of_line = unset -indent_size = unset -indent_style = unset -insert_final_newline = unset -tab_width = unset +insert_final_newline = false diff --git a/tests/assets/vamp.json b/tests/assets/vamp.json index 048796e..782ebd8 100644 --- a/tests/assets/vamp.json +++ b/tests/assets/vamp.json @@ -2,4 +2,4 @@ "name": "test-project", "version": "0.0.1", "description": "A Test Project" -} +} \ No newline at end of file From a81519d8deea9ab065f5b731bdb97a72e3ce9592 Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 17:26:38 +0100 Subject: [PATCH 31/41] Rename `equals` methods with `equal` --- src/models/Bugs.vala | 2 +- src/models/FundingInfo.vala | 2 +- src/models/Person.vala | 2 +- src/models/Repository.vala | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/models/Bugs.vala b/src/models/Bugs.vala index 6f3f76a..d49e2f6 100644 --- a/src/models/Bugs.vala +++ b/src/models/Bugs.vala @@ -11,7 +11,7 @@ public class Vamp.Bugs : GLib.Object { return Json.gobject_serialize (this); } - public bool equals (Vamp.Bugs other) { + public bool equal (Vamp.Bugs other) { return this.url == other.url && this.email == other.email; } diff --git a/src/models/FundingInfo.vala b/src/models/FundingInfo.vala index 6abd32e..36d8053 100644 --- a/src/models/FundingInfo.vala +++ b/src/models/FundingInfo.vala @@ -67,7 +67,7 @@ public class Vamp.FundingInfo : Object { return result; } - public bool equals (Vamp.FundingInfo other) { + public bool equal (Vamp.FundingInfo other) { return this.funding_type == other.funding_type && this.url == other.url; } diff --git a/src/models/Person.vala b/src/models/Person.vala index a4ded09..10ea021 100644 --- a/src/models/Person.vala +++ b/src/models/Person.vala @@ -63,7 +63,7 @@ public class Vamp.Person : Object { return Json.gobject_serialize (this); } - public bool equals (Vamp.Person other) { + public bool equal (Vamp.Person other) { return this.name == other.name && this.email == other.email && this.url == other.url; diff --git a/src/models/Repository.vala b/src/models/Repository.vala index f13c346..f07d577 100644 --- a/src/models/Repository.vala +++ b/src/models/Repository.vala @@ -40,7 +40,7 @@ public class Vamp.Repository : Object { return result; } - public bool equals (Vamp.Repository other) { + public bool equal (Vamp.Repository other) { return this.repository_type == other.repository_type && this.url == other.url && this.directory == other.directory; From d30362f213566e2c4779a4c8a9c0e7dc1416deb2 Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 17:30:58 +0100 Subject: [PATCH 32/41] Add space between cases --- src/models/FundingInfo.vala | 1 + src/models/Package.vala | 1 + src/models/Repository.vala | 1 + 3 files changed, 3 insertions(+) diff --git a/src/models/FundingInfo.vala b/src/models/FundingInfo.vala index 36d8053..eb4a811 100644 --- a/src/models/FundingInfo.vala +++ b/src/models/FundingInfo.vala @@ -12,6 +12,7 @@ public class Vamp.FundingInfo : Object { case "type": result.funding_type = obj.get_string_member (member_name); break; + default: result.set_property (member_name, obj.get_string_member (member_name)); break; diff --git a/src/models/Package.vala b/src/models/Package.vala index ed82cf8..00162b6 100644 --- a/src/models/Package.vala +++ b/src/models/Package.vala @@ -147,6 +147,7 @@ public class Vamp.Package : Object, Json.Serializable { } return string_list_to_json (converted_value); + case "contributors": Gee.List converted_value = (Gee.List)value_to_serialize.get_object (); if (converted_value == null) { diff --git a/src/models/Repository.vala b/src/models/Repository.vala index f07d577..3434361 100644 --- a/src/models/Repository.vala +++ b/src/models/Repository.vala @@ -13,6 +13,7 @@ public class Vamp.Repository : Object { case "type": result.repository_type = obj.get_string_member (member_name); break; + default: result.set_property (member_name, obj.get_string_member (member_name)); break; From 6f24b37b8bcff3fdd4c6111917fd72f15855d78a Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 17:44:40 +0100 Subject: [PATCH 33/41] Packages and generators in unit tests now initialised with object initialisers --- tests/UnitTests.vala | 112 ++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 55 deletions(-) diff --git a/tests/UnitTests.vala b/tests/UnitTests.vala index 721be86..8ab20dc 100644 --- a/tests/UnitTests.vala +++ b/tests/UnitTests.vala @@ -55,15 +55,19 @@ namespace Vamp { }); Test.add_func ("/vamp/serialize_basic_config", () => { - Vamp.Package package = new Vamp.Package (); - package.name = "basic-project"; - package.version = "1.0.0"; - package.description = "A basic project"; - - var generator = new Json.Generator (); - generator.pretty = true; - generator.indent = 4; + Vamp.Package package = new Vamp.Package () { + name = "basic-project", + version = "1.0.0", + description = "A basic project", + }; + + var generator = new Json.Generator () { + pretty = true, + indent = 4, + }; + generator.set_root (package.to_json ()); + try { string expected_content; bool did_open = FileUtils.get_contents (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE, @@ -82,52 +86,48 @@ namespace Vamp { }); Test.add_func ("/vamp/serialize_full_config", () => { - Vamp.Package package = new Vamp.Package (); - package.name = "full-project"; - package.version = "1.0.0"; - package.description = "A full project"; - package.keywords = new Gee.ArrayList.wrap ({"full", "project"}); - package.homepage = "https://www.full-project.com"; - package.bugs = new Bugs () { - url = "https://www.full-project.com/bugs", - email = "bugs@full-project.com" - }; - - package.license = "MIT"; - package.author = new Person () { - name = "vamp-dev", - email = "vamp-dev@vamp.org", - url = "https://www.vamp-dev.com" - }; - - package.contributors = new Gee.ArrayList.wrap ({ - new Person () { - name = "vamp-dev-2", - email = "vamp-dev-2@vamp.org", - url = "https://www.vamp-dev-2.com" + Vamp.Package package = new Vamp.Package () { + name = "full-project", + version = "1.0.0", + description = "A full project", + keywords = new Gee.ArrayList.wrap ({"full", "project"}), + homepage = "https://www.full-project.com", + bugs = new Bugs () { + url = "https://www.full-project.com/bugs", + email = "bugs@full-project.com" }, - new Person () { - name = "vamp-dev-3", - email = "vamp-dev-3@vamp.org", - url = "https://www.vamp-dev-3.com" + license = "MIT", + author = new Person () { + name = "vamp-dev", + email = "vamp-dev@vamp.org", + url = "https://www.vamp-dev.com" + }, + contributors = new Gee.ArrayList.wrap ({ + new Person () { + name = "vamp-dev-2", + email = "vamp-dev-2@vamp.org", + url = "https://www.vamp-dev-2.com" + }, + new Person () { + name = "vamp-dev-3", + email = "vamp-dev-3@vamp.org", + url = "https://www.vamp-dev-3.com" + }, + }), + funding = new Gee.ArrayList.wrap ({ + new FundingInfo () { + funding_type = "individual", + url = "https://www.vamp.com/donate" + } + }), + files = new Gee.ArrayList.wrap ({ + "./main-module/**/*", + "./extra-module/**/*" + }), + repository = new Repository () { + repository_type = "git", + url = "https://www.notgithub.com/owner/project" }, - }); - - package.funding = new Gee.ArrayList.wrap ({ - new FundingInfo () { - funding_type = "individual", - url = "https://www.vamp.com/donate" - } - }); - - package.files = new Gee.ArrayList.wrap ({ - "./main-module/**/*", - "./extra-module/**/*" - }); - - package.repository = new Repository () { - repository_type = "git", - url = "https://www.notgithub.com/owner/project" }; var dependencies = new Gee.HashMap (); @@ -142,9 +142,11 @@ namespace Vamp { optional_dependencies["valadoc"] = "^0.56.0"; package.optional_dependencies = optional_dependencies; - var generator = new Json.Generator (); - generator.pretty = true; - generator.indent = 4; + var generator = new Json.Generator () { + pretty = true, + indent = 4, + }; + generator.set_root (package.to_json ()); try { string expected_content; From d965c9c01f1a54b41861190c4f3a03957993a96b Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 17:46:54 +0100 Subject: [PATCH 34/41] Fix "desrialise_package_config" typo --- tests/UnitTests.vala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/UnitTests.vala b/tests/UnitTests.vala index 8ab20dc..5a3c0ce 100644 --- a/tests/UnitTests.vala +++ b/tests/UnitTests.vala @@ -11,7 +11,7 @@ namespace Vamp { error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); } - Vamp.Package package = desrialise_package_config (package_contents); + Vamp.Package package = deserialize_package_config (package_contents); assert (package.name == "test-project"); assert (package.version == "0.0.1"); assert (package.description == "A Test Project"); @@ -28,7 +28,7 @@ namespace Vamp { error ("Failed to get contents from: %s".printf (TestConfig.FULL_TEST_PACKAGE_FILE)); } - Vamp.Package package = desrialise_package_config (package_contents); + Vamp.Package package = deserialize_package_config (package_contents); assert (package.name == "test-project"); assert (package.version == "0.0.1"); assert (package.description == "A Test Project"); @@ -238,7 +238,7 @@ namespace Vamp { assert (bugs.url == "https://www.notgithub.com/owner/project/issues"); } - private static Vamp.Package desrialise_package_config (string config_data) { + private static Vamp.Package deserialize_package_config (string config_data) { var parser = new Json.Parser (); try { parser.load_from_data (config_data); From 9072775ff707ead8adc0207ccc0586b80ec414ff Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 18:00:41 +0100 Subject: [PATCH 35/41] Stop checking for errors from boolean value of `FileUtils.get_contents` --- tests/UnitTests.vala | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/tests/UnitTests.vala b/tests/UnitTests.vala index 5a3c0ce..677d655 100644 --- a/tests/UnitTests.vala +++ b/tests/UnitTests.vala @@ -6,11 +6,7 @@ namespace Vamp { Test.add_func ("/vamp/deserialize_basic_config", () => { string package_contents; try { - bool did_open = FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.TEST_PACKAGE_FILE)); - } - + FileUtils.get_contents (TestConfig.TEST_PACKAGE_FILE, out package_contents); Vamp.Package package = deserialize_package_config (package_contents); assert (package.name == "test-project"); assert (package.version == "0.0.1"); @@ -23,11 +19,7 @@ namespace Vamp { Test.add_func ("/vamp/deserialize_full_config", () => { string package_contents; try { - bool did_open = FileUtils.get_contents (TestConfig.FULL_TEST_PACKAGE_FILE, out package_contents); - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.FULL_TEST_PACKAGE_FILE)); - } - + FileUtils.get_contents (TestConfig.FULL_TEST_PACKAGE_FILE, out package_contents); Vamp.Package package = deserialize_package_config (package_contents); assert (package.name == "test-project"); assert (package.version == "0.0.1"); @@ -70,14 +62,10 @@ namespace Vamp { try { string expected_content; - bool did_open = FileUtils.get_contents (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE, + FileUtils.get_contents (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE, out expected_content ); - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.BASIC_EXPECTED_TEST_PACKAGE_FILE)); - } - assert (generator.to_data (null) == expected_content); } catch (Error e) { @@ -150,16 +138,11 @@ namespace Vamp { generator.set_root (package.to_json ()); try { string expected_content; - bool did_open = FileUtils.get_contents (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE, + FileUtils.get_contents (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE, out expected_content ); - if (!did_open) { - error ("Failed to get contents from: %s".printf (TestConfig.FULL_EXPECTED_TEST_PACKAGE_FILE)); - } - assert (generator.to_data (null) == expected_content); - } catch (Error e) { error (e.message); } @@ -204,6 +187,7 @@ namespace Vamp { } } } + private static void assert_full_config_contributors (Gee.List contributors) { for (int i = 0; i < contributors.size; i++) { Person contributor = contributors[i]; From 87f1a69177cc9c23088f60636cf48ab27caf4abe Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 18:11:43 +0100 Subject: [PATCH 36/41] Reduce usage of CCode Attributes in config.vapi --- tests/config.vapi.in | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/config.vapi.in b/tests/config.vapi.in index a3abf42..4e93171 100644 --- a/tests/config.vapi.in +++ b/tests/config.vapi.in @@ -1,14 +1,10 @@ -[CCode (cheader_filename = "config.h")] +[CCode (cheader_filename = "config.h", lower_case_cprefix = "")] namespace TestConfig { - [CCode (cname = "TEST_PACKAGE_FILE")] public const string TEST_PACKAGE_FILE; - [CCode (cname = "FULL_TEST_PACKAGE_FILE")] public const string FULL_TEST_PACKAGE_FILE; - [CCode (cname = "BASIC_EXPECTED_TEST_PACKAGE_FILE")] public const string BASIC_EXPECTED_TEST_PACKAGE_FILE; - [CCode (cname = "FULL_EXPECTED_TEST_PACKAGE_FILE")] public const string FULL_EXPECTED_TEST_PACKAGE_FILE; } From b3362d002bf65ec87b281a070665332367de8aba Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 18:13:08 +0100 Subject: [PATCH 37/41] Remove double blank line --- src/models/Repository.vala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/models/Repository.vala b/src/models/Repository.vala index 3434361..62d58d7 100644 --- a/src/models/Repository.vala +++ b/src/models/Repository.vala @@ -26,7 +26,6 @@ public class Vamp.Repository : Object { public Json.Node to_json () { var obj = new Json.Object (); - if (this.repository_type != null) { obj.set_string_member ("type", this.repository_type); } From 13dc733916d65f8dd59cf60587733b6e61b74f71 Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 19:01:22 +0100 Subject: [PATCH 38/41] Use literal map in for test configuration files --- tests/meson.build | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/meson.build b/tests/meson.build index 06c7493..b114c60 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -6,15 +6,14 @@ if get_option('tests') copy: true ) - conf = configuration_data() - conf.set_quoted ('TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'vamp.json') - conf.set_quoted ('FULL_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'full-vamp.json') - conf.set_quoted ('BASIC_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-basic-vamp.json') - conf.set_quoted ('FULL_EXPECTED_TEST_PACKAGE_FILE', meson.current_source_dir() / 'assets' / 'expected-full-vamp.json') - configure_file ( output: 'config.h', - configuration: conf + configuration: { + 'TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'vamp.json' + '"', + 'FULL_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'full-vamp.json' + '"', + 'BASIC_EXPECTED_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'expected-basic-vamp.json' + '"', + 'FULL_EXPECTED_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'expected-full-vamp.json' + '"', + } ) vala_args = [ From 6d2c4e56ac6954a35f7e1f2af693610ed3ffb3ab Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 5 Apr 2022 19:47:13 +0100 Subject: [PATCH 39/41] Split project into `cli` and `vamp` directories --- .editorconfig | 2 +- cli/meson.build | 1 + {src => cli/src}/main.vala | 0 cli/src/meson.build | 9 ++++++ meson.build | 4 +-- src/meson.build | 28 ------------------- vamp/meson.build | 2 ++ vamp/src/meson.build | 20 +++++++++++++ {src => vamp/src}/models/Bugs.vala | 0 {src => vamp/src}/models/FundingInfo.vala | 0 {src => vamp/src}/models/Package.vala | 0 {src => vamp/src}/models/Person.vala | 0 {src => vamp/src}/models/Repository.vala | 0 {tests => vamp/tests}/UnitTests.vala | 0 .../tests}/assets/expected-basic-vamp.json | 0 .../tests}/assets/expected-full-vamp.json | 0 {tests => vamp/tests}/assets/full-vamp.json | 0 {tests => vamp/tests}/assets/vamp.json | 0 {tests => vamp/tests}/config.vapi.in | 0 {tests => vamp/tests}/meson.build | 0 20 files changed, 35 insertions(+), 31 deletions(-) create mode 100644 cli/meson.build rename {src => cli/src}/main.vala (100%) create mode 100644 cli/src/meson.build delete mode 100644 src/meson.build create mode 100644 vamp/meson.build create mode 100644 vamp/src/meson.build rename {src => vamp/src}/models/Bugs.vala (100%) rename {src => vamp/src}/models/FundingInfo.vala (100%) rename {src => vamp/src}/models/Package.vala (100%) rename {src => vamp/src}/models/Person.vala (100%) rename {src => vamp/src}/models/Repository.vala (100%) rename {tests => vamp/tests}/UnitTests.vala (100%) rename {tests => vamp/tests}/assets/expected-basic-vamp.json (100%) rename {tests => vamp/tests}/assets/expected-full-vamp.json (100%) rename {tests => vamp/tests}/assets/full-vamp.json (100%) rename {tests => vamp/tests}/assets/vamp.json (100%) rename {tests => vamp/tests}/config.vapi.in (100%) rename {tests => vamp/tests}/meson.build (100%) diff --git a/.editorconfig b/.editorconfig index 2067613..dc4c377 100644 --- a/.editorconfig +++ b/.editorconfig @@ -15,5 +15,5 @@ tab_width = 4 tab_width = 2 # Don't insert new line in test asset files. -[/tests/assets/*] +[/vamp/tests/assets/*] insert_final_newline = false diff --git a/cli/meson.build b/cli/meson.build new file mode 100644 index 0000000..9537275 --- /dev/null +++ b/cli/meson.build @@ -0,0 +1 @@ +subdir('src') diff --git a/src/main.vala b/cli/src/main.vala similarity index 100% rename from src/main.vala rename to cli/src/main.vala diff --git a/cli/src/meson.build b/cli/src/meson.build new file mode 100644 index 0000000..4c2ba35 --- /dev/null +++ b/cli/src/meson.build @@ -0,0 +1,9 @@ +cli_sources = [ + 'main.vala', +] + +executable('vamp', + cli_sources, + dependencies: [dependencies , vamp_dep], + install: true, +) diff --git a/meson.build b/meson.build index 41fcfec..f67a743 100644 --- a/meson.build +++ b/meson.build @@ -11,5 +11,5 @@ dependencies = [ add_project_arguments(['--enable-experimental'], language: 'vala') -subdir('src') -subdir('tests') +subdir('vamp') +subdir('cli') diff --git a/src/meson.build b/src/meson.build deleted file mode 100644 index 4097ce6..0000000 --- a/src/meson.build +++ /dev/null @@ -1,28 +0,0 @@ -sources = [ - 'main.vala', -] - - vamp_lib = library( - 'vamp', - [ - 'models/Bugs.vala', - 'models/FundingInfo.vala', - 'models/Package.vala', - 'models/Person.vala', - 'models/Repository.vala', - ], - vala_header: 'vamp.h', - vala_vapi: 'vamp.vapi', - dependencies: dependencies, -) - -vamp_dep = declare_dependency( - include_directories: include_directories('.'), - link_with: vamp_lib, -) - -executable('vamp', - sources, - dependencies: [dependencies , vamp_dep], - install: true, -) diff --git a/vamp/meson.build b/vamp/meson.build new file mode 100644 index 0000000..67d3858 --- /dev/null +++ b/vamp/meson.build @@ -0,0 +1,2 @@ +subdir('src') +subdir('tests') diff --git a/vamp/src/meson.build b/vamp/src/meson.build new file mode 100644 index 0000000..bdc0c89 --- /dev/null +++ b/vamp/src/meson.build @@ -0,0 +1,20 @@ +vamp_sources = [ + 'models/Bugs.vala', + 'models/FundingInfo.vala', + 'models/Package.vala', + 'models/Person.vala', + 'models/Repository.vala', +] + +vamp_lib = library( + 'vamp', + vamp_sources, + vala_header: 'vamp.h', + vala_vapi: 'vamp.vapi', + dependencies: dependencies, +) + +vamp_dep = declare_dependency( + include_directories: include_directories('.'), + link_with: vamp_lib, +) diff --git a/src/models/Bugs.vala b/vamp/src/models/Bugs.vala similarity index 100% rename from src/models/Bugs.vala rename to vamp/src/models/Bugs.vala diff --git a/src/models/FundingInfo.vala b/vamp/src/models/FundingInfo.vala similarity index 100% rename from src/models/FundingInfo.vala rename to vamp/src/models/FundingInfo.vala diff --git a/src/models/Package.vala b/vamp/src/models/Package.vala similarity index 100% rename from src/models/Package.vala rename to vamp/src/models/Package.vala diff --git a/src/models/Person.vala b/vamp/src/models/Person.vala similarity index 100% rename from src/models/Person.vala rename to vamp/src/models/Person.vala diff --git a/src/models/Repository.vala b/vamp/src/models/Repository.vala similarity index 100% rename from src/models/Repository.vala rename to vamp/src/models/Repository.vala diff --git a/tests/UnitTests.vala b/vamp/tests/UnitTests.vala similarity index 100% rename from tests/UnitTests.vala rename to vamp/tests/UnitTests.vala diff --git a/tests/assets/expected-basic-vamp.json b/vamp/tests/assets/expected-basic-vamp.json similarity index 100% rename from tests/assets/expected-basic-vamp.json rename to vamp/tests/assets/expected-basic-vamp.json diff --git a/tests/assets/expected-full-vamp.json b/vamp/tests/assets/expected-full-vamp.json similarity index 100% rename from tests/assets/expected-full-vamp.json rename to vamp/tests/assets/expected-full-vamp.json diff --git a/tests/assets/full-vamp.json b/vamp/tests/assets/full-vamp.json similarity index 100% rename from tests/assets/full-vamp.json rename to vamp/tests/assets/full-vamp.json diff --git a/tests/assets/vamp.json b/vamp/tests/assets/vamp.json similarity index 100% rename from tests/assets/vamp.json rename to vamp/tests/assets/vamp.json diff --git a/tests/config.vapi.in b/vamp/tests/config.vapi.in similarity index 100% rename from tests/config.vapi.in rename to vamp/tests/config.vapi.in diff --git a/tests/meson.build b/vamp/tests/meson.build similarity index 100% rename from tests/meson.build rename to vamp/tests/meson.build From c3fe03a47d9cf8845f34672a89bf776c1f116c6e Mon Sep 17 00:00:00 2001 From: colinkiama Date: Sat, 9 Apr 2022 18:26:29 +0100 Subject: [PATCH 40/41] Merge literal strings in test build file to one string --- vamp/tests/meson.build | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vamp/tests/meson.build b/vamp/tests/meson.build index b114c60..9882188 100644 --- a/vamp/tests/meson.build +++ b/vamp/tests/meson.build @@ -9,10 +9,10 @@ if get_option('tests') configure_file ( output: 'config.h', configuration: { - 'TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'vamp.json' + '"', - 'FULL_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'full-vamp.json' + '"', - 'BASIC_EXPECTED_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'expected-basic-vamp.json' + '"', - 'FULL_EXPECTED_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets' / 'expected-full-vamp.json' + '"', + 'TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets/vamp.json"', + 'FULL_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets/full-vamp.json"', + 'BASIC_EXPECTED_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets/expected-basic-vamp.json"', + 'FULL_EXPECTED_TEST_PACKAGE_FILE': '"' + meson.current_source_dir() / 'assets/expected-full-vamp.json"', } ) From 6d8e8539f64b495370d25ecfa5ffe4939960151d Mon Sep 17 00:00:00 2001 From: colinkiama Date: Tue, 12 Apr 2022 23:22:11 +0100 Subject: [PATCH 41/41] Using full qualifier names for JSON NodeType enums --- vamp/src/models/Bugs.vala | 2 +- vamp/src/models/FundingInfo.vala | 6 +++--- vamp/src/models/Package.vala | 22 +++++++++++----------- vamp/src/models/Person.vala | 6 +++--- vamp/src/models/Repository.vala | 2 +- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/vamp/src/models/Bugs.vala b/vamp/src/models/Bugs.vala index d49e2f6..f523c7d 100644 --- a/vamp/src/models/Bugs.vala +++ b/vamp/src/models/Bugs.vala @@ -3,7 +3,7 @@ public class Vamp.Bugs : GLib.Object { public string email { get; set; } public static Bugs from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); + assert (node.get_node_type () == Json.NodeType.OBJECT); return (Bugs) Json.gobject_deserialize (typeof (Bugs), node); } diff --git a/vamp/src/models/FundingInfo.vala b/vamp/src/models/FundingInfo.vala index eb4a811..d18427b 100644 --- a/vamp/src/models/FundingInfo.vala +++ b/vamp/src/models/FundingInfo.vala @@ -3,7 +3,7 @@ public class Vamp.FundingInfo : Object { public string url { get; set; } public static FundingInfo from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); + assert (node.get_node_type () == Json.NodeType.OBJECT); var result = new FundingInfo (); var obj = node.get_object (); @@ -23,13 +23,13 @@ public class Vamp.FundingInfo : Object { } public static Gee.List list_from_json (Json.Node node) { - assert (node.get_node_type () == ARRAY); + assert (node.get_node_type () == Json.NodeType.ARRAY); var array = node.get_array (); var result = new Gee.ArrayList (); array.foreach_element ((_, __, element_node) => { - if (element_node.get_node_type () != OBJECT) { + if (element_node.get_node_type () != Json.NodeType.OBJECT) { return; } diff --git a/vamp/src/models/Package.vala b/vamp/src/models/Package.vala index 00162b6..391c82a 100644 --- a/vamp/src/models/Package.vala +++ b/vamp/src/models/Package.vala @@ -16,7 +16,7 @@ public class Vamp.Package : Object, Json.Serializable { public Gee.Map optional_dependencies { get; set; } public static Package from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); + assert (node.get_node_type () == Json.NodeType.OBJECT); return (Package) Json.gobject_deserialize (typeof (Package), node); } @@ -32,7 +32,7 @@ public class Vamp.Package : Object, Json.Serializable { ) { switch (property_name) { case "keywords": - if (property_node.get_node_type () != ARRAY) { + if (property_node.get_node_type () != Json.NodeType.ARRAY) { @value = {}; return false; } @@ -42,7 +42,7 @@ public class Vamp.Package : Object, Json.Serializable { return true; case "bugs": - if (property_node.get_node_type () == OBJECT) { + if (property_node.get_node_type () == Json.NodeType.OBJECT) { @value = Bugs.from_json (property_node); return true; } @@ -59,7 +59,7 @@ public class Vamp.Package : Object, Json.Serializable { return true; case "author": - if (property_node.get_node_type () == OBJECT) { + if (property_node.get_node_type () == Json.NodeType.OBJECT) { @value = Person.from_json (property_node); return true; } @@ -72,7 +72,7 @@ public class Vamp.Package : Object, Json.Serializable { return Person.try_parse (property_node.get_string (), out @value); case "contributors": - if (property_node.get_node_type () != ARRAY) { + if (property_node.get_node_type () != Json.NodeType.ARRAY) { @value = {}; return false; } @@ -82,7 +82,7 @@ public class Vamp.Package : Object, Json.Serializable { return true; case "funding": - if (property_node.get_node_type () != ARRAY) { + if (property_node.get_node_type () != Json.NodeType.ARRAY) { @value = {}; return false; } @@ -92,7 +92,7 @@ public class Vamp.Package : Object, Json.Serializable { return true; case "files": - if (property_node.get_node_type () != ARRAY) { + if (property_node.get_node_type () != Json.NodeType.ARRAY) { @value = {}; return false; } @@ -102,7 +102,7 @@ public class Vamp.Package : Object, Json.Serializable { return true; case "repository": - if (property_node.get_node_type () != OBJECT) { + if (property_node.get_node_type () != Json.NodeType.OBJECT) { @value = {}; return false; } @@ -114,7 +114,7 @@ public class Vamp.Package : Object, Json.Serializable { case "dependencies": case "dev-dependencies": case "optional-dependencies": - if (property_node.get_node_type () != OBJECT) { + if (property_node.get_node_type () != Json.NodeType.OBJECT) { @value = {}; return false; } @@ -208,7 +208,7 @@ Json.Node string_list_to_json (Gee.List list) { } Gee.List string_list_from_json (Json.Node node) { - assert (node.get_node_type () == ARRAY); + assert (node.get_node_type () == Json.NodeType.ARRAY); var array = node.get_array (); var result = new Gee.ArrayList (); @@ -239,7 +239,7 @@ Json.Node string_map_to_json (Gee.Map map) { } Gee.Map string_map_from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); + assert (node.get_node_type () == Json.NodeType.OBJECT); var result = new Gee.HashMap (); diff --git a/vamp/src/models/Person.vala b/vamp/src/models/Person.vala index 10ea021..15786a7 100644 --- a/vamp/src/models/Person.vala +++ b/vamp/src/models/Person.vala @@ -6,18 +6,18 @@ public class Vamp.Person : Object { public string url { get; set; } public static Person from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); + assert (node.get_node_type () == Json.NodeType.OBJECT); return (Person) Json.gobject_deserialize (typeof (Person), node); } public static Gee.List list_from_json (Json.Node node) { - assert (node.get_node_type () == ARRAY); + assert (node.get_node_type () == Json.NodeType.ARRAY); var array = node.get_array (); var result = new Gee.ArrayList (); array.foreach_element ((_, __, element_node) => { - if (element_node.get_node_type () != OBJECT) { + if (element_node.get_node_type () != Json.NodeType.OBJECT) { return; } diff --git a/vamp/src/models/Repository.vala b/vamp/src/models/Repository.vala index 62d58d7..7ea0fb9 100644 --- a/vamp/src/models/Repository.vala +++ b/vamp/src/models/Repository.vala @@ -4,7 +4,7 @@ public class Vamp.Repository : Object { public string directory { get; set; } public static Repository from_json (Json.Node node) { - assert (node.get_node_type () == OBJECT); + assert (node.get_node_type () == Json.NodeType.OBJECT); var result = new Repository (); var obj = node.get_object ();