Compare commits

...
Author SHA1 Message Date
adminandClaude Opus 4.5 5cf40956ae Co-locate Scala tests with source code
Move all Scala test files from src/test/scala/ to src/main/scala/
alongside their corresponding source files. This provides:

- Easier navigation in IntelliJ
- Consistency with Go and Python test conventions
- Tests visible next to the code they test

Changes:
- Moved 203 test .scala files
- Merged 41 test BUILD.bazel files into main BUILD.bazel files
- Updated all BUILD file paths from src/test/scala to src/main/scala
- Updated CI scripts and documentation
- Renamed conflicting test targets with _test suffix

All 199 Scala tests pass.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-09 17:54:18 -08:00
352 changed files with 5168 additions and 5876 deletions
+2 -2
View File
@@ -92,7 +92,7 @@ bazel run //src/main/cpp/net/eagle0/shardok:shardok-server --compilation_mode=op
bazel test //src/test/... //src/main/go/...
# Component-specific tests
bazel test //src/test/scala/... # Scala Eagle tests
bazel test //src/main/scala/... # Scala Eagle tests
bazel test //src/test/cpp/... # C++ Shardok tests
```
@@ -111,7 +111,7 @@ bazel run gazelle # Update Go build files
2. **If you modified C++ or C# files:** Run `clang-format -i` on the modified files
3. **If you modified Scala files:** scalafmt will run automatically via pre-commit hook
4. **ALWAYS run the full test suite for your language changes before pushing:**
- For Scala changes: `bazel test //src/test/scala/...`
- For Scala changes: `bazel test //src/main/scala/...`
- For C++ changes: `bazel test //src/test/cpp/...`
- This catches exhaustive pattern match errors and other compile-time failures that single-target builds miss
+1 -1
View File
@@ -4,4 +4,4 @@ set -e
set -x
bazel test \
//src/test/scala/...
//src/main/scala/...
+2 -2
View File
@@ -221,12 +221,12 @@ Quests completed by specific player actions rather than state checks. Return `fa
2. Run tests:
```bash
bazel test //src/test/scala/...
bazel test //src/main/scala/...
```
3. Verify proto/Scala parity:
```bash
bazel test //src/test/scala/net/eagle0/eagle/model/action_result/types:action_result_type_parity_test
bazel test //src/main/scala/net/eagle0/eagle/model/action_result/types:action_result_type_parity_test
```
## Current Quest Types (30 total)
+1 -1
View File
@@ -58,7 +58,7 @@ Based on conversion attempt of `ResolveTruceOfferCommand` (see [PR #4379](https:
**Before creating any PR:**
-`bazel build //src/main/scala/net/eagle0/eagle:eagle_server` succeeds
-`bazel test //src/test/scala/... --keep_going` passes (or doesn't introduce new failures)
-`bazel test //src/main/scala/... --keep_going` passes (or doesn't introduce new failures)
- ✅ All BUILD dependencies are correctly specified
- ✅ Scalafmt and other linters pass
+49 -5
View File
@@ -1,12 +1,9 @@
load("@rules_scala//scala:scala.bzl", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_library", "scala_test")
scala_library(
name = "functional_random",
srcs = ["FunctionalRandom.scala"],
visibility = [
"//src/main/scala/net/eagle0:__subpackages__",
"//src/test/scala/net/eagle0:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0:__subpackages__"],
deps = [],
)
@@ -86,3 +83,50 @@ scala_library(
visibility = ["//visibility:public"],
deps = [],
)
scala_test(
name = "functional_random_test",
srcs = ["FunctionalRandomTest.scala"],
deps = [
":functional_random_test_classes",
"//src/main/scala/net/eagle0/common:functional_random",
],
)
scala_library(
name = "functional_random_test_classes",
srcs = ["FunctionalRandomTestClasses.scala"],
visibility = ["//src/main/scala:__subpackages__"],
deps = [
"//src/main/scala/net/eagle0/common:functional_random",
],
)
scala_test(
name = "more_option_test",
srcs = ["MoreOptionTest.scala"],
deps = [
"//src/main/scala/net/eagle0/common:more_option",
],
)
scala_test(
name = "more_seq_test",
srcs = ["MoreSeqTest.scala"],
deps = [
"//src/main/scala/net/eagle0/common:more_seq",
],
)
scala_library(
name = "proto_matchers",
srcs = ["ProtoMatchers.scala"],
visibility = [
"//src/main/scala/net/eagle0:__subpackages__",
],
deps = [
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:com_thesamet_scalapb_scalapb_runtime_3",
"@rules_scala//scala/scalatest",
],
)
@@ -1,4 +1,4 @@
load("@rules_scala//scala:scala.bzl", "scala_binary", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_binary", "scala_library", "scala_test")
scala_library(
name = "api_keys",
@@ -154,3 +154,11 @@ scala_library(
"//visibility:public",
],
)
scala_test(
name = "open_ai_duration_parser_test",
srcs = ["OpenAiDurationParserTest.scala"],
deps = [
"//src/main/scala/net/eagle0/common/llm_integration:open_ai_duration_parser",
],
)
@@ -1,4 +1,4 @@
load("@rules_scala//scala:scala.bzl", "scala_binary", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_binary", "scala_library", "scala_test")
scala_library(
name = "name_generator",
@@ -26,7 +26,7 @@ scala_library(
name = "string_construction_parser",
srcs = ["StringConstructionParser.scala"],
visibility = [
"//src/test/scala/net/eagle0/common/name_generation:__pkg__",
"//src/main/scala/net/eagle0/common/name_generation:__pkg__",
],
deps = [
":parse_sequence",
@@ -48,7 +48,7 @@ scala_library(
name = "string_construction_token",
srcs = ["StringConstructionToken.scala"],
visibility = [
"//src/test/scala/net/eagle0/common/name_generation:__pkg__",
"//src/main/scala/net/eagle0/common/name_generation:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/common:functional_random",
@@ -63,7 +63,7 @@ scala_library(
srcs = ["StringConstructionTokenGenerator.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/library/util:__pkg__",
"//src/main/scala/net/eagle0/eagle/library/util:__pkg__",
],
exports = [":string_construction_token"],
deps = [
@@ -71,3 +71,22 @@ scala_library(
":string_construction_token",
],
)
scala_test(
name = "string_construction_parser_test",
srcs = ["StringConstructionParserTest.scala"],
deps = [
"//src/main/scala/net/eagle0/common/name_generation:string_construction_parser",
"//src/main/scala/net/eagle0/common/name_generation:string_construction_token",
],
)
scala_test(
name = "string_construction_token_test",
srcs = ["StringConstructionTokenTest.scala"],
deps = [
"//src/main/scala/net/eagle0/common:functional_random",
"//src/main/scala/net/eagle0/common/name_generation:string_construction_token",
"@maven//:org_scalamock_scalamock_3",
],
)
@@ -1,4 +1,4 @@
load("@rules_scala//scala:scala.bzl", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_library", "scala_test")
scala_library(
name = "sse_event_reader",
@@ -29,3 +29,11 @@ scala_library(
"@maven//:com_squareup_okhttp3_okhttp_sse",
],
)
scala_test(
name = "sse_event_reader_test",
srcs = ["SseEventReaderTest.scala"],
deps = [
"//src/main/scala/net/eagle0/common/sse:sse_event_reader",
],
)
+180 -19
View File
@@ -1,11 +1,11 @@
load("@rules_scala//scala:scala.bzl", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_library", "scala_test")
scala_library(
name = "ai_client",
srcs = ["AIClient.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
],
deps = [
":ai_client_logger",
@@ -41,10 +41,7 @@ scala_library(
scala_library(
name = "ai_client_utils",
srcs = ["AIClientUtils.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/library/util/faction_utils",
@@ -60,8 +57,8 @@ scala_library(
srcs = ["InvitationCommandSelector.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/test/scala/net/eagle0/eagle/service:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/service:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
@@ -87,7 +84,7 @@ scala_library(
srcs = ["EarlyGameAIClient.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/service:__pkg__",
"//src/main/scala/net/eagle0/eagle/service:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
@@ -107,7 +104,7 @@ scala_library(
name = "faction_leader_province_ranker",
srcs = ["FactionLeaderProvinceRanker.scala"],
visibility = [
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
@@ -126,7 +123,7 @@ scala_library(
name = "fix_leader_alone_command_selector",
srcs = ["FixLeaderAloneCommandSelector.scala"],
visibility = [
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/library/util:command_selection",
@@ -148,7 +145,7 @@ scala_library(
name = "march_toward_province_command_chooser",
srcs = ["MarchTowardProvinceCommandChooser.scala"],
visibility = [
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
],
deps = [
":ai_client_utils",
@@ -169,7 +166,7 @@ scala_library(
srcs = ["MidGameAIClient.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/library/util:command_selection",
@@ -222,7 +219,7 @@ scala_library(
name = "move_leader_to_better_province_command_chooser",
srcs = ["MoveLeaderToBetterProvinceCommandChooser.scala"],
visibility = [
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
@@ -243,7 +240,7 @@ scala_library(
name = "resolve_diplomacy_command_selector",
srcs = ["ResolveDiplomacyCommandSelector.scala"],
visibility = [
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
@@ -274,10 +271,7 @@ scala_library(
scala_library(
name = "seek_more_leaders_command_chooser",
srcs = ["SeekMoreLeadersCommandChooser.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
"//src/test/scala/net/eagle0/eagle/ai:__pkg__",
],
visibility = ["//src/main/scala/net/eagle0/eagle/ai:__pkg__"],
deps = [
"//src/main/scala/net/eagle0/common:more_option",
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
@@ -298,3 +292,170 @@ scala_library(
"//src/main/scala/net/eagle0/eagle/model/state/province",
],
)
scala_test(
name = "ai_client_utils_test",
srcs = ["AIClientUtilsTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:ai_client_utils",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
],
)
scala_test(
name = "faction_leader_province_ranker_test",
srcs = ["FactionLeaderProvinceRankerTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:faction_leader_province_ranker",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/province",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
],
)
scala_test(
name = "fix_leader_alone_command_selector_test",
srcs = ["FixLeaderAloneCommandSelectorTest.scala"],
deps = [
"//src/main/scala/net/eagle0/common:functional_random",
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:fix_leader_alone_command_selector",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/command/available",
"//src/main/scala/net/eagle0/eagle/model/state/command/selected",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/province",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
],
)
scala_test(
name = "invitation_command_selector_test",
srcs = ["InvitationCommandSelectorTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:invitation_command_selector",
"//src/main/scala/net/eagle0/eagle/library/settings:gold_per_hero_held_back",
"//src/main/scala/net/eagle0/eagle/library/settings:min_chance_for_a_i_invite",
"//src/main/scala/net/eagle0/eagle/library/settings:min_support_for_taxes",
"//src/main/scala/net/eagle0/eagle/library/settings:minimum_months_before_repeat_invitation",
"//src/main/scala/net/eagle0/eagle/library/settings:minimum_prestige_difference_to_invite",
"//src/main/scala/net/eagle0/eagle/library/settings:minimum_trust_to_invite",
"//src/main/scala/net/eagle0/eagle/library/settings:prestige_per_supported_province",
"//src/main/scala/net/eagle0/eagle/library/util:command_selection",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/command/available",
"//src/main/scala/net/eagle0/eagle/model/state/command/common",
"//src/main/scala/net/eagle0/eagle/model/state/command/selected",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/province",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
],
)
scala_test(
name = "mid_game_ai_client_test",
srcs = ["MidGameAIClientTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:mid_game_ai_client",
"//src/main/scala/net/eagle0/eagle/library/settings:gold_per_hero_held_back",
"//src/main/scala/net/eagle0/eagle/library/settings:months_recon_considered_recent",
"//src/main/scala/net/eagle0/eagle/library/util:command_selection",
"//src/main/scala/net/eagle0/eagle/model/state:army",
"//src/main/scala/net/eagle0/eagle/model/state:battalion_type",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/battalion",
"//src/main/scala/net/eagle0/eagle/model/state/battalion/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/command/available",
"//src/main/scala/net/eagle0/eagle/model/state/command/common",
"//src/main/scala/net/eagle0/eagle/model/state/command/selected",
"//src/main/scala/net/eagle0/eagle/model/state/date",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/hero",
"//src/main/scala/net/eagle0/eagle/model/state/hero/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/province",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
"//src/main/scala/net/eagle0/eagle/model/view/province:province_view",
],
)
scala_test(
name = "move_leader_to_better_province_command_chooser_test",
srcs = ["MoveLeaderToBetterProvinceCommandChooserTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:move_leader_to_better_province_command_chooser",
"//src/main/scala/net/eagle0/eagle/library/settings:gold_per_hero_held_back",
"//src/main/scala/net/eagle0/eagle/library/util:command_selection",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/command/available",
"//src/main/scala/net/eagle0/eagle/model/state/command/selected",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/hero",
"//src/main/scala/net/eagle0/eagle/model/state/hero/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/province",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
],
)
scala_test(
name = "resolve_diplomacy_command_selector_test",
srcs = ["ResolveDiplomacyCommandSelectorTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:resolve_diplomacy_command_selector",
"//src/main/scala/net/eagle0/eagle/library/settings:ai_alliance_acceptance_base_chance",
"//src/main/scala/net/eagle0/eagle/library/settings:ai_truce_acceptance_base_chance",
"//src/main/scala/net/eagle0/eagle/library/settings:minimum_prestige_difference_to_invite",
"//src/main/scala/net/eagle0/eagle/library/settings:prestige_per_supported_province",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/province",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
],
)
scala_test(
name = "seek_more_leaders_command_chooser_test",
srcs = ["SeekMoreLeadersCommandChooserTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/ai:seek_more_leaders_command_chooser",
"//src/main/scala/net/eagle0/eagle/library/settings:ai_minimum_charisma_for_sworn_brother",
"//src/main/scala/net/eagle0/eagle/library/settings:ai_minimum_constitution_for_sworn_brother",
"//src/main/scala/net/eagle0/eagle/library/settings:loyalty_gain_from_feast",
"//src/main/scala/net/eagle0/eagle/library/settings:minimum_loyalty_for_swear_brotherhood",
"//src/main/scala/net/eagle0/eagle/library/util:command_selection",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/command/available",
"//src/main/scala/net/eagle0/eagle/model/state/command/common",
"//src/main/scala/net/eagle0/eagle/model/state/command/selected",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/hero",
"//src/main/scala/net/eagle0/eagle/model/state/hero/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/province",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
],
)
@@ -3,10 +3,7 @@ load("@rules_scala//scala:scala.bzl", "scala_library")
scala_library(
name = "jwt_service",
srcs = ["JwtService.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
deps = [
"@maven//:com_nimbusds_nimbus_jose_jwt",
],
@@ -15,19 +12,13 @@ scala_library(
scala_library(
name = "oauth_config",
srcs = ["OAuthConfig.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
)
scala_library(
name = "oauth_service",
srcs = ["OAuthService.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
exports = [
"//src/main/protobuf/net/eagle0/eagle/api:auth_scala_grpc",
],
@@ -45,10 +36,7 @@ scala_library(
scala_library(
name = "user_service",
srcs = ["UserService.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
exports = [
"//src/main/protobuf/net/eagle0/eagle/internal:user_scala_proto",
"//src/main/scala/net/eagle0/eagle:user_id",
@@ -1,12 +1,9 @@
load("@rules_scala//scala:scala.bzl", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_library", "scala_test")
scala_library(
name = "client_text",
srcs = ["ClientText.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/model/action_result/generated_text_request",
@@ -16,10 +13,7 @@ scala_library(
scala_library(
name = "client_text_store",
srcs = ["ClientTextStore.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
exports = [
":pregenerated_text_store",
"//src/main/scala/net/eagle0/eagle/model/action_result/generated_text_request",
@@ -36,10 +30,7 @@ scala_library(
scala_library(
name = "client_text_store_impl",
srcs = ["ClientTextStoreImpl.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
deps = [
":client_text",
":client_text_store",
@@ -60,10 +51,7 @@ scala_library(
scala_library(
name = "text_generation_result",
srcs = ["TextGenerationResult.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
deps = [
"//src/main/scala/net/eagle0/eagle/library:eagle_internal_exception",
],
@@ -72,11 +60,25 @@ scala_library(
scala_library(
name = "pregenerated_text_store",
srcs = ["PregeneratedClientTextStore.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
deps = [
# "//src/main/scala/net/eagle0/eagle/library:eagle_internal_exception",
],
)
scala_test(
name = "client_text_store_impl_test",
srcs = ["ClientTextStoreImplTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/client_text",
"//src/main/scala/net/eagle0/eagle/client_text:client_text_store",
"//src/main/scala/net/eagle0/eagle/client_text:client_text_store_impl",
"//src/main/scala/net/eagle0/eagle/client_text:pregenerated_text_store",
"//src/main/scala/net/eagle0/eagle/client_text:text_generation_result",
"//src/main/scala/net/eagle0/eagle/library:eagle_internal_exception",
"//src/main/scala/net/eagle0/eagle/model/action_result/generated_text_request",
"//src/main/scala/net/eagle0/eagle/service/persistence:persister",
"@maven//:org_scalamock_scalamock_3",
],
)
@@ -1,14 +1,13 @@
load("@rules_scala//scala:scala.bzl", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_library", "scala_test")
scala_library(
name = "engine",
srcs = ["Engine.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle/ai:__pkg__",
"//src/main/scala/net/eagle0/eagle/service:__pkg__",
"//src/main/scala/net/eagle0/eagle/service:__subpackages__",
"//src/main/scala/net/eagle0/eagle/service/controller:__pkg__",
"//src/test/scala/net/eagle0/eagle/service:__pkg__",
"//src/test/scala/net/eagle0/eagle/service/controller:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/model/action_result:action_result_trait",
@@ -33,8 +32,8 @@ scala_library(
name = "engine_impl",
srcs = ["EngineImpl.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle/library:__pkg__",
"//src/main/scala/net/eagle0/eagle/service:__subpackages__",
"//src/test/scala/net/eagle0/eagle/library:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/library:engine",
@@ -82,7 +81,7 @@ scala_library(
srcs = ["ActionResultFilter.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/library:__pkg__",
"//src/main/scala/net/eagle0/eagle/library:__pkg__",
],
exports = [
"//src/main/scala/net/eagle0/eagle/model/view/action_result:action_result_view",
@@ -105,29 +104,20 @@ scala_library(
scala_library(
name = "eagle_client_exception",
srcs = ["EagleClientException.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
)
scala_library(
name = "eagle_internal_exception",
srcs = ["EagleInternalException.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
deps = [],
)
scala_library(
name = "eagle_validation_exception",
srcs = ["EagleValidationException.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
exports = [":eagle_internal_exception"],
deps = [":eagle_internal_exception"],
)
@@ -135,10 +125,7 @@ scala_library(
scala_library(
name = "game_history",
srcs = ["GameHistory.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle:__subpackages__",
],
visibility = ["//src/main/scala/net/eagle0/eagle:__subpackages__"],
exports = [
"//src/main/scala/net/eagle0/eagle/library/actions/applier:action_result_applier",
"//src/main/scala/net/eagle0/eagle/model/state/date",
@@ -209,3 +196,34 @@ scala_library(
"//src/main/scala/net/eagle0/eagle/model/state/province",
],
)
scala_test(
name = "engine_impl_test",
srcs = ["EngineImplTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/library:eagle_client_exception",
"//src/main/scala/net/eagle0/eagle/library:eagle_internal_exception",
"//src/main/scala/net/eagle0/eagle/library:engine_impl",
"//src/main/scala/net/eagle0/eagle/library:game_history",
"//src/main/scala/net/eagle0/eagle/library/util/hero_generator",
"//src/main/scala/net/eagle0/eagle/model/action_result/concrete:action_result_concrete",
"//src/main/scala/net/eagle0/eagle/model/action_result/types",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/command/selected",
"//src/main/scala/net/eagle0/eagle/model/state/date",
"//src/main/scala/net/eagle0/eagle/service:in_memory_history",
"//src/main/scala/net/eagle0/eagle/shardok_interface:battle_resolution",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:org_scalamock_scalamock_3",
],
)
#scala_test(
# name = "action_result_filter_test",
# srcs = ["ActionResultFilterTest.scala"],
# deps = [
# # "//src/main/scala/net/eagle0/eagle/library:action_result_filter",
# "//src/main/scala/net/eagle0/eagle:eagle_pkg",
# ],
#)
@@ -1,13 +1,13 @@
load("@rules_scala//scala:scala.bzl", "scala_library")
load("@rules_scala//scala:scala.bzl", "scala_library", "scala_test")
scala_library(
name = "action_result_applier",
srcs = ["ActionResultApplier.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/library:__pkg__",
"//src/test/scala/net/eagle0/eagle/library/actions:__subpackages__",
"//src/test/scala/net/eagle0/eagle/service:__pkg__",
"//src/main/scala/net/eagle0/eagle/library:__pkg__",
"//src/main/scala/net/eagle0/eagle/library/actions:__subpackages__",
"//src/main/scala/net/eagle0/eagle/service:__pkg__",
],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
@@ -146,7 +146,7 @@ scala_library(
srcs = ["GameStateExtensions.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/library/actions:__subpackages__",
"//src/main/scala/net/eagle0/eagle/library/actions:__subpackages__",
],
exports = [
":game_state_battalion_extensions",
@@ -189,7 +189,7 @@ scala_library(
srcs = ["ActionResultApplierImpl.scala"],
visibility = [
"//src/main/scala/net/eagle0/eagle:__subpackages__",
"//src/test/scala/net/eagle0/eagle/library/actions:__subpackages__",
"//src/main/scala/net/eagle0/eagle/library/actions:__subpackages__",
],
exports = [
":action_result_applier",
@@ -205,3 +205,30 @@ scala_library(
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
],
)
scala_test(
name = "action_result_applier_scala_impl_test",
srcs = ["ActionResultApplierImplTest.scala"],
deps = [
"//src/main/scala/net/eagle0/eagle:eagle_pkg",
"//src/main/scala/net/eagle0/eagle/library/actions/applier:action_result_applier_impl",
"//src/main/scala/net/eagle0/eagle/library/settings:extra_xp_for_stat_bump_over100",
"//src/main/scala/net/eagle0/eagle/library/settings:xp_for_stat_bump",
"//src/main/scala/net/eagle0/eagle/model/action_result:notification_trait",
"//src/main/scala/net/eagle0/eagle/model/action_result/concrete:action_result_concrete",
"//src/main/scala/net/eagle0/eagle/model/action_result/concrete:changed_battalion_concrete",
"//src/main/scala/net/eagle0/eagle/model/action_result/concrete:changed_faction_concrete",
"//src/main/scala/net/eagle0/eagle/model/action_result/concrete:changed_hero_concrete",
"//src/main/scala/net/eagle0/eagle/model/action_result/concrete:notification_concrete",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/battalion/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/date",
"//src/main/scala/net/eagle0/eagle/model/state/faction:faction_relationship",
"//src/main/scala/net/eagle0/eagle/model/state/faction/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/hero/backstory_version",
"//src/main/scala/net/eagle0/eagle/model/state/hero/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/province/concrete",
"//src/main/scala/net/eagle0/eagle/model/state/run_status",
],
)
@@ -5,12 +5,12 @@ import net.eagle0.eagle.library.settings.MinVigorForCrackDown
import net.eagle0.eagle.model.state.command.available.AvailableCommand.HandleRiotCrackDownAvailable
import net.eagle0.eagle.model.state.game_state.GameState
import net.eagle0.eagle.model.state.hero.concrete.HeroC
import net.eagle0.eagle.model.state.province.ProvinceEvent.ImminentRiotEvent
import net.eagle0.eagle.model.state.province.concrete.ProvinceC
import org.scalatest.BeforeAndAfterEach
import org.scalatest.Inside.inside
import net.eagle0.eagle.model.state.province.ProvinceEvent.ImminentRiotEvent
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.scalatest.BeforeAndAfterEach
import org.scalatest.Inside.inside
class AvailableHandleRiotCrackDownCommandFactoryTest extends AnyFlatSpec with BeforeAndAfterEach with Matchers {
private val fid: FactionId = 17
@@ -74,10 +74,11 @@ class AvailableHandleRiotCrackDownCommandFactoryTest extends AnyFlatSpec with Be
val result = AvailableHandleRiotCrackDownCommandFactory
.availableCommand(makeGameState(), fid, pid)
inside(result.get) { case cmd: HandleRiotCrackDownAvailable =>
cmd.actingProvinceId shouldBe pid
cmd.availableHeroIds shouldBe rulingFactionHeroIds
cmd.battalionIdsAvailable shouldBe battalionIds
inside(result.get) {
case cmd: HandleRiotCrackDownAvailable =>
cmd.actingProvinceId shouldBe pid
cmd.availableHeroIds shouldBe rulingFactionHeroIds
cmd.battalionIdsAvailable shouldBe battalionIds
}
}
@@ -99,8 +100,9 @@ class AvailableHandleRiotCrackDownCommandFactoryTest extends AnyFlatSpec with Be
val result = AvailableHandleRiotCrackDownCommandFactory
.availableCommand(makeGameState(heroVigorOverrides = Map(10 -> 12.0)), fid, pid)
inside(result.get) { case cmd: HandleRiotCrackDownAvailable =>
cmd.availableHeroIds shouldBe Vector(20, 30)
inside(result.get) {
case cmd: HandleRiotCrackDownAvailable =>
cmd.availableHeroIds shouldBe Vector(20, 30)
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -78,23 +78,24 @@ class PerformHostileArmySetupActionTest extends AnyFlatSpec with Matchers {
result.actionResultType shouldBe SetUpHostileArmies
result.changedProvinces should have size 1
inside(result.changedProvinces.head) { case c: ChangedProvinceC =>
c.provinceId shouldBe 98
c.removedIncomingArmyIds shouldBe Vector(22)
c.newHostileArmies should have size 1
val hag = c.newHostileArmies.head
hag.factionId shouldBe anotherFactionId
hag.status shouldBe HostileArmyGroupStatus.AwaitingDecision
hag.armies should have size 1
// Verify the full army structure is preserved
val army = hag.armies.head
army.id shouldBe 22
army.originProvinceId shouldBe neighborProvinceId
army.arrivalRound shouldBe currentRoundId
army.startingPositionIndex shouldBe Some(3)
army.army.factionId shouldBe anotherFactionId
inside(result.changedProvinces.head) {
case c: ChangedProvinceC =>
c.provinceId shouldBe 98
c.removedIncomingArmyIds shouldBe Vector(22)
c.newHostileArmies should have size 1
val hag = c.newHostileArmies.head
hag.factionId shouldBe anotherFactionId
hag.status shouldBe HostileArmyGroupStatus.AwaitingDecision
hag.armies should have size 1
// Verify the full army structure is preserved
val army = hag.armies.head
army.id shouldBe 22
army.originProvinceId shouldBe neighborProvinceId
army.arrivalRound shouldBe currentRoundId
army.startingPositionIndex shouldBe Some(3)
army.army.factionId shouldBe anotherFactionId
}
}

Some files were not shown because too many files have changed in this diff Show More