Fosi Fossil Service
Small teams. Open source. Built on Fossil.

CaaS / Lamina

Unified Management for Fossil Repositories

Public | Owner: CaaS | Default branch: trunk | Last update: 2026-10-25 00:41

Artifact 079e866e602d3f399de0652314bf76a97b94b667da9a344421917d1513b42927:


-module(nova_tests).
-include_lib("eunit/include/eunit.hrl").

setup() ->
    nova_test_helper:setup_nova_env().

cleanup(Prev) ->
    catch persistent_term:erase(nova_use_stacktrace),
    nova_test_helper:cleanup_nova_env(Prev).

nova_test_() ->
    {foreach,
     fun setup/0,
     fun cleanup/1,
     [
      fun get_main_app_returns_nova/0,
      fun get_environment_returns_dev/0,
      fun get_env_returns_value/0,
      fun get_env_returns_default_when_missing/0,
      fun set_env_sets_value/0,
      fun set_env_error_when_no_main_app/0,
      fun use_stacktrace_true/0,
      fun use_stacktrace_false/0,
      fun format_stacktrace_basic/0,
      fun format_stacktrace_missing_info/0,
      fun detect_language_returns_erlang/0
     ]}.

get_main_app_returns_nova() ->
    ?assertEqual({ok, nova}, nova:get_main_app()).

get_environment_returns_dev() ->
    ?assertEqual(dev, nova:get_environment()).

get_env_returns_value() ->
    application:set_env(nova, test_param, <<"hello">>),
    ?assertEqual(<<"hello">>, nova:get_env(test_param, undefined)),
    application:unset_env(nova, test_param).

get_env_returns_default_when_missing() ->
    ?assertEqual(default_val, nova:get_env(nonexistent_param, default_val)).

set_env_sets_value() ->
    ok = nova:set_env(my_key, my_value),
    ?assertEqual(my_value, nova:get_env(my_key, undefined)),
    application:unset_env(nova, my_key).

set_env_error_when_no_main_app() ->
    application:unset_env(nova, bootstrap_application),
    ?assertEqual({error, main_app_not_found}, nova:set_env(key, val)),
    application:set_env(nova, bootstrap_application, nova).

use_stacktrace_true() ->
    nova:use_stacktrace(true),
    ?assertEqual(true, persistent_term:get(nova_use_stacktrace)).

use_stacktrace_false() ->
    persistent_term:put(nova_use_stacktrace, true),
    nova:use_stacktrace(false),
    ?assertEqual(undefined, persistent_term:get(nova_use_stacktrace, undefined)).

format_stacktrace_basic() ->
    Stack = [{my_mod, my_fun, 2, [{file, "my_mod.erl"}, {line, 42}]}],
    [Entry] = nova:format_stacktrace(Stack),
    ?assertEqual(my_mod, maps:get(module, Entry)),
    ?assertEqual(my_fun, maps:get(function, Entry)),
    ?assertEqual(2, maps:get(arity, Entry)),
    ?assertEqual("my_mod.erl", maps:get(file, Entry)),
    ?assertEqual(42, maps:get(line, Entry)).

format_stacktrace_missing_info() ->
    Stack = [{some_mod, some_fun, 0, []}],
    [Entry] = nova:format_stacktrace(Stack),
    ?assertEqual(some_mod, maps:get(module, Entry)),
    ?assertEqual(some_fun, maps:get(function, Entry)),
    ?assertEqual(0, maps:get(arity, Entry)),
    ?assertEqual(<<"unknown">>, maps:get(file, Entry)),
    ?assertEqual(-1, maps:get(line, Entry)).

detect_language_returns_erlang() ->
    ?assertEqual(erlang, nova:detect_language()).

Clone

You can clone this repository with the following command:

fossil clone https://fosi.dev/CaaS/Lamina

Contribute

The best way to contribute is through e-mail. See the project documentation for more details.