modsvaskr 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/modsvaskr/config.rb +41 -4
- data/lib/modsvaskr/game.rb +119 -1
- data/lib/modsvaskr/games/skyrim_se.rb +11 -10
- data/lib/modsvaskr/in_game_tests_runner.rb +335 -0
- data/lib/modsvaskr/logger.rb +21 -2
- data/lib/modsvaskr/run_cmd.rb +2 -2
- data/lib/modsvaskr/tests_runner.rb +47 -276
- data/lib/modsvaskr/tests_suite.rb +0 -0
- data/lib/modsvaskr/tests_suites/exterior_cell.rb +6 -7
- data/lib/modsvaskr/tests_suites/interior_cell.rb +6 -7
- data/lib/modsvaskr/tests_suites/npc.rb +6 -7
- data/lib/modsvaskr/tests_suites/npc_head.rb +51 -0
- data/lib/modsvaskr/ui.rb +40 -6
- data/lib/modsvaskr/version.rb +1 -1
- data/lib/modsvaskr/xedit.rb +0 -0
- data/xedit_scripts/Modsvaskr_DumpInfo.pas +1 -1
- metadata +61 -3
@@ -44,16 +44,15 @@ module Modsvaskr
|
|
44
44
|
]
|
45
45
|
end
|
46
46
|
|
47
|
-
# Get the list of tests to be run in
|
48
|
-
# AutoTest names are case insensitive.
|
47
|
+
# Get the list of tests to be run in-game for a given list of test names.
|
49
48
|
# [API] - This method is mandatory for tests needing to be run in-game.
|
50
49
|
#
|
51
50
|
# Parameters::
|
52
51
|
# * *tests* (Array<String>): List of test names
|
53
52
|
# Result::
|
54
|
-
# * Hash<
|
55
|
-
def
|
56
|
-
{
|
53
|
+
# * Hash<Symbol, Array<String> >: List of in-game test names, per in-game tests suite
|
54
|
+
def in_game_tests_for(tests)
|
55
|
+
{ locations: tests }
|
57
56
|
end
|
58
57
|
|
59
58
|
# Set statuses based on the result of AutoTest statuses.
|
@@ -62,11 +61,11 @@ module Modsvaskr
|
|
62
61
|
#
|
63
62
|
# Parameters::
|
64
63
|
# * *tests* (Array<String>): List of test names
|
65
|
-
# * *auto_test_statuses* (Hash<
|
64
|
+
# * *auto_test_statuses* (Hash<Symbol, Array<[String, String]> >): Ordered list of AutoTest [test name, test status], per AutoTest tests suite
|
66
65
|
# Result::
|
67
66
|
# * Array<[String, String]>: Corresponding list of [test name, test status]
|
68
67
|
def parse_auto_tests_statuses_for(tests, auto_test_statuses)
|
69
|
-
auto_test_statuses.key?(
|
68
|
+
auto_test_statuses.key?(:locations) ? auto_test_statuses[:locations] : []
|
70
69
|
end
|
71
70
|
|
72
71
|
end
|
@@ -20,16 +20,15 @@ module Modsvaskr
|
|
20
20
|
tests
|
21
21
|
end
|
22
22
|
|
23
|
-
# Get the list of tests to be run in
|
24
|
-
# AutoTest names are case insensitive.
|
23
|
+
# Get the list of tests to be run in-game for a given list of test names.
|
25
24
|
# [API] - This method is mandatory for tests needing to be run in-game.
|
26
25
|
#
|
27
26
|
# Parameters::
|
28
27
|
# * *tests* (Array<String>): List of test names
|
29
28
|
# Result::
|
30
|
-
# * Hash<
|
31
|
-
def
|
32
|
-
{
|
29
|
+
# * Hash<Symbol, Array<String> >: List of in-game test names, per in-game tests suite
|
30
|
+
def in_game_tests_for(tests)
|
31
|
+
{ npcs: tests }
|
33
32
|
end
|
34
33
|
|
35
34
|
# Set statuses based on the result of AutoTest statuses.
|
@@ -38,11 +37,11 @@ module Modsvaskr
|
|
38
37
|
#
|
39
38
|
# Parameters::
|
40
39
|
# * *tests* (Array<String>): List of test names
|
41
|
-
# * *auto_test_statuses* (Hash<
|
40
|
+
# * *auto_test_statuses* (Hash<Symbol, Array<[String, String]> >): Ordered list of AutoTest [test name, test status], per AutoTest tests suite
|
42
41
|
# Result::
|
43
42
|
# * Array<[String, String]>: Corresponding list of [test name, test status]
|
44
43
|
def parse_auto_tests_statuses_for(tests, auto_test_statuses)
|
45
|
-
auto_test_statuses.key?(
|
44
|
+
auto_test_statuses.key?(:npcs) ? auto_test_statuses[:npcs] : []
|
46
45
|
end
|
47
46
|
|
48
47
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Modsvaskr
|
2
|
+
|
3
|
+
module TestsSuites
|
4
|
+
|
5
|
+
class NpcHead < TestsSuite
|
6
|
+
|
7
|
+
# Discover the list of tests information that could be run.
|
8
|
+
# [API] - This method is mandatory
|
9
|
+
#
|
10
|
+
# Result::
|
11
|
+
# * Hash< String, Hash<Symbol,Object> >: Ordered hash of test information, per test name
|
12
|
+
def discover_tests
|
13
|
+
tests = {}
|
14
|
+
@game.xedit.run_script('DumpInfo', only_once: true)
|
15
|
+
CSV.read("#{@game.xedit.install_path}/Edit Scripts/Modsvaskr_ExportedDumpInfo.csv", encoding: 'windows-1251:utf-8').each do |row|
|
16
|
+
tests["#{row[0].downcase}/#{row[2].to_i(16)}"] = {
|
17
|
+
name: "Take head screenshot of #{row[0]} - #{row[3]}"
|
18
|
+
} if row[1].downcase == 'npc_'
|
19
|
+
end
|
20
|
+
tests
|
21
|
+
end
|
22
|
+
|
23
|
+
# Get the list of tests to be run in-game for a given list of test names.
|
24
|
+
# [API] - This method is mandatory for tests needing to be run in-game.
|
25
|
+
#
|
26
|
+
# Parameters::
|
27
|
+
# * *tests* (Array<String>): List of test names
|
28
|
+
# Result::
|
29
|
+
# * Hash<Symbol, Array<String> >: List of in-game test names, per in-game tests suite
|
30
|
+
def in_game_tests_for(tests)
|
31
|
+
{ npcshead: tests }
|
32
|
+
end
|
33
|
+
|
34
|
+
# Set statuses based on the result of AutoTest statuses.
|
35
|
+
# AutoTest names are case insensitive.
|
36
|
+
# [API] - This method is mandatory for tests needing to be run in-game.
|
37
|
+
#
|
38
|
+
# Parameters::
|
39
|
+
# * *tests* (Array<String>): List of test names
|
40
|
+
# * *auto_test_statuses* (Hash<Symbol, Array<[String, String]> >): Ordered list of AutoTest [test name, test status], per AutoTest tests suite
|
41
|
+
# Result::
|
42
|
+
# * Array<[String, String]>: Corresponding list of [test name, test status]
|
43
|
+
def parse_auto_tests_statuses_for(tests, auto_test_statuses)
|
44
|
+
auto_test_statuses.key?(:npcshead) ? auto_test_statuses[:npcshead] : []
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
data/lib/modsvaskr/ui.rb
CHANGED
@@ -23,17 +23,45 @@ module Modsvaskr
|
|
23
23
|
# Run the UI
|
24
24
|
def run
|
25
25
|
begin
|
26
|
-
|
26
|
+
last_modsvaskr_version = nil
|
27
|
+
gem_list_stdout = `gem list modsvaskr --remote`
|
28
|
+
gem_list_stdout.split("\n").each do |line|
|
29
|
+
if line =~ /^modsvaskr \((.+?)\)/
|
30
|
+
last_modsvaskr_version = $1
|
31
|
+
break
|
32
|
+
end
|
33
|
+
end
|
34
|
+
log "!!! Could not get latest Modsvaskr version. Output of gem list modsvaskr --remote:\n#{gem_list_stdout}" if last_modsvaskr_version.nil?
|
35
|
+
key_presses = @config.auto_keys.map do |key_str|
|
36
|
+
case key_str
|
37
|
+
when 'KEY_ENTER', 'KEY_ESCAPE'
|
38
|
+
CursesMenu.const_get(key_str.to_sym)
|
39
|
+
when /^KEY_\w+$/
|
40
|
+
Curses.const_get(key_str.to_sym)
|
41
|
+
else
|
42
|
+
key_str
|
43
|
+
end
|
44
|
+
end
|
45
|
+
CursesMenu.new(
|
46
|
+
"Modsvaskr v#{Modsvaskr::VERSION} - Stronghold of Mods#{!last_modsvaskr_version.nil? && last_modsvaskr_version != Modsvaskr::VERSION ? " - !!! New version available: #{last_modsvaskr_version}" : ''}",
|
47
|
+
key_presses: key_presses
|
48
|
+
) do |main_menu|
|
27
49
|
@config.games.each do |game|
|
28
50
|
main_menu.item "#{game.name} (#{game.path})" do
|
29
|
-
CursesMenu.new
|
51
|
+
CursesMenu.new(
|
52
|
+
"Modsvaskr v#{Modsvaskr::VERSION} - Stronghold of Mods > #{game.name}",
|
53
|
+
key_presses: key_presses
|
54
|
+
) do |game_menu|
|
30
55
|
game_menu.item 'Testing' do
|
31
56
|
# Read tests info
|
32
|
-
tests_runner = TestsRunner.new(game)
|
57
|
+
tests_runner = TestsRunner.new(@config, game)
|
33
58
|
# Selected test names, per test type
|
34
59
|
# Hash< Symbol, Hash< String, nil > >
|
35
60
|
selected_tests_suites = {}
|
36
|
-
CursesMenu.new
|
61
|
+
CursesMenu.new(
|
62
|
+
"Modsvaskr v#{Modsvaskr::VERSION} - Stronghold of Mods > #{game.name} > Testing",
|
63
|
+
key_presses: key_presses
|
64
|
+
) do |test_menu|
|
37
65
|
tests_runner.tests_suites.each do |tests_suite|
|
38
66
|
statuses_for_suite = tests_runner.statuses_for(tests_suite)
|
39
67
|
all_tests_selected = selected_tests_suites.key?(tests_suite) &&
|
@@ -52,7 +80,10 @@ module Modsvaskr
|
|
52
80
|
'd' => {
|
53
81
|
name: 'Details',
|
54
82
|
execute: proc do
|
55
|
-
CursesMenu.new
|
83
|
+
CursesMenu.new(
|
84
|
+
"Modsvaskr v#{Modsvaskr::VERSION} - Stronghold of Mods > #{game.name} > Testing > Tests #{tests_suite}",
|
85
|
+
key_presses: key_presses
|
86
|
+
) do |tests_suite_menu|
|
56
87
|
statuses_for_suite.each do |(test_name, test_status)|
|
57
88
|
test_selected = selected_tests_suites.key?(tests_suite) && selected_tests_suites[tests_suite].key?(test_name)
|
58
89
|
tests_suite_menu.item "[#{test_selected ? '*' : ' '}] #{test_name} - #{test_status} - #{tests_runner.test_info(tests_suite, test_name)[:name]}" do
|
@@ -145,7 +176,10 @@ module Modsvaskr
|
|
145
176
|
end
|
146
177
|
end
|
147
178
|
main_menu.item 'See logs' do
|
148
|
-
CursesMenu.new
|
179
|
+
CursesMenu.new(
|
180
|
+
'Modsvaskr - Stronghold of Mods > Logs',
|
181
|
+
key_presses: key_presses
|
182
|
+
) do |logs_menu|
|
149
183
|
File.read(Logger.log_file).split("\n").each do |line|
|
150
184
|
logs_menu.item line
|
151
185
|
end
|
data/lib/modsvaskr/version.rb
CHANGED
data/lib/modsvaskr/xedit.rb
CHANGED
File without changes
|
@@ -66,7 +66,7 @@ begin
|
|
66
66
|
slCsv.SaveToFile(ProgramPath + 'Edit Scripts\Modsvaskr_ExportedDumpInfo.csv');
|
67
67
|
slCsv.Free;
|
68
68
|
AddMessage('Export done in ' + ProgramPath + 'Edit Scripts\Modsvaskr_ExportedDumpInfo.csv');
|
69
|
-
Application.Terminate;
|
69
|
+
// Application.Terminate;
|
70
70
|
// ExitProcess(0);
|
71
71
|
Result := 0;
|
72
72
|
end;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modsvaskr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Muriel Salvan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses_menu
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: elder_scrolls_plugin
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: nokogiri
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,48 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '1.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.11'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.11'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sem_ver_components
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.0'
|
41
97
|
description: Command-line UI handling a full Mods' ecosystem for Bethesda's games.
|
42
98
|
email:
|
43
99
|
- muriel@x-aeon.com
|
@@ -50,6 +106,7 @@ files:
|
|
50
106
|
- lib/modsvaskr/config.rb
|
51
107
|
- lib/modsvaskr/game.rb
|
52
108
|
- lib/modsvaskr/games/skyrim_se.rb
|
109
|
+
- lib/modsvaskr/in_game_tests_runner.rb
|
53
110
|
- lib/modsvaskr/logger.rb
|
54
111
|
- lib/modsvaskr/run_cmd.rb
|
55
112
|
- lib/modsvaskr/tests_runner.rb
|
@@ -57,6 +114,7 @@ files:
|
|
57
114
|
- lib/modsvaskr/tests_suites/exterior_cell.rb
|
58
115
|
- lib/modsvaskr/tests_suites/interior_cell.rb
|
59
116
|
- lib/modsvaskr/tests_suites/npc.rb
|
117
|
+
- lib/modsvaskr/tests_suites/npc_head.rb
|
60
118
|
- lib/modsvaskr/ui.rb
|
61
119
|
- lib/modsvaskr/version.rb
|
62
120
|
- lib/modsvaskr/xedit.rb
|
@@ -80,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
138
|
- !ruby/object:Gem::Version
|
81
139
|
version: '0'
|
82
140
|
requirements: []
|
83
|
-
rubygems_version: 3.
|
141
|
+
rubygems_version: 3.0.3
|
84
142
|
signing_key:
|
85
143
|
specification_version: 4
|
86
144
|
summary: 'Stronghold for mods acting like companions: The Modsvaskr'
|