| // Copyright 2017 Frank Schroeder. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | package properties | 
 |  | 
 | import ( | 
 | 	"flag" | 
 | 	"fmt" | 
 | 	"testing" | 
 | ) | 
 |  | 
 | // TestFlag verifies Properties.MustFlag without flag.FlagSet.Parse | 
 | func TestFlag(t *testing.T) { | 
 | 	f := flag.NewFlagSet("src", flag.PanicOnError) | 
 | 	gotS := f.String("s", "?", "string flag") | 
 | 	gotI := f.Int("i", -1, "int flag") | 
 |  | 
 | 	p := NewProperties() | 
 | 	p.MustSet("s", "t") | 
 | 	p.MustSet("i", "9") | 
 | 	p.MustFlag(f) | 
 |  | 
 | 	if want := "t"; *gotS != want { | 
 | 		t.Errorf("Got string s=%q, want %q", *gotS, want) | 
 | 	} | 
 | 	if want := 9; *gotI != want { | 
 | 		t.Errorf("Got int i=%d, want %d", *gotI, want) | 
 | 	} | 
 | } | 
 |  | 
 | // TestFlagOverride verifies Properties.MustFlag with flag.FlagSet.Parse. | 
 | func TestFlagOverride(t *testing.T) { | 
 | 	f := flag.NewFlagSet("src", flag.PanicOnError) | 
 | 	gotA := f.Int("a", 1, "remain default") | 
 | 	gotB := f.Int("b", 2, "customized") | 
 | 	gotC := f.Int("c", 3, "overridden") | 
 |  | 
 | 	if err := f.Parse([]string{"-c", "4"}); err != nil { | 
 | 		t.Fatal(err) | 
 | 	} | 
 |  | 
 | 	p := NewProperties() | 
 | 	p.MustSet("b", "5") | 
 | 	p.MustSet("c", "6") | 
 | 	p.MustFlag(f) | 
 |  | 
 | 	if want := 1; *gotA != want { | 
 | 		t.Errorf("Got remain default a=%d, want %d", *gotA, want) | 
 | 	} | 
 | 	if want := 5; *gotB != want { | 
 | 		t.Errorf("Got customized b=%d, want %d", *gotB, want) | 
 | 	} | 
 | 	if want := 4; *gotC != want { | 
 | 		t.Errorf("Got overriden c=%d, want %d", *gotC, want) | 
 | 	} | 
 | } | 
 |  | 
 | func ExampleProperties_MustFlag() { | 
 | 	x := flag.Int("x", 0, "demo customize") | 
 | 	y := flag.Int("y", 0, "demo override") | 
 |  | 
 | 	// Demo alternative for flag.Parse(): | 
 | 	flag.CommandLine.Parse([]string{"-y", "10"}) | 
 | 	fmt.Printf("flagged as x=%d, y=%d\n", *x, *y) | 
 |  | 
 | 	p := NewProperties() | 
 | 	p.MustSet("x", "7") | 
 | 	p.MustSet("y", "42") // note discard | 
 | 	p.MustFlag(flag.CommandLine) | 
 | 	fmt.Printf("configured to x=%d, y=%d\n", *x, *y) | 
 |  | 
 | 	// Output: | 
 | 	// flagged as x=0, y=10 | 
 | 	// configured to x=7, y=10 | 
 | } |