Skip to content

Commit

Permalink
update tests and add mistakenly ignored tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gfngfn committed Feb 14, 2024
1 parent 2984b00 commit 63ea282
Show file tree
Hide file tree
Showing 7 changed files with 267 additions and 3 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
obsolete/*.txt
old/
*.png
satysfi
saphe
/satysfi
/saphe
*.ttf
*.otf
*.ttc
Expand Down
3 changes: 2 additions & 1 deletion src-saphe/sapheMain.ml
Original file line number Diff line number Diff line change
Expand Up @@ -837,7 +837,8 @@ let solve ~(fpath_in : string) =
Logging.show_package_dependency_before_solving dependencies_with_flags;

let local_fixed_dependencies =
failwith "TODO: construct local_fixed_dependencies by traversing local fixed dependencies"
LocalFixedPackageIdMap.empty
(* TODO: construct local_fixed_dependencies by traversing local fixed dependencies *)
in

(* Arranges the store root config: *)
Expand Down
5 changes: 5 additions & 0 deletions test/saphe/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(test
(name sapheTest)
(libraries
sapheMain
alcotest))
83 changes: 83 additions & 0 deletions test/saphe/packageConfigTest.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@

open SapheTestUtil
open SapheMain__ConfigError
open SapheMain__PackageSystemBase
module PackageConfig = SapheMain__PackageConfig


let input1 = {yaml|
ecosystem: "^0.0.1"
language: "^0.1.0"
name: "stdlib"
authors:
- "Takashi Suwa"
registries:
- name: "default"
git:
url: "https://github.com/SATySFi/default-registry"
branch: "temp-dev-saphe"
contents:
library:
main_module: "Stdlib"
source_directories:
- "./src"
test_directories:
- "./test"
dependencies: []
test_dependencies:
- used_as: "Testing"
registered:
registry: "default"
name: "testing"
requirement: "^0.0.1"
|yaml}


let expected1 =
ParsedPackageConfig{
language_requirement = SemanticVersion.CompatibleWith(make_version "0.1.0");
package_name = "stdlib";
package_authors = ["Takashi Suwa"];
external_resources = [];
package_contents =
ParsedLibrary{
main_module_name = "Stdlib";
source_directories = [ "./src" ];
test_directories = [ "./test" ];
dependencies = [];
test_dependencies = [
ParsedPackageDependency{
used_as = "Testing";
spec =
ParsedRegisteredDependency{
package_name = "testing";
registry_local_name = "default";
version_requirement = SemanticVersion.CompatibleWith(make_version "0.0.1");
};
};
];
markdown_conversion = None;
};
registry_specs = [
("default", GitRegistry{
url = "https://github.com/SATySFi/default-registry";
branch = "temp-dev-saphe";
});
];
}


let parsed_package_config = Alcotest.of_pp pp_parsed_package_config
let yaml_error = Alcotest.of_pp pp_yaml_error


let parse_test_1 () =
let got = PackageConfig.parse input1 in
let expected = Ok(expected1) in
Alcotest.(check (result parsed_package_config yaml_error)) "parse" expected got


let test_cases =
Alcotest.[
test_case "parse 1" `Quick parse_test_1;
]
163 changes: 163 additions & 0 deletions test/saphe/packageConstraintSolverTest.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@

open SapheTestUtil
open SapheMain__PackageSystemBase
module Constant = SapheMain__Constant
module PackageConstraintSolver = SapheMain__PackageConstraintSolver


let registry_hash_value =
"c0bebeef4423"


let language_version =
make_version "0.1.0"


let make_dependency ~(used_as : string) (package_name : package_name) (s_version : string) : package_dependency =
PackageDependency{
used_as;
spec =
RegisteredDependency{
registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value };
version_requirement = SemanticVersion.CompatibleWith(make_version s_version);
};
}


let make_dependency_in_registry ~(used_as : string) (package_name : package_name) (s_version : string) : package_dependency_in_registry =
PackageDependencyInRegistry{
used_as;
package_name;
version_requirement = SemanticVersion.CompatibleWith(make_version s_version);
}


let make_impl (s_version : string) (deps : package_dependency_in_registry list) : implementation_record =
ImplRecord{
version = make_version s_version;
source = NoSource;
language_requirement = SemanticVersion.CompatibleWith(language_version);
dependencies = deps;
}


let make_registered_lock (package_name : package_name) (s_version : string) : RegisteredLock.t =
RegisteredLock.{
registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value };
locked_version = make_version s_version;
}


let make_locked_dependency ~(used_as : string) (package_name : package_name) (s_version : string) : locked_dependency =
{
depended_lock = Lock.Registered(make_registered_lock package_name s_version);
dependency_used_as = used_as;
}


let make_solution ?(explicitly_depended : string option) ?(test_only : bool = false) (package_name : package_name) (s_version : string) (deps : locked_dependency list) : package_solution =
{
lock = Lock.Registered(make_registered_lock package_name s_version);
locked_source = NoSource;
locked_dependencies = deps;
used_in_test_only = test_only;
explicitly_depended;
explicitly_test_depended = None;
}


let check package_context dependencies_with_flags expected =
let got = PackageConstraintSolver.solve package_context dependencies_with_flags in
Alcotest.(check (option (list (of_pp pp_package_solution)))) "solutions" expected got


let make_registered_package_impls =
List.fold_left (fun map (package_name, impls) ->
let registered_package_id = RegisteredPackageId.{ package_name; registry_hash_value } in
map |> RegisteredPackageIdMap.add registered_package_id impls
) RegisteredPackageIdMap.empty


let solve_test_1 () =
let package_context =
let local_fixed_dependencies = LocalFixedPackageIdMap.empty in
let registered_package_impls =
make_registered_package_impls [
("foo", [
make_impl "1.0.0" [];
make_impl "2.0.0" [];
]);
("bar", [
make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"Foo" "foo" "2.0.0" ];
]);
("qux", [
make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"Foo" "foo" "1.0.0" ];
]);
]
in
{ language_version; local_fixed_dependencies; registered_package_impls }
in
let dependencies_with_flags =
[
(SourceDependency, make_dependency ~used_as:"Bar" "bar" "1.0.0");
(SourceDependency, make_dependency ~used_as:"Qux" "qux" "1.0.0");
]
in
let expected =
Some([
make_solution ~explicitly_depended:"Bar"
"bar" "1.0.0" [ make_locked_dependency ~used_as:"Foo" "foo" "2.0.0" ];
make_solution
"foo" "1.0.0" [];
make_solution
"foo" "2.0.0" [];
make_solution ~explicitly_depended:"Qux"
"qux" "1.0.0" [ make_locked_dependency ~used_as:"Foo" "foo" "1.0.0" ];
])
in
check package_context dependencies_with_flags expected


let solve_test_2 () =
let package_context =
let local_fixed_dependencies = LocalFixedPackageIdMap.empty in
let registered_package_impls =
make_registered_package_impls [
("foo", [
make_impl "1.0.0" [];
make_impl "1.1.0" [];
]);
("bar", [
make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"FooA" "foo" "1.1.0" ];
]);
("qux", [
make_impl "1.0.0" [ make_dependency_in_registry ~used_as:"FooB" "foo" "1.0.0" ];
]);
]
in
{ language_version; local_fixed_dependencies; registered_package_impls }
in
let dependencies_with_flags =
[
(SourceDependency, make_dependency ~used_as:"Bar" "bar" "1.0.0");
(SourceDependency, make_dependency ~used_as:"Qux" "qux" "1.0.0");
]
in
let expected =
Some([
make_solution ~explicitly_depended:"Bar"
"bar" "1.0.0" [ make_locked_dependency ~used_as:"FooA" "foo" "1.1.0" ];
make_solution
"foo" "1.1.0" [];
make_solution ~explicitly_depended:"Qux"
"qux" "1.0.0" [ make_locked_dependency ~used_as:"FooB" "foo" "1.1.0" ];
])
in
check package_context dependencies_with_flags expected


let test_cases =
Alcotest.[
test_case "solve 1" `Quick solve_test_1;
test_case "solve 2" `Quick solve_test_2;
]
7 changes: 7 additions & 0 deletions test/saphe/sapheTest.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

let () =
let open Alcotest in
run "Saphe Test" [
("PackageConfig", PackageConfigTest.test_cases);
("PackageConstraintSolver", PackageConstraintSolverTest.test_cases);
]
5 changes: 5 additions & 0 deletions test/saphe/sapheTestUtil.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

let make_version (s_version : string) : SemanticVersion.t =
match SemanticVersion.parse s_version with
| Some(semver) -> semver
| None -> assert false

0 comments on commit 63ea282

Please sign in to comment.