Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: mojom/mojom_parser/serialization/serialization_test.go

Issue 1776243004: Mojom runtime type info: Use compression and base64 encoding. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebasing Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojom/mojom_parser/serialization/serialization.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package serialization 5 package serialization
6 6
7 import ( 7 import (
8 "bytes"
9 "compress/gzip"
10 "encoding/base64"
8 "fmt" 11 "fmt"
12 "io/ioutil"
9 "mojo/public/go/bindings" 13 "mojo/public/go/bindings"
10 "mojom/mojom_parser/generated/mojom_files" 14 "mojom/mojom_parser/generated/mojom_files"
11 "mojom/mojom_parser/generated/mojom_types" 15 "mojom/mojom_parser/generated/mojom_types"
12 "mojom/mojom_parser/mojom" 16 "mojom/mojom_parser/mojom"
13 "mojom/mojom_parser/parser" 17 "mojom/mojom_parser/parser"
14 "reflect" 18 "reflect"
15 "testing" 19 "testing"
16 myfmt "third_party/golang/src/fmt" 20 myfmt "third_party/golang/src/fmt"
17 ) 21 )
18 22
(...skipping 1996 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 t.Errorf("Serialization error for case %d: %s", i, err.E rror()) 2019 t.Errorf("Serialization error for case %d: %s", i, err.E rror())
2016 continue 2020 continue
2017 } 2021 }
2018 2022
2019 // Deserialize 2023 // Deserialize
2020 decoder := bindings.NewDecoder(bytes, nil) 2024 decoder := bindings.NewDecoder(bytes, nil)
2021 fileGraph := mojom_files.MojomFileGraph{} 2025 fileGraph := mojom_files.MojomFileGraph{}
2022 fileGraph.Decode(decoder) 2026 fileGraph.Decode(decoder)
2023 2027
2024 // Deserialize RuntimeTypeInfo A 2028 // Deserialize RuntimeTypeInfo A
2025 » » decoder = bindings.NewDecoder(*fileGraph.Files[fileNameA].Serial izedRuntimeTypeInfo, nil) 2029 » » runtimeTypeInfoA := deserializeRuntimeTypeInfo(*fileGraph.Files[ fileNameA].SerializedRuntimeTypeInfo)
2026 » » runtimeTypeInfoA := mojom_types.RuntimeTypeInfo{}
2027 » » runtimeTypeInfoA.Decode(decoder)
2028 2030
2029 // Deserialize RuntimeTypeInfo B 2031 // Deserialize RuntimeTypeInfo B
2030 » » decoder = bindings.NewDecoder(*fileGraph.Files[fileNameB].Serial izedRuntimeTypeInfo, nil) 2032 » » runtimeTypeInfoB := deserializeRuntimeTypeInfo(*fileGraph.Files[ fileNameB].SerializedRuntimeTypeInfo)
2031 » » runtimeTypeInfoB := mojom_types.RuntimeTypeInfo{}
2032 » » runtimeTypeInfoB.Decode(decoder)
2033 2033
2034 // Compare A 2034 // Compare A
2035 if err := compareTwoGoObjects(c.expectedRuntimeTypeInfoA, &runti meTypeInfoA); err != nil { 2035 if err := compareTwoGoObjects(c.expectedRuntimeTypeInfoA, &runti meTypeInfoA); err != nil {
2036 t.Errorf("case %d A:\n%s", i, err.Error()) 2036 t.Errorf("case %d A:\n%s", i, err.Error())
2037 } 2037 }
2038 2038
2039 // Compare B 2039 // Compare B
2040 if err := compareTwoGoObjects(c.expectedRuntimeTypeInfoB, &runti meTypeInfoB); err != nil { 2040 if err := compareTwoGoObjects(c.expectedRuntimeTypeInfoB, &runti meTypeInfoB); err != nil {
2041 t.Errorf("case %d B:\n%s", i, err.Error()) 2041 t.Errorf("case %d B:\n%s", i, err.Error())
2042 } 2042 }
2043 } 2043 }
2044 } 2044 }
2045 2045
2046 func deserializeRuntimeTypeInfo(base64String string) mojom_types.RuntimeTypeInfo {
2047 compressedBytes, err := base64.StdEncoding.DecodeString(base64String)
2048 if err != nil {
2049 panic(fmt.Sprintf("Error while unencoding runtimeTypeInfo: %s", err.Error()))
2050 }
2051 reader, err2 := gzip.NewReader(bytes.NewBuffer(compressedBytes))
2052 if err2 != nil {
2053 panic(fmt.Sprintf("Error while decompressing runtimeTypeInfo: %s ", err.Error()))
2054 }
2055 uncompressedBytes, err3 := ioutil.ReadAll(reader)
2056 if err3 != nil {
2057 panic(fmt.Sprintf("Error while decompressing runtimeTypeInfo: %s ", err2.Error()))
2058 }
2059 if err = reader.Close(); err != nil {
2060 panic(fmt.Sprintf("Error while decompressing runtimeTypeInfo: %s ", err.Error()))
2061 }
2062 decoder := bindings.NewDecoder(uncompressedBytes, nil)
2063 runtimeTypeInfo := mojom_types.RuntimeTypeInfo{}
2064 runtimeTypeInfo.Decode(decoder)
2065 return runtimeTypeInfo
2066 }
2067
2046 // compareTwoGoObjects compares |expected| and |actual| and returns a non-nil 2068 // compareTwoGoObjects compares |expected| and |actual| and returns a non-nil
2047 // error if they are not deeply equal. The error message contains a human-readab le 2069 // error if they are not deeply equal. The error message contains a human-readab le
2048 // string containing a deep-print of expected and actual along with the substrin gs 2070 // string containing a deep-print of expected and actual along with the substrin gs
2049 // starting from the first character where they differ. 2071 // starting from the first character where they differ.
2050 func compareTwoGoObjects(expected interface{}, actual interface{}) error { 2072 func compareTwoGoObjects(expected interface{}, actual interface{}) error {
2051 if !reflect.DeepEqual(expected, actual) { 2073 if !reflect.DeepEqual(expected, actual) {
2052 // Note(rudominer) The myfmt package is a local modification of the fmt package 2074 // Note(rudominer) The myfmt package is a local modification of the fmt package
2053 // that does a deep printing that follows pointers for up to 50 levels. 2075 // that does a deep printing that follows pointers for up to 50 levels.
2054 // Thus expectedString and actualString should contain enough in formation to 2076 // Thus expectedString and actualString should contain enough in formation to
2055 // precisely capture the structure of expected and actual. 2077 // precisely capture the structure of expected and actual.
(...skipping 15 matching lines...) Expand all
2071 } 2093 }
2072 return fmt.Errorf("*****\nexpected=\n*****\n%q\n*****\na ctual=\n*****\n%q\n*****\n"+ 2094 return fmt.Errorf("*****\nexpected=\n*****\n%q\n*****\na ctual=\n*****\n%q\n*****\n"+
2073 "match failed at position %d: expected=\n*****\n %q\n******\nactual=\n*****\n%q\n******\n", 2095 "match failed at position %d: expected=\n*****\n %q\n******\nactual=\n*****\n%q\n******\n",
2074 expectedString, actualString, diffPos, mismatchE xpected, mismatchActual) 2096 expectedString, actualString, diffPos, mismatchE xpected, mismatchActual)
2075 } else { 2097 } else {
2076 return fmt.Errorf("expected != actual but the two printe d equal.") 2098 return fmt.Errorf("expected != actual but the two printe d equal.")
2077 } 2099 }
2078 } 2100 }
2079 return nil 2101 return nil
2080 } 2102 }
OLDNEW
« no previous file with comments | « mojom/mojom_parser/serialization/serialization.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698