1// Copyright 2015 Google Inc. All rights reserved. 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 android 16 17import ( 18 "reflect" 19 "testing" 20) 21 22type printfIntoPropertyTestCase struct { 23 in string 24 val interface{} 25 out string 26 err bool 27} 28 29var printfIntoPropertyTestCases = []printfIntoPropertyTestCase{ 30 { 31 in: "%d", 32 val: 0, 33 out: "0", 34 }, 35 { 36 in: "%d", 37 val: 1, 38 out: "1", 39 }, 40 { 41 in: "%d", 42 val: 2, 43 out: "2", 44 }, 45 { 46 in: "%d", 47 val: false, 48 out: "0", 49 }, 50 { 51 in: "%d", 52 val: true, 53 out: "1", 54 }, 55 { 56 in: "%d", 57 val: -1, 58 out: "-1", 59 }, 60 61 { 62 in: "-DA=%d", 63 val: 1, 64 out: "-DA=1", 65 }, 66 { 67 in: "-DA=%du", 68 val: 1, 69 out: "-DA=1u", 70 }, 71 { 72 in: "-DA=%s", 73 val: "abc", 74 out: "-DA=abc", 75 }, 76 { 77 in: `-DA="%s"`, 78 val: "abc", 79 out: `-DA="abc"`, 80 }, 81 82 { 83 in: "%%", 84 err: true, 85 }, 86 { 87 in: "%d%s", 88 err: true, 89 }, 90 { 91 in: "%d,%s", 92 err: true, 93 }, 94 { 95 in: "%d", 96 val: "", 97 err: true, 98 }, 99 { 100 in: "%d", 101 val: 1.5, 102 err: true, 103 }, 104 { 105 in: "%f", 106 val: 1.5, 107 err: true, 108 }, 109} 110 111func TestPrintfIntoProperty(t *testing.T) { 112 for _, testCase := range printfIntoPropertyTestCases { 113 s := testCase.in 114 v := reflect.ValueOf(&s).Elem() 115 err := printfIntoProperty(v, testCase.val) 116 if err != nil && !testCase.err { 117 t.Errorf("unexpected error %s", err) 118 } else if err == nil && testCase.err { 119 t.Errorf("expected error") 120 } else if err == nil && v.String() != testCase.out { 121 t.Errorf("expected %q got %q", testCase.out, v.String()) 122 } 123 } 124} 125