示例#1
0
static inline list_t *
parse_package_deps(JSON_Object *obj) {
  if (NULL == obj) return NULL;

  list_t *list = list_new();
  if (NULL == list) {
    return NULL;
  }

  for (size_t i = 0; i < json_object_get_count(obj); i++) {
    const char *name = json_object_get_name(obj, i);
    if (!name) {
      list_destroy(list);
      return NULL;
    }

    const char *version = json_object_get_string_safe(obj, name);
    if (!version) {
      list_destroy(list);
      return NULL;
    }

    clib_package_dependency_t *dep = clib_package_dependency_new(name, version);
    if (NULL == dep) {
      list_destroy(list);
      return NULL;
    }

    list_node_t *node = list_node_new(dep);
    list_rpush(list, node);
  }

  return list;
}
示例#2
0
static inline list_t *
parse_package_deps(JSON_Object *obj) {
  list_t *list = NULL;

  if (!obj) goto done;
  if (!(list = list_new())) goto done;
  list->free = clib_package_dependency_free;

  for (unsigned int i = 0; i < json_object_get_count(obj); i++) {
    const char *name = NULL;
    char *version = NULL;
    clib_package_dependency_t *dep = NULL;
    int error = 1;

    if (!(name = json_object_get_name(obj, i))) goto loop_cleanup;
    if (!(version = json_object_get_string_safe(obj, name))) goto loop_cleanup;
    if (!(dep = clib_package_dependency_new(name, version))) goto loop_cleanup;
    if (!(list_rpush(list, list_node_new(dep)))) goto loop_cleanup;

    error = 0;

  loop_cleanup:
    if (version) free(version);
    if (error) {
      list_destroy(list);
      list = NULL;
      break;
    }
  }

done:
  return list;
}
#include "describe/describe.h"
#include "clib-package.h"


describe("clib_package_dependency_new", {
  it("should return NULL when given bad input", {
    assert(NULL == clib_package_dependency_new("foo/bar", NULL));
    assert(NULL == clib_package_dependency_new(NULL, "foo/bar"));
  });

  it("should return a clib-dependency when given valid input", {
    clib_package_dependency_t *dep = clib_package_dependency_new("foo/bar", "1.2.3");
    assert(dep);
    assert_str_equal("foo", dep->author);
    assert_str_equal("bar", dep->name);
    assert_str_equal("1.2.3", dep->version);
    clib_package_dependency_free(dep);
  });

  it("should transform \"*\" to \"master\"", {
    clib_package_dependency_t *dep = clib_package_dependency_new("foo/bar", "*");
    assert(dep);
    assert_str_equal("master", dep->version);
    clib_package_dependency_free(dep);
  });

  it("should default to \"clibs\" when no repo author is given", {
    clib_package_dependency_t *dep = clib_package_dependency_new("foo", "master");
    assert(dep);
    assert_str_equal("clibs", dep->author);