1// Copyright 2016 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package optional
16
17import "testing"
18
19func TestConvertSuccess(t *testing.T) {
20	if got, want := ToBool(false), false; got != want {
21		t.Errorf("got %v, want %v", got, want)
22	}
23	if got, want := ToString(""), ""; got != want {
24		t.Errorf("got %v, want %v", got, want)
25	}
26	if got, want := ToInt(0), 0; got != want {
27		t.Errorf("got %v, want %v", got, want)
28	}
29	if got, want := ToUint(uint(0)), uint(0); got != want {
30		t.Errorf("got %v, want %v", got, want)
31	}
32	if got, want := ToFloat64(0.0), 0.0; got != want {
33		t.Errorf("got %v, want %v", got, want)
34	}
35}
36
37func TestConvertFailure(t *testing.T) {
38	for _, f := range []func(){
39		func() { ToBool(nil) },
40		func() { ToBool(3) },
41		func() { ToString(nil) },
42		func() { ToString(3) },
43		func() { ToInt(nil) },
44		func() { ToInt("") },
45		func() { ToUint(nil) },
46		func() { ToUint("") },
47		func() { ToFloat64(nil) },
48		func() { ToFloat64("") },
49	} {
50		if !panics(f) {
51			t.Error("got no panic, want panic")
52		}
53	}
54}
55
56func panics(f func()) (b bool) {
57	defer func() {
58		if recover() != nil {
59			b = true
60		}
61	}()
62	f()
63	return false
64}
65