def test_pack_into_mixed_array():
    obj = create_mixed_array()
    size = ScriptDataECMAArray.size(obj)
    buf = bytearray(size)
    offset = 0

    assert ScriptDataECMAArray.pack_into(buf, offset, obj) == MIXED_VALUES_SIZE
def test_size():
    assert ScriptDataValue.size(True) == BOOL_SIZE
    assert ScriptDataValue.size(None) == NULL_SIZE
    assert ScriptDataValue.size(150.5) == NUMBER_SIZE
    assert ScriptDataValue.size([]) == STRICT_ARRAY_SIZE
    assert ScriptDataValue.size(ScriptDataECMAArray()) == ECMA_ARRAY_SIZE
    assert ScriptDataValue.size(ScriptDataObject()) == OBJECT_SIZE
    assert ScriptDataValue.size("ABC") == STRING_SIZE
    assert ScriptDataValue.size(create_date()) == DATE_SIZE
    assert ScriptDataValue.size(create_reference()) == REFERENCE_SIZE
def test_pack():
    assert ScriptDataValue(True) == BOOL
    assert ScriptDataValue(None) == NULL
    assert ScriptDataValue(150.5) == NUMBER
    assert ScriptDataValue([]) == STRICT_ARRAY
    assert ScriptDataValue(ScriptDataECMAArray()) == ECMA_ARRAY
    assert ScriptDataValue(ScriptDataObject()) == OBJECT
    assert ScriptDataValue("ABC") == STRING
    assert ScriptDataValue(create_date()) == DATE
    assert ScriptDataValue(create_reference()) == REFERENCE
def test_unpack():
    assert ScriptDataValue.unpack(BOOL)[0] == True
    assert ScriptDataValue.unpack(NULL)[0] == None
    assert ScriptDataValue.unpack(NUMBER)[0] == 150.5
    assert ScriptDataValue.unpack(STRICT_ARRAY)[0] == []
    assert ScriptDataValue.unpack(ECMA_ARRAY)[0] == ScriptDataECMAArray()
    assert ScriptDataValue.unpack(OBJECT)[0] == ScriptDataObject()
    assert ScriptDataValue.unpack(STRING)[0] == "ABC"
    assert ScriptDataValue.unpack(DATE)[0] == create_date()
    assert ScriptDataValue.unpack(REFERENCE)[0] == create_reference()
def test_read_strings_array(fd):
    assert ScriptDataECMAArray.read(fd) == ScriptDataECMAArray(foo="bar")
    assert fd.tell() == STRING_VALUE_SIZE
def test_read_numbers_array(fd):
    assert ScriptDataECMAArray.read(fd) == ScriptDataECMAArray(foo=123)
    assert fd.tell() == NUMBER_VALUE_SIZE
def test_read_empty_array(fd):
    assert ScriptDataECMAArray.read(fd) == ScriptDataECMAArray()
    assert fd.tell() == EMPTY_ARRAY_SIZE
def test_size_mixed_array():
    obj = create_mixed_array()

    assert ScriptDataECMAArray.size(obj) == MIXED_VALUES_SIZE
def test_size_booleans_array():
    assert ScriptDataECMAArray.size(ScriptDataECMAArray(foo=True)) == BOOLEAN_VALUE_SIZE
def test_size_strings_array():
    assert ScriptDataECMAArray.size(ScriptDataECMAArray(foo="bar")) == STRING_VALUE_SIZE
def test_size_numbers_array():
    assert ScriptDataECMAArray.size(ScriptDataECMAArray(foo=123)) == NUMBER_VALUE_SIZE
def test_pack_mixed_array():
    obj = create_mixed_array()

    assert ScriptDataECMAArray.pack(obj) == MIXED_VALUES
def test_read_booleans_array(fd):
    assert ScriptDataECMAArray.read(fd) == ScriptDataECMAArray(foo=True)
    assert fd.tell() == BOOLEAN_VALUE_SIZE
def test_pack_booleans_array():
    assert ScriptDataECMAArray.pack(ScriptDataECMAArray(foo=True)) == BOOLEAN_VALUE
def test_pack_strings_array():
    assert ScriptDataECMAArray.pack(ScriptDataECMAArray(foo="bar")) == STRING_VALUE
def test_pack_numbers_array():
    assert ScriptDataECMAArray.pack(ScriptDataECMAArray(foo=123)) == NUMBER_VALUE
def test_pack_empty_array():
    assert ScriptDataECMAArray.pack(ScriptDataECMAArray()) == EMPTY_ARRAY
def test_unpack_from():
    obj = create_mixed_array()
    buf = MIXED_VALUES * 2
    offset = 0

    assert ScriptDataECMAArray.unpack_from(buf, offset) == (obj, MIXED_VALUES_SIZE)
def test_read_mixed_array(fd):
    obj = create_mixed_array()

    assert ScriptDataECMAArray.read(fd) == obj
    assert fd.tell() == MIXED_VALUES_SIZE
def test_size_empty_array():
    assert ScriptDataECMAArray.size(ScriptDataECMAArray()) == EMPTY_ARRAY_SIZE