v/vlib/x/encoding/asn1/printablestring_test.v

55 lines
1.5 KiB
V

// Copyright (c) 2022, 2024 blackshirt. All rights reserved.
// Use of this source code is governed by a MIT License
// that can be found in the LICENSE file.
module asn1
// Tests case for PrintableString
fn test_encode_printablestring_basic() ! {
s := 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ps := PrintableString.new(s)!
buf := encode(ps)!
mut out := [u8(0x13)]
length := [u8(0x81), u8(s.len)]
out << length
out << s.bytes()
// dump(out)
assert out == buf
psback, _ := PrintableString.decode(buf)!
assert psback.tag().tag_number() == int(TagType.printablestring)
assert psback.tag().tag_class() == .universal
assert psback.value == s
}
struct EncodingTest[T] {
input T
exp []u8
}
fn test_encode_printablestring_generic() {
data := [
// from dart asn1lib test
EncodingTest[string]{'TheTestString', [u8(0x13), 13, 84, 104, 101, 84, 101, 115, 116, 83,
116, 114, 105, 110, 103]},
EncodingTest[string]{'Test User 1', [u8(0x13), 0x0b, 84, 101, 115, 116, 32, 85, 115, 101,
114, 32, 49]},
]
for t in data {
ps := PrintableString.new(string(t.input))!
out := encode(ps)!
// out := serialize_printablestring(string(t.input))!
assert out == t.exp
// decode back
psback, _ := PrintableString.decode(out)!
assert psback.value == t.input
assert psback.tag().tag_number() == int(TagType.printablestring)
assert psback.tag().is_constructed() == false
}
}