(t *testing.T)
| 27 | ) |
| 28 | |
| 29 | func TestMetaStringResolver(t *testing.T) { |
| 30 | resolver := fory.NewMetaStringResolver() |
| 31 | encoder := meta.NewEncoder('$', '_') |
| 32 | buffer := fory.NewByteBuffer(make([]byte, 512)) // Allocate enough space |
| 33 | var bufErr fory.Error |
| 34 | |
| 35 | // Test 1: Regular English string |
| 36 | metaStr1, _ := encoder.Encode("hello, world") |
| 37 | metaBytes1 := resolver.GetMetaStrBytes(&metaStr1) |
| 38 | resolver.WriteMetaStringBytes(buffer, metaBytes1, &bufErr) |
| 39 | if bufErr.HasError() { |
| 40 | t.Fatalf("write failed: %v", bufErr.Error()) |
| 41 | } |
| 42 | got1, _ := resolver.ReadMetaStringBytes(buffer, &bufErr) |
| 43 | if got1.Hashcode != metaBytes1.Hashcode || !bytes.Equal(got1.Data, metaBytes1.Data) { |
| 44 | t.Errorf("Mismatch in English string") |
| 45 | } |
| 46 | |
| 47 | // Test 2: Manually constructed MetaStringBytes |
| 48 | data2 := []byte{0xBF, 0x05, 0xA4, 0x71, 0xA9, 0x92, 0x53, 0x96, 0xA6, 0x49, 0x4F, 0x72, 0x9C, 0x68, 0x29, 0x80} |
| 49 | metaBytes2 := fory.NewMetaStringBytes(data2, fory.ComputeMetaStringHash(data2, meta.LOWER_SPECIAL)) |
| 50 | resolver.WriteMetaStringBytes(buffer, metaBytes2, &bufErr) |
| 51 | if bufErr.HasError() { |
| 52 | t.Fatalf("write failed: %v", bufErr.Error()) |
| 53 | } |
| 54 | got2, _ := resolver.ReadMetaStringBytes(buffer, &bufErr) |
| 55 | if got2.Hashcode != metaBytes2.Hashcode || !bytes.Equal(got2.Data, metaBytes2.Data) { |
| 56 | t.Errorf("Mismatch in custom data") |
| 57 | } |
| 58 | |
| 59 | // Test 3: Empty string |
| 60 | metaStr3, _ := encoder.Encode("") |
| 61 | metaBytes3 := resolver.GetMetaStrBytes(&metaStr3) |
| 62 | resolver.WriteMetaStringBytes(buffer, metaBytes3, &bufErr) |
| 63 | if bufErr.HasError() { |
| 64 | t.Fatalf("write failed: %v", bufErr.Error()) |
| 65 | } |
| 66 | got3, _ := resolver.ReadMetaStringBytes(buffer, &bufErr) |
| 67 | if got3.Hashcode != metaBytes3.Hashcode || !bytes.Equal(got3.Data, metaBytes3.Data) { |
| 68 | t.Errorf("Mismatch in empty string") |
| 69 | } |
| 70 | |
| 71 | // Test 4: Chinese string |
| 72 | metaStr4, _ := encoder.Encode("你好,世界") |
| 73 | metaBytes4 := resolver.GetMetaStrBytes(&metaStr4) |
| 74 | resolver.WriteMetaStringBytes(buffer, metaBytes4, &bufErr) |
| 75 | if bufErr.HasError() { |
| 76 | t.Fatalf("write failed: %v", bufErr.Error()) |
| 77 | } |
| 78 | got4, _ := resolver.ReadMetaStringBytes(buffer, &bufErr) |
| 79 | if got4.Hashcode != metaBytes4.Hashcode || !bytes.Equal(got4.Data, metaBytes4.Data) { |
| 80 | t.Errorf("Mismatch in Chinese string") |
| 81 | } |
| 82 | |
| 83 | // Test 5: Japanese string (more than 16 bytes, triggers hash-based encoding) |
| 84 | metaStr5, _ := encoder.Encode("こんにちは世界") |
| 85 | metaBytes5 := resolver.GetMetaStrBytes(&metaStr5) |
| 86 | resolver.WriteMetaStringBytes(buffer, metaBytes5, &bufErr) |
nothing calls this directly
no test coverage detected