Admin Panel

import pytest
from amitools.vamos.machine import MockMemory
from amitools.vamos.mem import MemoryAlloc
from amitools.vamos.atypes import BString


def atypes_bstring_base_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # simple string
  txt = "hello, world!"
  bs = BString.alloc(alloc, txt)
  assert bs
  assert bs.get_baddr() << 2 == bs.get_addr()
  assert mem.r_bstr(bs.get_addr()) == txt
  assert bs.get_string() == txt
  assert bs == txt
  assert bs == bs.get_addr()
  assert bs == BString(mem, bs.get_addr())
  bs.free()
  assert alloc.is_all_free()


def atypes_bstring_empty_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # empty string
  txt = ""
  bs = BString.alloc(alloc, txt)
  assert bs
  assert bs.get_baddr() << 2 == bs.get_addr()
  assert mem.r_bstr(bs.get_addr()) == txt
  assert bs.get_string() == txt
  assert bs == txt
  assert bs == bs.get_addr()
  bs.free()
  assert alloc.is_all_free()


def atypes_bstring_null_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # no string
  bs = BString.alloc(alloc, None)
  assert bs
  assert bs.get_baddr() << 2 == bs.get_addr()
  assert bs.get_addr() == 0
  assert bs.get_string() is None
  bs.free()
  assert alloc.is_all_free()


def atypes_bstring_alloc_bstr_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  # no string
  bs = BString.alloc(alloc, "bla")
  bs2 = BString.alloc(alloc, bs)
  assert bs
  assert bs.get_string() == "bla"
  assert bs2
  assert bs2.get_string() == "bla"
  bs.free()
  bs2.free()
  assert alloc.is_all_free()


def atypes_bstring_max_size_test():
  mem = MockMemory()
  alloc = MemoryAlloc(mem)
  bs = BString.alloc(alloc, "bla")
  assert bs.get_max_size() == 3
  bs.set_string("foo")
  assert bs == "foo"
  with pytest.raises(ValueError):
    bs.set_string("foo!")