| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>testing - The Go Programming Language</title>
- <link type="text/css" rel="stylesheet" href="/doc/style.css">
- <script type="text/javascript" src="/doc/godocs.js"></script>
- <link rel="search" type="application/opensearchdescription+xml" title="godoc" href="/opensearch.xml" />
- <script type="text/javascript">
- var _gaq = _gaq || [];
- _gaq.push(["_setAccount", "UA-11222381-2"]);
- _gaq.push(["_trackPageview"]);
- </script>
- </head>
- <body>
- <div id="topbar"><div class="container wide">
- <form method="GET" action="/search">
- <div id="menu">
- <a href="/doc/">Documents</a>
- <a href="/ref/">References</a>
- <a href="/pkg/">Packages</a>
- <a href="/project/">The Project</a>
- <a href="/help/">Help</a>
- <input type="text" id="search" name="q" class="inactive" value="Search">
- </div>
- <div id="heading"><a href="/">The Go Programming Language</a></div>
- </form>
- </div></div>
- <div id="page" class="wide">
- <div id="plusone"><g:plusone size="small" annotation="none"></g:plusone></div>
- <h1>Package testing</h1>
- <div id="nav"></div>
- <!--
- Copyright 2009 The Go Authors. All rights reserved.
- Use of this source code is governed by a BSD-style
- license that can be found in the LICENSE file.
- -->
-
- <div id="short-nav">
- <dl>
- <dd><code>import "testing"</code></dd>
- </dl>
- <dl>
- <dd><a href="#overview" class="overviewLink">Overview</a></dd>
- <dd><a href="#index">Index</a></dd>
-
-
- <dd><a href="#subdirectories">Subdirectories</a></dd>
-
- </dl>
- </div>
- <!-- The package's Name is printed as title by the top-level template -->
- <div id="overview" class="toggleVisible">
- <div class="collapsed">
- <h2 class="toggleButton" title="Click to show Overview section">Overview ▹</h2>
- </div>
- <div class="expanded">
- <h2 class="toggleButton" title="Click to hide Overview section">Overview ▾</h2>
- <p>
- Package testing provides support for automated testing of Go packages.
- It is intended to be used in concert with the “go test” command, which automates
- execution of any function of the form
- </p>
- <pre>func TestXxx(*testing.T)
- </pre>
- <p>
- where Xxx can be any alphanumeric string (but the first letter must not be in
- [a-z]) and serves to identify the test routine.
- These TestXxx routines should be declared within the package they are testing.
- </p>
- <p>
- Functions of the form
- </p>
- <pre>func BenchmarkXxx(*testing.B)
- </pre>
- <p>
- are considered benchmarks, and are executed by the "go test" command when
- the -test.bench flag is provided.
- </p>
- <p>
- A sample benchmark function looks like this:
- </p>
- <pre>func BenchmarkHello(b *testing.B) {
- for i := 0; i < b.N; i++ {
- fmt.Sprintf("hello")
- }
- }
- </pre>
- <p>
- The benchmark package will vary b.N until the benchmark function lasts
- long enough to be timed reliably. The output
- </p>
- <pre>testing.BenchmarkHello 10000000 282 ns/op
- </pre>
- <p>
- means that the loop ran 10000000 times at a speed of 282 ns per loop.
- </p>
- <p>
- If a benchmark needs some expensive setup before running, the timer
- may be stopped:
- </p>
- <pre>func BenchmarkBigLen(b *testing.B) {
- b.StopTimer()
- big := NewBig()
- b.StartTimer()
- for i := 0; i < b.N; i++ {
- big.Len()
- }
- }
- </pre>
- <p>
- The package also runs and verifies example code. Example functions may
- include a concluding comment that begins with "Output:" and is compared with
- the standard output of the function when the tests are run, as in these
- examples of an example:
- </p>
- <pre>func ExampleHello() {
- fmt.Println("hello")
- // Output: hello
- }
- func ExampleSalutations() {
- fmt.Println("hello, and")
- fmt.Println("goodbye")
- // Output:
- // hello, and
- // goodbye
- }
- </pre>
- <p>
- Example functions without output comments are compiled but not executed.
- </p>
- <p>
- The naming convention to declare examples for a function F, a type T and
- method M on type T are:
- </p>
- <pre>func ExampleF() { ... }
- func ExampleT() { ... }
- func ExampleT_M() { ... }
- </pre>
- <p>
- Multiple example functions for a type/function/method may be provided by
- appending a distinct suffix to the name. The suffix must start with a
- lower-case letter.
- </p>
- <pre>func ExampleF_suffix() { ... }
- func ExampleT_suffix() { ... }
- func ExampleT_M_suffix() { ... }
- </pre>
- <p>
- The entire test file is presented as the example when it contains a single
- example function, at least one other function, type, variable, or constant
- declaration, and no test or benchmark functions.
- </p>
- </div>
- </div>
-
-
- <h2 id="index">Index</h2>
- <!-- Table of contents for API; must be named manual-nav to turn off auto nav. -->
- <div id="manual-nav">
- <dl>
-
-
-
-
- <dd><a href="#Main">func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)</a></dd>
-
-
- <dd><a href="#RunBenchmarks">func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark)</a></dd>
-
-
- <dd><a href="#RunExamples">func RunExamples(matchString func(pat, str string) (bool, error), examples []InternalExample) (ok bool)</a></dd>
-
-
- <dd><a href="#RunTests">func RunTests(matchString func(pat, str string) (bool, error), tests []InternalTest) (ok bool)</a></dd>
-
-
- <dd><a href="#Short">func Short() bool</a></dd>
-
-
-
- <dd><a href="#B">type B</a></dd>
-
-
-
- <dd> <a href="#B.Error">func (c *B) Error(args ...interface{})</a></dd>
-
-
- <dd> <a href="#B.Errorf">func (c *B) Errorf(format string, args ...interface{})</a></dd>
-
-
- <dd> <a href="#B.Fail">func (c *B) Fail()</a></dd>
-
-
- <dd> <a href="#B.FailNow">func (c *B) FailNow()</a></dd>
-
-
- <dd> <a href="#B.Failed">func (c *B) Failed() bool</a></dd>
-
-
- <dd> <a href="#B.Fatal">func (c *B) Fatal(args ...interface{})</a></dd>
-
-
- <dd> <a href="#B.Fatalf">func (c *B) Fatalf(format string, args ...interface{})</a></dd>
-
-
- <dd> <a href="#B.Log">func (c *B) Log(args ...interface{})</a></dd>
-
-
- <dd> <a href="#B.Logf">func (c *B) Logf(format string, args ...interface{})</a></dd>
-
-
- <dd> <a href="#B.ResetTimer">func (b *B) ResetTimer()</a></dd>
-
-
- <dd> <a href="#B.SetBytes">func (b *B) SetBytes(n int64)</a></dd>
-
-
- <dd> <a href="#B.StartTimer">func (b *B) StartTimer()</a></dd>
-
-
- <dd> <a href="#B.StopTimer">func (b *B) StopTimer()</a></dd>
-
-
-
- <dd><a href="#BenchmarkResult">type BenchmarkResult</a></dd>
-
-
- <dd> <a href="#Benchmark">func Benchmark(f func(b *B)) BenchmarkResult</a></dd>
-
-
-
- <dd> <a href="#BenchmarkResult.NsPerOp">func (r BenchmarkResult) NsPerOp() int64</a></dd>
-
-
- <dd> <a href="#BenchmarkResult.String">func (r BenchmarkResult) String() string</a></dd>
-
-
-
- <dd><a href="#InternalBenchmark">type InternalBenchmark</a></dd>
-
-
-
-
- <dd><a href="#InternalExample">type InternalExample</a></dd>
-
-
-
-
- <dd><a href="#InternalTest">type InternalTest</a></dd>
-
-
-
-
- <dd><a href="#T">type T</a></dd>
-
-
-
- <dd> <a href="#T.Error">func (c *T) Error(args ...interface{})</a></dd>
-
-
- <dd> <a href="#T.Errorf">func (c *T) Errorf(format string, args ...interface{})</a></dd>
-
-
- <dd> <a href="#T.Fail">func (c *T) Fail()</a></dd>
-
-
- <dd> <a href="#T.FailNow">func (c *T) FailNow()</a></dd>
-
-
- <dd> <a href="#T.Failed">func (c *T) Failed() bool</a></dd>
-
-
- <dd> <a href="#T.Fatal">func (c *T) Fatal(args ...interface{})</a></dd>
-
-
- <dd> <a href="#T.Fatalf">func (c *T) Fatalf(format string, args ...interface{})</a></dd>
-
-
- <dd> <a href="#T.Log">func (c *T) Log(args ...interface{})</a></dd>
-
-
- <dd> <a href="#T.Logf">func (c *T) Logf(format string, args ...interface{})</a></dd>
-
-
- <dd> <a href="#T.Parallel">func (t *T) Parallel()</a></dd>
-
-
-
- </dl>
-
-
- <h4>Package files</h4>
- <p>
- <span style="font-size:90%">
-
- <a href="/src/pkg/testing/benchmark.go">benchmark.go</a>
-
- <a href="/src/pkg/testing/example.go">example.go</a>
-
- <a href="/src/pkg/testing/testing.go">testing.go</a>
-
- </span>
- </p>
-
-
-
-
-
-
-
- <h2 id="Main">func <a href="/src/pkg/testing/testing.go?s=9750:9890#L268">Main</a></h2>
- <pre>func Main(matchString func(pat, str string) (bool, error), tests []InternalTest, benchmarks []InternalBenchmark, examples []InternalExample)</pre>
- <p>
- An internal function but exported because it is cross-package; part of the implementation
- of the "go test" command.
- </p>
-
-
-
-
- <h2 id="RunBenchmarks">func <a href="/src/pkg/testing/benchmark.go?s=5365:5464#L207">RunBenchmarks</a></h2>
- <pre>func RunBenchmarks(matchString func(pat, str string) (bool, error), benchmarks []InternalBenchmark)</pre>
- <p>
- An internal function but exported because it is cross-package; part of the implementation
- of the "go test" command.
- </p>
-
-
-
-
- <h2 id="RunExamples">func <a href="/src/pkg/testing/example.go?s=314:417#L12">RunExamples</a></h2>
- <pre>func RunExamples(matchString func(pat, str string) (bool, error), examples []InternalExample) (ok bool)</pre>
-
-
-
-
-
- <h2 id="RunTests">func <a href="/src/pkg/testing/testing.go?s=10486:10580#L297">RunTests</a></h2>
- <pre>func RunTests(matchString func(pat, str string) (bool, error), tests []InternalTest) (ok bool)</pre>
-
-
-
-
-
- <h2 id="Short">func <a href="/src/pkg/testing/testing.go?s=4859:4876#L117">Short</a></h2>
- <pre>func Short() bool</pre>
- <p>
- Short reports whether the -test.short flag is set.
- </p>
-
-
-
-
-
- <h2 id="B">type <a href="/src/pkg/testing/benchmark.go?s=743:872#L17">B</a></h2>
- <pre>type B struct {
- N int
- <span class="comment">// contains filtered or unexported fields</span>
- }</pre>
- <p>
- B is a type passed to Benchmark functions to manage benchmark
- timing and to specify the number of iterations to run.
- </p>
-
-
-
-
-
-
- <h3 id="B.Error">func (*B) <a href="/src/pkg/testing/testing.go?s=8110:8153#L209">Error</a></h3>
- <pre>func (c *B) Error(args ...interface{})</pre>
- <p>
- Error is equivalent to Log() followed by Fail().
- </p>
-
-
-
-
- <h3 id="B.Errorf">func (*B) <a href="/src/pkg/testing/testing.go?s=8253:8312#L215">Errorf</a></h3>
- <pre>func (c *B) Errorf(format string, args ...interface{})</pre>
- <p>
- Errorf is equivalent to Logf() followed by Fail().
- </p>
-
-
-
-
- <h3 id="B.Fail">func (*B) <a href="/src/pkg/testing/testing.go?s=6270:6293#L163">Fail</a></h3>
- <pre>func (c *B) Fail()</pre>
- <p>
- Fail marks the function as having failed but continues execution.
- </p>
-
-
-
-
- <h3 id="B.FailNow">func (*B) <a href="/src/pkg/testing/testing.go?s=6548:6574#L170">FailNow</a></h3>
- <pre>func (c *B) FailNow()</pre>
- <p>
- FailNow marks the function as having failed and stops its execution.
- Execution will continue at the next test or benchmark.
- </p>
-
-
-
-
- <h3 id="B.Failed">func (*B) <a href="/src/pkg/testing/testing.go?s=6366:6396#L166">Failed</a></h3>
- <pre>func (c *B) Failed() bool</pre>
- <p>
- Failed returns whether the function has failed.
- </p>
-
-
-
-
- <h3 id="B.Fatal">func (*B) <a href="/src/pkg/testing/testing.go?s=8420:8463#L221">Fatal</a></h3>
- <pre>func (c *B) Fatal(args ...interface{})</pre>
- <p>
- Fatal is equivalent to Log() followed by FailNow().
- </p>
-
-
-
-
- <h3 id="B.Fatalf">func (*B) <a href="/src/pkg/testing/testing.go?s=8569:8628#L227">Fatalf</a></h3>
- <pre>func (c *B) Fatalf(format string, args ...interface{})</pre>
- <p>
- Fatalf is equivalent to Logf() followed by FailNow().
- </p>
-
-
-
-
- <h3 id="B.Log">func (*B) <a href="/src/pkg/testing/testing.go?s=7763:7804#L202">Log</a></h3>
- <pre>func (c *B) Log(args ...interface{})</pre>
- <p>
- Log formats its arguments using default formatting, analogous to Println(),
- and records the text in the error log.
- </p>
-
-
-
-
- <h3 id="B.Logf">func (*B) <a href="/src/pkg/testing/testing.go?s=7959:8016#L206">Logf</a></h3>
- <pre>func (c *B) Logf(format string, args ...interface{})</pre>
- <p>
- Logf formats its arguments according to the format, analogous to Printf(),
- and records the text in the error log.
- </p>
-
-
-
-
- <h3 id="B.ResetTimer">func (*B) <a href="/src/pkg/testing/benchmark.go?s=1503:1527#L48">ResetTimer</a></h3>
- <pre>func (b *B) ResetTimer()</pre>
- <p>
- ResetTimer sets the elapsed benchmark time to zero.
- It does not affect whether the timer is running.
- </p>
-
-
-
-
- <h3 id="B.SetBytes">func (*B) <a href="/src/pkg/testing/benchmark.go?s=1728:1757#L57">SetBytes</a></h3>
- <pre>func (b *B) SetBytes(n int64)</pre>
- <p>
- SetBytes records the number of bytes processed in a single operation.
- If this is called, the benchmark will report ns/op and MB/s.
- </p>
-
-
-
-
- <h3 id="B.StartTimer">func (*B) <a href="/src/pkg/testing/benchmark.go?s=1047:1071#L29">StartTimer</a></h3>
- <pre>func (b *B) StartTimer()</pre>
- <p>
- StartTimer starts timing a test. This function is called automatically
- before a benchmark starts, but it can also used to resume timing after
- a call to StopTimer.
- </p>
-
-
-
-
- <h3 id="B.StopTimer">func (*B) <a href="/src/pkg/testing/benchmark.go?s=1288:1311#L39">StopTimer</a></h3>
- <pre>func (b *B) StopTimer()</pre>
- <p>
- StopTimer stops timing a test. This can be used to pause the timer
- while performing complex initialization that you don't
- want to measure.
- </p>
-
-
-
-
-
-
- <h2 id="BenchmarkResult">type <a href="/src/pkg/testing/benchmark.go?s=4206:4391#L165">BenchmarkResult</a></h2>
- <pre>type BenchmarkResult struct {
- N int <span class="comment">// The number of iterations.</span>
- T time.Duration <span class="comment">// The total time taken.</span>
- Bytes int64 <span class="comment">// Bytes processed in one iteration.</span>
- }</pre>
- <p>
- The results of a benchmark run.
- </p>
-
-
-
-
-
- <h3 id="Benchmark">func <a href="/src/pkg/testing/benchmark.go?s=7545:7589#L275">Benchmark</a></h3>
- <pre>func Benchmark(f func(b *B)) BenchmarkResult</pre>
- <p>
- Benchmark benchmarks a single function. Useful for creating
- custom benchmarks that do not use the "go test" command.
- </p>
-
-
-
-
- <h3 id="BenchmarkResult.NsPerOp">func (BenchmarkResult) <a href="/src/pkg/testing/benchmark.go?s=4393:4433#L171">NsPerOp</a></h3>
- <pre>func (r BenchmarkResult) NsPerOp() int64</pre>
-
-
-
-
-
- <h3 id="BenchmarkResult.String">func (BenchmarkResult) <a href="/src/pkg/testing/benchmark.go?s=4677:4717#L185">String</a></h3>
- <pre>func (r BenchmarkResult) String() string</pre>
-
-
-
-
-
-
-
- <h2 id="InternalBenchmark">type <a href="/src/pkg/testing/benchmark.go?s=555:618#L10">InternalBenchmark</a></h2>
- <pre>type InternalBenchmark struct {
- Name string
- F func(b *B)
- }</pre>
- <p>
- An internal type but exported because it is cross-package; part of the implementation
- of the "go test" command.
- </p>
-
-
-
-
-
-
-
-
- <h2 id="InternalExample">type <a href="/src/pkg/testing/example.go?s=236:312#L6">InternalExample</a></h2>
- <pre>type InternalExample struct {
- Name string
- F func()
- Output string
- }</pre>
-
-
-
-
-
-
-
-
-
- <h2 id="InternalTest">type <a href="/src/pkg/testing/testing.go?s=9065:9121#L241">InternalTest</a></h2>
- <pre>type InternalTest struct {
- Name string
- F func(*T)
- }</pre>
- <p>
- An internal type but exported because it is cross-package; part of the implementation
- of the "go test" command.
- </p>
-
-
-
-
-
-
-
-
- <h2 id="T">type <a href="/src/pkg/testing/testing.go?s=6070:6199#L156">T</a></h2>
- <pre>type T struct {
- <span class="comment">// contains filtered or unexported fields</span>
- }</pre>
- <p>
- T is a type passed to Test functions to manage test state and support formatted test logs.
- Logs are accumulated during execution and dumped to standard error when done.
- </p>
-
-
-
-
-
-
- <h3 id="T.Error">func (*T) <a href="/src/pkg/testing/testing.go?s=8110:8153#L209">Error</a></h3>
- <pre>func (c *T) Error(args ...interface{})</pre>
- <p>
- Error is equivalent to Log() followed by Fail().
- </p>
-
-
-
-
- <h3 id="T.Errorf">func (*T) <a href="/src/pkg/testing/testing.go?s=8253:8312#L215">Errorf</a></h3>
- <pre>func (c *T) Errorf(format string, args ...interface{})</pre>
- <p>
- Errorf is equivalent to Logf() followed by Fail().
- </p>
-
-
-
-
- <h3 id="T.Fail">func (*T) <a href="/src/pkg/testing/testing.go?s=6270:6293#L163">Fail</a></h3>
- <pre>func (c *T) Fail()</pre>
- <p>
- Fail marks the function as having failed but continues execution.
- </p>
-
-
-
-
- <h3 id="T.FailNow">func (*T) <a href="/src/pkg/testing/testing.go?s=6548:6574#L170">FailNow</a></h3>
- <pre>func (c *T) FailNow()</pre>
- <p>
- FailNow marks the function as having failed and stops its execution.
- Execution will continue at the next test or benchmark.
- </p>
-
-
-
-
- <h3 id="T.Failed">func (*T) <a href="/src/pkg/testing/testing.go?s=6366:6396#L166">Failed</a></h3>
- <pre>func (c *T) Failed() bool</pre>
- <p>
- Failed returns whether the function has failed.
- </p>
-
-
-
-
- <h3 id="T.Fatal">func (*T) <a href="/src/pkg/testing/testing.go?s=8420:8463#L221">Fatal</a></h3>
- <pre>func (c *T) Fatal(args ...interface{})</pre>
- <p>
- Fatal is equivalent to Log() followed by FailNow().
- </p>
-
-
-
-
- <h3 id="T.Fatalf">func (*T) <a href="/src/pkg/testing/testing.go?s=8569:8628#L227">Fatalf</a></h3>
- <pre>func (c *T) Fatalf(format string, args ...interface{})</pre>
- <p>
- Fatalf is equivalent to Logf() followed by FailNow().
- </p>
-
-
-
-
- <h3 id="T.Log">func (*T) <a href="/src/pkg/testing/testing.go?s=7763:7804#L202">Log</a></h3>
- <pre>func (c *T) Log(args ...interface{})</pre>
- <p>
- Log formats its arguments using default formatting, analogous to Println(),
- and records the text in the error log.
- </p>
-
-
-
-
- <h3 id="T.Logf">func (*T) <a href="/src/pkg/testing/testing.go?s=7959:8016#L206">Logf</a></h3>
- <pre>func (c *T) Logf(format string, args ...interface{})</pre>
- <p>
- Logf formats its arguments according to the format, analogous to Printf(),
- and records the text in the error log.
- </p>
-
-
-
-
- <h3 id="T.Parallel">func (*T) <a href="/src/pkg/testing/testing.go?s=8809:8831#L234">Parallel</a></h3>
- <pre>func (t *T) Parallel()</pre>
- <p>
- Parallel signals that this test is to be run in parallel with (and only with)
- other parallel tests in this CPU group.
- </p>
-
-
-
-
- </div>
-
-
-
-
- <h2 id="subdirectories">Subdirectories</h2>
-
- <table class="dir">
- <tr>
- <th>Name</th>
- <th> </th>
- <th style="text-align: left; width: auto">Synopsis</th>
- </tr>
-
- <tr>
- <td><a href="..">..</a></td>
- </tr>
-
-
-
- <tr>
- <td class="name"><a href="iotest">iotest</a></td>
- <td> </td>
- <td style="width: auto">Package iotest implements Readers and Writers useful mainly for testing.</td>
- </tr>
-
-
-
- <tr>
- <td class="name"><a href="quick">quick</a></td>
- <td> </td>
- <td style="width: auto">Package quick implements utility functions to help with black box testing.</td>
- </tr>
-
-
- </table>
-
- </div>
- <div id="footer">
- Build version go1.0.2.<br>
- Except as <a href="http://code.google.com/policies.html#restrictions">noted</a>,
- the content of this page is licensed under the
- Creative Commons Attribution 3.0 License,
- and code is licensed under a <a href="/LICENSE">BSD license</a>.<br>
- <a href="/doc/tos.html">Terms of Service</a> |
- <a href="http://www.google.com/intl/en/privacy/privacy-policy.html">Privacy Policy</a>
- </div>
- <script type="text/javascript">
- (function() {
- var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;
- ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
- var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ga, s);
- })();
- </script>
- </body>
- <script type="text/javascript">
- (function() {
- var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
- po.src = 'https://apis.google.com/js/plusone.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
- })();
- </script>
- </html>
|