| 
					
				 | 
			
			
				@@ -1,6 +1,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package door 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"strings" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"testing" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -10,7 +11,7 @@ func pctUpdate(pct *int64) func() int64 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func TestBarsUnicode(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestBarsMatch(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// verify that the BARS_CP437 matches BARS_UNICODE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	cp437 := BARS_CP437.solid 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,7 +40,7 @@ func TestBarsUnicode(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func TestBars(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestBarsUnicode(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// This is normally done by door init, but we're skipping that right now 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Unicode = true 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -63,15 +64,109 @@ func TestBars(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	BarSolid := map[int]string{0: Bar25 + "          ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		5:   Bar25 + "          ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		10:  Bar25 + "\u2588         ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		20:  Bar25 + "\u2588\u2588        ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		25:  Bar25 + "\u2588\u2588        ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		30:  Bar50 + "\u2588\u2588\u2588       ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		50:  Bar50 + "\u2588\u2588\u2588\u2588\u2588     ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		75:  Bar75 + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		90:  Bar95 + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		95:  Bar95 + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		100: Bar100 + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		10:  Bar25 + BARS.solid + "         ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		20:  Bar25 + strings.Repeat(BARS.solid, 2) + "        ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		25:  Bar25 + strings.Repeat(BARS.solid, 2) + "        ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		30:  Bar50 + strings.Repeat(BARS.solid, 3) + "       ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		50:  Bar50 + strings.Repeat(BARS.solid, 5) + "     ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		75:  Bar75 + strings.Repeat(BARS.solid, 7) + "   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		90:  Bar95 + strings.Repeat(BARS.solid, 9) + " ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		95:  Bar95 + strings.Repeat(BARS.solid, 9) + " ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		100: Bar100 + strings.Repeat(BARS.solid, 10) + "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for pct, text := range BarSolid { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		bar.Percent = int64(pct * 100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		got := bar.Output() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if got != text { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			t.Errorf("BarSolidRange: Expected %#v (%d%%), got %#v", text, pct, got) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BarColor = ColorText("BLA ON WHI") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bar = BarLine{Line: Line{DefaultColor: BarColor}, Width: 10, Style: HALF_STEP, PercentStyle: PERCENT_SPACE} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BarHalf := map[int]string{0: BarColor + "     0%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		5:   BarColor + BARS.half[1] + "    5%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		6:   BarColor + BARS.half[1] + "    6%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		10:  BarColor + BARS.half[0] + "   10%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		20:  BarColor + BARS.solid + BARS.half[0] + "  20%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		25:  BarColor + BARS.solid + BARS.half[0] + BARS.half[1] + " 25%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		26:  BarColor + BARS.solid + BARS.half[0] + BARS.half[1] + " 26%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		50:  BarColor + strings.Repeat(BARS.half[0], 3) + " 50%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		75:  BarColor + strings.Repeat(BARS.half[0], 3) + " 75%   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		90:  BarColor + strings.Repeat(BARS.half[0], 3) + " 90% \u2588 ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		100: BarColor + "\u2588\u2588\u2588 100 \u2588\u2588", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for pct, text := range BarHalf { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		bar.Percent = int64(pct * 100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		got := bar.Output() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if got != text { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			t.Errorf("BarHalf: Expected %#v (%d%%), got %#v", text, pct, got) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BarColor = ColorText("RED") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bar = BarLine{Line: Line{DefaultColor: BarColor}, Width: 10, Style: GRADIENT} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BarGrad := map[int]string{0: BarColor + "          ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		3:   BarColor + "\u2591         ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		5:   BarColor + "\u2592         ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		8:   BarColor + "\u2593         ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		10:  BarColor + "\u2588         ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		20:  BarColor + "\u2588\u2588        ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		25:  BarColor + "\u2588\u2588\u2592       ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		50:  BarColor + "\u2588\u2588\u2588\u2588\u2588     ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		75:  BarColor + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2592  ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		100: BarColor + "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var percent int64 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bar.UpdateP = pctUpdate(&percent) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for pct, text := range BarGrad { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		percent = int64(pct * 100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		got := bar.Output() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if got != text { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			t.Errorf("BarGradient: Expected %#v (%d%%), got %#v", text, pct, got) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestBarsCP437(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// This is normally done by door init, but we're skipping that right now 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Unicode = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CP437 = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BARS = BARS_CP437 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BarColor := ColorText("BLUE") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Bar25 := ColorText("RED") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Bar50 := ColorText("BROWN") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Bar75 := ColorText("BOLD YEL") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Bar95 := ColorText("GREEN") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Bar100 := ColorText("BRI GREEN") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bar := BarLine{Line: Line{DefaultColor: BarColor}, Width: 10, Style: SOLID} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bar.ColorRange = []BarRange{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{2500, Bar25}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{5000, Bar50}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{7500, Bar75}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{9500, Bar95}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{10100, Bar100}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BarSolid := map[int]string{0: Bar25 + "          ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		5:   Bar25 + "          ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		10:  Bar25 + BARS.solid + "         ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		20:  Bar25 + strings.Repeat(BARS.solid, 2) + "        ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		25:  Bar25 + strings.Repeat(BARS.solid, 2) + "        ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		30:  Bar50 + strings.Repeat(BARS.solid, 3) + "       ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		50:  Bar50 + strings.Repeat(BARS.solid, 5) + "     ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		75:  Bar75 + strings.Repeat(BARS.solid, 7) + "   ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		90:  Bar95 + strings.Repeat(BARS.solid, 9) + " ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		95:  Bar95 + strings.Repeat(BARS.solid, 9) + " ", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		100: Bar100 + strings.Repeat(BARS.solid, 10) + "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for pct, text := range BarSolid { 
			 |