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.
@@ -44,16 +44,15 @@ module Modsvaskr
44
44
  ]
45
45
  end
46
46
 
47
- # Get the list of tests to be run in the AutoTest mod for a given list of test names.
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<String, Array<String> >: List of AutoTest mod test names, per AutoTest mod tests suite
55
- def auto_tests_for(tests)
56
- { 'Locations' => tests }
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<String, Array<[String, String]> >): Ordered list of AutoTest [test name, test status], per AutoTest tests suite
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?('Locations') ? auto_test_statuses['Locations'] : []
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 the AutoTest mod for a given list of test names.
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<String, Array<String> >: List of AutoTest mod test names, per AutoTest mod tests suite
31
- def auto_tests_for(tests)
32
- { 'NPCs' => tests }
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<String, Array<[String, String]> >): Ordered list of AutoTest [test name, test status], per AutoTest tests suite
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?('NPCs') ? auto_test_statuses['NPCs'] : []
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
@@ -23,17 +23,45 @@ module Modsvaskr
23
23
  # Run the UI
24
24
  def run
25
25
  begin
26
- CursesMenu.new 'Modsvaskr - Stronghold of Mods' do |main_menu|
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 "Modsvaskr - Stronghold of Mods > #{game.name}" do |game_menu|
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 "Modsvaskr - Stronghold of Mods > #{game.name} > Testing" do |test_menu|
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 "Modsvaskr - Stronghold of Mods > #{game.name} > Testing > Tests #{tests_suite}" do |tests_suite_menu|
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 'Modsvaskr - Stronghold of Mods > Logs' do |logs_menu|
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
@@ -1,5 +1,5 @@
1
1
  module Modsvaskr
2
2
 
3
- VERSION = '0.0.4'
3
+ VERSION = '0.1.0'
4
4
 
5
5
  end
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
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: 2020-11-23 00:00:00.000000000 Z
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.1.2
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'