modsvaskr 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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'