Home | History | Annotate | Download | only in android
      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 
     15 package android
     16 
     17 import (
     18 	"reflect"
     19 	"testing"
     20 )
     21 
     22 type printfIntoPropertyTestCase struct {
     23 	in  string
     24 	val interface{}
     25 	out string
     26 	err bool
     27 }
     28 
     29 var 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 
    111 func 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