blob: 5bb98454d8a8ec373329dfe28be5ced815c7b9e5 [file] [log] [blame]
// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package gitiles
import (
"encoding/json"
"reflect"
"testing"
)
func TestTypes(t *testing.T) {
type testCase struct {
in string
want interface{}
got interface{}
}
cases := []testCase{
{
in: `{
"id": "0d1df06d6de43086af19990f85b7b7c01799f984",
"entries": [
{
"mode": 33188,
"type": "blob",
"id": "582b4959fa1f8e90330027291c612b1cebc4447c",
"name": "index.html"
}
]
}`,
got: &Tree{},
want: &Tree{
ID: "0d1df06d6de43086af19990f85b7b7c01799f984",
Entries: []TreeEntry{
{
Mode: 33188,
Type: "blob",
ID: "582b4959fa1f8e90330027291c612b1cebc4447c",
Name: "index.html",
},
},
},
},
{
in: `{
"name": "gerrit",
"clone_url": "file:///home/hanwen/vc/gerrit"
}`,
want: &Project{Name: "gerrit",
CloneURL: "file:///home/hanwen/vc/gerrit",
},
got: &Project{},
},
{
in: `{
"name": "Han-Wen Nienhuys",
"email": "hanwen@google.com",
"time": "Fri Feb 26 14:29:31 2016 +0100"
}`,
want: &Person{
Name: "Han-Wen Nienhuys",
Email: "hanwen@google.com",
Time: "Fri Feb 26 14:29:31 2016 +0100",
//time.Date(2016, 2, 26, 14, 29, 31, 0, euTZ),
},
got: &Person{},
},
{
in: `{
"type": "modify",
"old_id": "7d3569881e6dcc4745e853ecc8b9a570f3431060",
"old_mode": 33188,
"old_path": "polygerrit-ui/app/elements/gr-account-label.html",
"new_id": "3f795d0d84716842d319fcf359b553e024a6b811",
"new_mode": 33188,
"new_path": "polygerrit-ui/app/elements/gr-account-label.html"
}`,
want: &DiffEntry{
Type: "modify",
OldID: "7d3569881e6dcc4745e853ecc8b9a570f3431060",
OldMode: 33188,
OldPath: "polygerrit-ui/app/elements/gr-account-label.html",
NewID: "3f795d0d84716842d319fcf359b553e024a6b811",
NewMode: 33188,
NewPath: "polygerrit-ui/app/elements/gr-account-label.html",
},
got: &DiffEntry{},
},
{
in: `{
"commit": "5378eff7b783acd83f2241983f9f97ccf9972d37",
"tree": "868c42f4579291a85689c3def16cb146877af155",
"parents": [
"6233c1a23921c24be2c099fd21f7ea5e029e3777"
],
"author": {
"name": "Han-Wen Nienhuys",
"email": "hanwen@google.com",
"time": "Fri Feb 26 14:29:31 2016 +0100"
},
"committer": {
"name": "Han-Wen Nienhuys",
"email": "hanwen@google.com",
"time": "Thu Mar 03 14:12:41 2016 +0100"
},
"message": "PolyGerrit: inject \"remove reviewer\" into gr-account-label\n\nThis makes gr-account-label into a \"chip\".\n\nBug: Issue \u003c3917\u003e\nChange-Id: Ibe4d62786b0625bad34e651b715a2085c4a2da51\n",
"tree_diff": [
{
"type": "modify",
"old_id": "7d3569881e6dcc4745e853ecc8b9a570f3431060",
"old_mode": 33188,
"old_path": "polygerrit-ui/app/elements/gr-account-label.html",
"new_id": "3f795d0d84716842d319fcf359b553e024a6b811",
"new_mode": 33188,
"new_path": "polygerrit-ui/app/elements/gr-account-label.html"
}
]
}`,
want: &Commit{
Commit: "5378eff7b783acd83f2241983f9f97ccf9972d37",
Tree: "868c42f4579291a85689c3def16cb146877af155",
Parents: []string{
"6233c1a23921c24be2c099fd21f7ea5e029e3777",
},
Author: Person{
Name: "Han-Wen Nienhuys",
Email: "hanwen@google.com",
Time: "Fri Feb 26 14:29:31 2016 +0100",
},
Committer: Person{
Name: "Han-Wen Nienhuys",
Email: "hanwen@google.com",
Time: "Thu Mar 03 14:12:41 2016 +0100",
},
Message: "PolyGerrit: inject \"remove reviewer\" into gr-account-label\n\nThis makes gr-account-label into a \"chip\".\n\nBug: Issue \u003c3917\u003e\nChange-Id: Ibe4d62786b0625bad34e651b715a2085c4a2da51\n",
TreeDiff: []DiffEntry{
{
Type: "modify",
OldID: "7d3569881e6dcc4745e853ecc8b9a570f3431060",
OldMode: 33188,
OldPath: "polygerrit-ui/app/elements/gr-account-label.html",
NewID: "3f795d0d84716842d319fcf359b553e024a6b811",
NewMode: 33188,
NewPath: "polygerrit-ui/app/elements/gr-account-label.html",
},
},
},
got: &Commit{},
},
{
in: `{
"log": [
{
"commit": "5378eff7b783acd83f2241983f9f97ccf9972d37",
"tree": "868c42f4579291a85689c3def16cb146877af155",
"parents": [
"6233c1a23921c24be2c099fd21f7ea5e029e3777"
],
"author": {
"name": "Han-Wen Nienhuys",
"email": "hanwen@google.com",
"time": "Fri Feb 26 14:29:31 2016 +0100"
},
"committer": {
"name": "Han-Wen Nienhuys",
"email": "hanwen@google.com",
"time": "Thu Mar 03 14:12:41 2016 +0100"
},
"message": "PolyGerrit: inject \"remove reviewer\" into gr-account-label\n\nThis makes gr-account-label into a \"chip\".\n\nBug: Issue \u003c3917\u003e\nChange-Id: Ibe4d62786b0625bad34e651b715a2085c4a2da51\n"
}
],
"next": "c32abd0104868f6d798348fa74cff420124deb0e"
}`,
got: &Log{},
want: &Log{
Log: []Commit{
{
Commit: "5378eff7b783acd83f2241983f9f97ccf9972d37",
Tree: "868c42f4579291a85689c3def16cb146877af155",
Parents: []string{
"6233c1a23921c24be2c099fd21f7ea5e029e3777",
}, Author: Person{
Name: "Han-Wen Nienhuys",
Email: "hanwen@google.com",
Time: "Fri Feb 26 14:29:31 2016 +0100",
},
Committer: Person{
Name: "Han-Wen Nienhuys",
Email: "hanwen@google.com",
Time: "Thu Mar 03 14:12:41 2016 +0100",
},
Message: "PolyGerrit: inject \"remove reviewer\" into gr-account-label\n\nThis makes gr-account-label into a \"chip\".\n\nBug: Issue \u003c3917\u003e\nChange-Id: Ibe4d62786b0625bad34e651b715a2085c4a2da51\n",
},
},
Next: "c32abd0104868f6d798348fa74cff420124deb0e",
},
},
{
in: `{
"start": 1,
"count": 4,
"path": "VERSION",
"commit": "3765bb8add118be67b4b0ac6528661e66ac63264",
"author": {
"name": "Shawn Pearce",
"email": "sop@google.com",
"time": "2013-07-29 14:05:26 -0700"
}
}`,
want: &BlameRegion{
Start: 1,
Count: 4,
Path: "VERSION",
Commit: "3765bb8add118be67b4b0ac6528661e66ac63264",
Author: Person{
Name: "Shawn Pearce",
Email: "sop@google.com",
Time: "2013-07-29 14:05:26 -0700",
},
},
got: &BlameRegion{},
},
{
in: `{
"accessories/manifest": {
"name": "accessories/manifest",
"clone_url": "https://android.googlesource.com/accessories/manifest"
}
}
`,
want: &map[string]*Project{
"accessories/manifest": &Project{
Name: "accessories/manifest",
CloneURL: "https://android.googlesource.com/accessories/manifest",
}},
got: &map[string]*Project{},
},
}
for _, c := range cases {
if err := json.Unmarshal([]byte(c.in), c.got); err != nil {
t.Errorf("%T: unmarshalGitiles: %v", c.want, err)
} else if !reflect.DeepEqual(c.got, c.want) {
t.Errorf("%T: got %#v, want %#v", c.want, c.got, c.want)
}
}
}