Skip to content

Commit

Permalink
add test for shstrtab and fix implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
katsyoshi committed Mar 2, 2024
1 parent de8705c commit dce57ef
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 13 deletions.
11 changes: 3 additions & 8 deletions lib/vaporware/compiler/assembler/elf/section/shstrtab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,14 @@ class Vaporware::Compiler::Assembler::ELF::Section::Shstrtab
include Vaporware::Compiler::Assembler::ELF::Utils
def initialize = @name = []
def build = bytes.flatten.pack("C*")
def set!(name:)
@name << set(name)
self
end

def set(name:) = name!(name)
def set!(name:) = (@name << name!(name); self)

private
def bytes = [@name]
def bytes = [@name, [0]]
def name!(name)
case name
when String
(name.match(/\A\0.+\0\z/) ? name : "\0#{name}\0").bytes
(name.match(/\A\0\..+\z/) ? name : "\0.#{name}").bytes
when Array
raise Vaporware::Compiler::Assembler::ELF::Error, "unaccepted type in Array" unless name.all? { |elem| elem.is_a?(Integer) }
n = name
Expand Down
2 changes: 1 addition & 1 deletion sig/vaporware/compiler/assembler/elf/section/shstrtab.rbs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class Vaporware::Compiler::Assembler::ELF::Section::Shstrtab
@strtab: Array[Integer]

def initialize: () -> void
def build: () -> String
def set!: (name: String | Array[Integer]) -> self
def set: (name: String | Array[Integer]) -> Array[Integer]?
Expand Down
10 changes: 6 additions & 4 deletions test/vaporware/compiler/assembler/elf/section/test_shstrtab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
class Vaporware::Compiler::Assembler::ELF::Section::TestShstrtab < Test::Unit::TestCase
def setup = @shstrtab = Vaporware::Compiler::Assembler::ELF::Section::Shstrtab.new
def test_set_values
assert_equal(@shstrtab.set(name: "main"), [0, 109, 97, 105, 110, 0])
assert_equal(@shstrtab.set(name: [0, 109, 97, 105, 110, 0]), [0, 109, 97, 105, 110, 0])
binary = "\x00.main\x00".force_encoding("ASCII-8BIT")
@shstrtab.set!(name: "main")

assert_equal(@shstrtab.build, binary)
end
def test_alert_values
assert_raise(Vaporware::Compiler::Assembler::ELF::Error) { @shstrtab.set(name: :main) }
assert_raise(Vaporware::Compiler::Assembler::ELF::Error) { @shstrtab.set(name: 123) }
assert_raise(Vaporware::Compiler::Assembler::ELF::Error) { @shstrtab.set!(name: :main) }
assert_raise(Vaporware::Compiler::Assembler::ELF::Error) { @shstrtab.set!(name: 123) }
end
end

0 comments on commit dce57ef

Please sign in to comment.