Improving the AJAX Control Toolkit with the Lightweight Test Automation Framework (LTAF)

The AJAX Control Toolkit is an incredibly popular set of controls that enable you to easily add JavaScript functionality to an ASP.NET application. The AJAX Control Toolkit has consistently been one of the top three most popular downloads from CodePlex since the birth of CodePlex (see http://www.CodePlex.com).

Lately, we’ve been thinking hard about methods of improving the quality of the AJAX Control Toolkit controls. We want to improve the quality of the AJAX Control Toolkit controls so that they match the very high standards of quality of the official ASP.NET framework controls such as the GridView and TextBox controls.

In discussions of quality, the issue of testing immediately comes up. Right now, the AJAX Control Toolkit solution includes a test project named ToolkitTests. (You can see this project if you download the Source version of the AJAX Control Toolkit from CodePlex). This project contains a set of automated functional tests for each control in the AJAX Control Toolkit (see Figure 1). For example, there is a file named Calendar.aspx which contains a set of tests for the Calendar control.

Figure 1 – Tests in the ToolkitTests project

clip_image002

You can run all of these tests by requesting the Default.aspx page from the ToolkitTests project. The Default.aspx page contains a test runner. If you click the Select All link, and then click the Run Tests button, then all of the tests are run (see Figure 2).

Figure 2 – Running tests

clip_image004

Having a set of tests like this that can be run automatically is invaluable. It means that we can modify existing AJAX Control Toolkit controls and know whether we have broken existing functionality. We run these tests in a standard set of browsers to ensure that the AJAX Control Toolkit controls are cross-browser compatible.

In order to improve the quality of the AJAX Control Toolkit, we plan to significantly improve the quality of the tests that accompany the Toolkit. However, the AJAX Control Toolkit currently uses a proprietary functional test framework. The test framework was invented for the AJAX Control Toolkit and it is used nowhere else.

For this reason, we decided to investigate using alternative functional test frameworks. We had several specific criteria for selecting a functional test framework:

1) The functional test framework needs to be an open-source project.

2) The functional test framework needs to work with all major browsers including Internet Explorer, FireFox, Safari, Opera, and Chrome.

3) The functional test framework needs to support simulating complex browser interactions.

4) The functional test framework needs to be easy for the Quality Assurance team at Microsoft to use.

In order to meet all of these requirements, we decided to use the Lightweight Test Automation Framework as the testing framework for the AJAX Control Toolkit moving forward.

The Lightweight Test Automation Framework

The Lightweight Test Automation Framework (LTAF) is an open source functional test framework available from CodePlex at:

http://aspnet.codeplex.com/Wiki/View.aspx?title=ASP.NET%20QA

LTAF is a lightweight version of the very same testing framework that the ASP.NET Quality Assurance team uses to test the standard ASP.NET controls. The framework is compatible with all major web browsers and the framework enables you to simulate complex JavaScript behaviors.

An important consideration for the ASP.NET AJAX team is that the Microsoft QA team is already very familiar with this framework. Therefore, any member of the Microsoft QA team can easily test the AJAX Control Toolkit using this framework.

Our plan is to include all of the LTAF tests used by the QA team with the download of the AJAX Control Toolkit. That way, if you modify the Toolkit, then you can run the LTAF tests to check whether or not your modifications have broken existing controls.

In the following sections, I provide you with a brief introduction to using LTAF.

Downloading and Installing LTAF

After downloading the Microsoft.Web.Testing.Lightweight.zip file from the CodePlex website, you need to remember to unblock the downloaded ZIP. Right-click the file and click the Unblock button (see Figure 3).

Figure 3 – Unblocking the download file

clip_image006

Next, unzip the file into a new folder and double-click the Microsoft.Web.Testing.Lightweight.sln file to open up the LTAF solution. Build the project by selecting the menu option Build, Build Solution.

The LTAF solution contains the following projects:

· SampleWebSite – Contains sample LTAF tests

· FunctionalTestsWebSite – Contains BVT tests written using LTAF

· Microsoft.Web.Testing.Lightweight – Contains the source code for LTAF

· Microsoft.Web.Testing.Lightweight.UnitTests – Contains unit tests for LTAF

The fastest way to try out LTAF is to run the tests in the SampleWebSite project.
Right-click the Default.aspx page contained in the Test folder and select the menu option View In Browser. The page in Figure 4 appears.

Figure 4 – The LTAF Test Runner

clip_image008

Click the link labeled All Test Cases to select all of the tests and click the Run Tests button to run the tests. All the tests that pass are highlighted with green and a checkmark (see Figure 5).

Figure 5 – LTAF test results

clip_image010

So you might be wondering where the functional tests executed by the test runner are defined. You can find the tests in the App_CodeTest folder. For example, the Test folder includes a class named UserManagementTests.cs that contains a set of tests for the Login.aspx page. An abridged version of this class is contained in Listing 1.

Listing 1 – UserManagementTests.cs [C#]

using System;
using Microsoft.Web.Testing.Light;

[WebTestClass]
public class UserManagementTests
{
    [WebTestMethod]
    public void SignInAndSignOut()
    {
        // Navigate to the login page
        HtmlPage page = new HtmlPage("Login.aspx");

        // Fill Login control user/password and click login button
        page.Elements.Find("UserName").SetText("ValidUser");
        page.Elements.Find("Password").SetText("foo");
        page.Elements.Find("LoginButton").Click(WaitFor.Postback);

        // Verify content of the Home page
        Assert.AreEqual("Welcome back ValidUser!", page.Elements.Find("LoginName1").GetInnerText());

        // Click the logout tab
        page.Elements.Find("tab-signout").Click(WaitFor.Postback);

        // Verify login tab now exists.
        Assert.IsTrue(page.Elements.Exists("tab-login"));
    }

}

The class in Listing 1 is decorated with the WebTestClass attribute and the functional test method is decorated with the WebTestMethod attribute.

The SignInAndSignOut() method performs the following tests:

1) It verifies that entering the user name ValidUser and password foo into the Login form on the Login.aspx page results in a page that displays the message “Welcome back ValidUser!”.

2) It verifies that clicking the Logout tab causes the Login tab to appear.

Notice how the HtmlPage class and HtmlElement class are used to interact with a web page. For example, the HtmlPage.Elements.Find() method is used to retrieve a particular DOM element. The HtmlElement.Click() method is used to simulate a button click.

Using LTAF in a New or Existing ASP.NET Website

If you want to use LTAF with a new or existing ASP.NET Website then you need to do two things:

1) Add a reference to the Microsoft.Web.Testing.Lightweight.dll assembly

2) Add a folder named Test that contains the test runner (the Default.aspx and DriverPage.aspx files)

For example, imagine that you have created an ASP.NET website that contains the ASP.NET page in Listing 2. This page contains a single button. Whenever you click the button, the number displayed by the Label control is incremented by 1 (see Figure 6).

Listing 2 – Counter.aspx

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        var newValue = int.Parse(lblCounter.Text) + 1;
        lblCounter.Text = newValue.ToString();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    <asp:Label
        id="lblCounter"
        Text="0"
        Runat="server" />

    <asp:Button
        id="btnAdd"
        Text="Add 1"
        Runat="server" OnClick="btnAdd_Click" />

    </div>
    </form>
</body>
</html>

Figure 6 – The Counters.aspx page

clip_image012

If you want to test this page using LTAF then you first need to add a reference to the Microsoft.Web.Testing.Lightweight.dll assembly. Select the menu option Website, Add Reference. Click the Browse tab and browse to the folder where you downloaded LTAF (see Figure 7).

Figure 7 – Adding a reference to LTAF

clip_image014

Next, we need to add the Test folder (that contains the Default.aspx and DriverPage.aspx files) into our new website. Using Windows Explorer, navigate to the directory where you downloaded LTAF. You can drag the Test folder from Window Explorer into the Solution Explorer window in your website project (or copy and paste the folder). After you add this folder, your Solution Explorer window should look like Figure 8.

Figure 8 – Solution Explorer with Test folder

clip_image016

Now, we are ready to write some tests. Add a new class to your website named CounterTests.cs (Visual Studio will prompt you to add the class to your App_Code folder). Enter the code in Listing 3.

Listing 3 – CounterTests.cs

using Microsoft.Web.Testing.Light;

[WebTestClass]
public class CounterTests
{
    [WebTestMethod]
    public void ButtonIncrementsByOne()
    {
        // Get the Counters.aspx page
        HtmlPage page = new HtmlPage("/Counter.aspx");

        // Click the btnAdd Button
        page.Elements.Find("btnAdd").Click(WaitFor.Postback);

        // Get the value of the Counters Label
        var labelValue = page.Elements.Find("lblCounter").GetInnerText();

        // Verify that the Label has the value 1
        Assert.AreEqual("1", labelValue);
    }
}

The test class in Listing 3 contains one test method named ButtonIncrementsByOne(). This test verifies that clicking the button increments the value displayed in the Label by one.

You can run the test by opening the Test/Default.aspx page. After you open this page, you can select the ButtonIncrementsByOne test, and click the Run Tests button to execute the test. When the test runs successfully, you get the page in Figure 9.

Figure 9 – Results of running test

clip_image018

Conclusion

The Lightweight Testing Automation Framework (LTAF) is a very powerful framework for building functional tests. It is (a lightweight version) of the testing framework used by the ASP.NET Quality Assurance team and it is the testing framework used to build tests for the ASP.NET framework.

You can use this test framework to build functional tests for your ASP.NET applications. Simply download LTAF from CodePlex and start writing your functional tests in either C# or VB.NET.

We plan to use LTAF for the AJAX Control Toolkit because (1) LTAF works with all modern browsers including Internet Explorer, Firefox, Safari, Opera, and Chrome (2) it is open-source and (3) because LTAF is based on the same testing framework used internally by the ASP.NET QA team, we expect the QA team to continue to invest in improving LTAF over time.

Discussion

  1. Jack says:

    Ajax Control Toolkit do give us a powerful toolkit, and it do save us lots of effort

  2. Mukhtar says:

    Hi Stephen,

    Do you know when the final version of AJAX 4 will be released? Will it coincide with the release of Visual Studio 2010? That along with .Net 4 as well?

    Hope you been enjoying your new position with Microsoft 🙂

  3. Ajax Control Toolkit do give us a powerful toolkit, and it do save us lots of effort
    +p+p

  4. How suitable – or not suitable – is LTAF for ASP.NET MVC websites? If it is, what considerations, if any, need to be made?

  5. @oskar — great question! LTAF should work fine with MVC. I haven’t tried it – but my understanding is that the ASP.NET QA team uses (a modified version) of LTAF to do all of their testing of ASP.NET MVC and ASP.NET Web Forms.

  6. @Mukhtar — Thanks for your interest in Microsoft AJAX + ACT. We are planning to publish a roadmap soon.

  7. Ted says:

    FYI to anyone interested – the AJAX Control Toolkit already has a ton of tests written against this framework. They’re not included in the main download, but you’ll see them in the Testing.Client project if you get the source code for any of the checkins. Here’s part of the test suite for the Accordion control to peruse if you’re interested: ajaxcontroltoolkit.codeplex.com/…/56007#346578

  8. liping says:

    He and his wow gold aids now withdrew behind the curtain: the other party, whichwow gold was headed by wow goldColonel Dent, sat down on the crescent of chairs. One of the gentlemen, Mr. Eshton, wow goldobserving me, seemedwow gold to propose that I should wow be asked to join them;wow gold but Lady Ingram wow goldinstantlywow gold negativedwow gold the notion.

  9. Do you know the aion kina, in the game you need the aion gold. It can help you increase your level. My friends always asked me how to buy aion kina, and I do not know he spend how much money to buy the aion online kina, when I see him in order to play the game and search which the place can buy thecheap aion kina. I am happy with him.

  10. edmund yau says:

    I love this ajax, but I found this control are not cooperating with nested master page very well. But it is still a great control.

    ####################################
    http://www.geocities.com/it_super_manager
    IT界最強技術王, 名字擬似:edmund yau

  11. Awek cun says:

    Ajax is the way to go. Thanks for the great control.

  12. knight gold says:

    Do you know knight gold? I like it. My brother often goes to the internet bar to buy knight noah and play it. He likes playing games using these knight online gold with his friends. One day, he give me many knight online noah. I found cheap knight goldwas so cheap.

  13. The best .NET Training.

  14. This Luna game with luna online gold is a colorful one, the graphics could seem a little childish, but do not be mistaken, the game use luna gold to play LUNA Online is advanced as a lot of new MMORPGs that you can find out where can make more luna money. Something I did not like in this game was the movement, the character moves slow and you need to buy luna gold to go through long distances sometimes, making you buy a lot of luna online money to change the Teleport scrolls just to go to the cities.

  15. kamas says:

    I think dofus kama changes my life. Because of kamas, I meet a lot of friends. Besides, my friends usually give me some cheap kamas. I usually buy dofus kamas through Internet and advice from my friends, so I gain a lot of dofus gold and harvest in life.

  16. 2moons dil says:

    [url=http://www.dil2moons.com]2moons dil[/url]
    [url=http://www.dil2moons.com]2moons gold[/url]
    [url=http://www.dil2moons.com]2moon dil[/url]
    [url=http://www.dil2moons.com]buy 2moons dil[/url]
    [url=http://www.dil2moons.com]cheap 2moons gold[/url]

  17. Great Post! Very useful information is given. Thanks for sharing.

  18. Steve Smith says:

    How nice, you have Pluralsight comment spamming your blog. Brilliant.

    I do have an actual question which is whether the LTAF tests can be run headless, as in from an automated build (CCNet, TFS, TeamCity, etc), or if they only work in the browser?

    Thanks!

  19. Ajax is the way to go. Brilliant tips

  20. Melayu Boleh says:

    Thank you. I guess AJAX is the future of .NET integration.

  21. Thanks for sharing the great tips. I always wondered how that could be achieve until i read your article.

  22. Kolbastı says:

    I will feed your RSS after this useful article. Thanks a lot.

  23. When a very miserly man nicknamed the “stingy ghost” died and went to hell,Ultra Tall Ugg Boots the Yama King reproached him, saying, “You stingy ghost! When you were alive,Sundance II Ugg Boots you clung hard to everything and wouldn’t give to anyone. Even when you saw others in poverty and misery,Classic Tall Ugg Boots you refused to offer them help. Also, you didn’t take good care of your parents, relatives or friends and let them suffer and starve.Classic Cardy Ugg Boots For your evil karma, you’ll be dumped into a pot of boiling oil.

  24. dofus says:

    Bon marche de Dofus Kamas.achat de dofus.le prix moins cher.nous vendons dofus,or de Wakfu. 24/7 appui-en-ligne et livraison rapide.Wakfu Kamas
    china: chinaserving

  25. Tim says:

    The controls are slow, ugly, amateurish, and ridiculous. A mutually exclusive check box? That’s what radio buttons are for. Opacity for a drop shadow that isn’t opaque? It changes the shadow color. WTF? Rounded corners that aren’t round? I don’t go around the net slamming peoples work but you guys have to be kidding. If you want to see a real toolkit check out EXTJS. I’m not affiliated with them but you see how it’s supposed to be done.

  26. dfvfd says:

    Poker online sign up poker account for free promotion.
    free no deposit needed have similar poker starting capital for $50 bankroll.
    Over fifty sponsor dollars with free bankroll for start play all possible $50 bankrolls.
    starting bankrolls and capital for poker bonuses need no risk information for poker, no deposit bonuses no id verify from bet poker blog.
    riet I came across another great bonus through them bankroll $50 poker . Do you want to try Full tilt room texas hold em? instant poker bonus – Poker online no deposit $45 bonus promotions.
    bonus for full tilt Poker we have. poker bonus bez depozytu tylko dokonaj za darmo.
    Ale także bez wpłaty no i titan, vulcan i party poker w promocji bez wpłaty pieniędzy to ma być poziomo mansion $50 plus 100 no id verification.
    Graj bez beponowaia pieniędzy online poker.

  27. wow gold says:

    Jackson Nurse: I Did Not Give Michael Propofol8.27Cwow power leveling,wow gold,buy wow gold

  28. cocoyu113 says:

    [url=http://www.vponsale.com/invitations/]wedding invitations[/url]
    [url=http://www.vponsale.com/invitations/]wedding invitation[/url]

  29. cocoyu113 says:

    While surfing, I came across wedding invitations this site which caught my attention. All of the invitation cards on this site were hand written.wedding invitation I found out that the cards were made with 100% recycled paper. All I had to do was make a choice of the type of card I wanted and place my order.

  30. LXJ says:

    Many peoplechristian louboutin shoes today love to collect automatic mechanical christian louboutinwatches especially vintage watches. Before 1982, most collectorssale christian louboutin focused on pocket watchesNFL Jerseys. Popular chooses where vintage watches such as gold dress pocket watches Cheap NFL Jerseysand American railroad pocket watch. After WW II, my grandfather NFL Jerseys Shopworked for the Canadian National railway .

  31. Pretty good post.Thanks for sharing this article

  32. rohan gold says:

    I heard from my friends that the rohan crone is perfect and they tell me that the rohan gold is necessary, it takes less rohan online crone and rohan online gold, besides, they also tell me so many places to rohan money.

  33. tutu says:

    M&A is wonderful.
    逆転送 is wonderful.
    屋形船 is wonderful.
    店舗デザイン is wonderful.
    整体学校 is wonderful.
    お見合いパーティー is wonderful.
    債務整理 is wonderful.
    スパ is wonderful.
    新宿 整体 is wonderful.
    過払い is wonderful.
    マカ is wonderful.
    格安航空券 国内 is wonderful.
    ブライダルエステ is wonderful.
    苗木 is wonderful.
    歌手オーディション is wonderful.
    広島 不動産 is wonderful.
    バイク便 is wonderful.
    ボイストレーニング is wonderful.
    過払い is wonderful.
    バラ is wonderful.
    顔やせ 小顔 is wonderful.
    先物取引 is wonderful.
    サイディング is wonderful.
    税理士 東京 is wonderful.
    婚活 is wonderful.
    ウェディングドレス is wonderful.
    披露宴 is wonderful.
    看護師 転職 is wonderful.
    水道工事 is wonderful.
    商標登録 is wonderful.
    電話代行 サービス is wonderful.
    ハーレー is wonderful.
    貸し事務所 is wonderful.
    異業種交流会 is wonderful.
    貸事務所 is wonderful.
    債務整理 東京 is wonderful.
    会社設立 横浜 is wonderful.
    身長を伸ばす is wonderful.
    温泉 ホテル is wonderful.
    川口市 不動産 is wonderful.
    川口市 不動産 is wonderful.
    エアコン 工事 is wonderful.
    ウェディングボード is wonderful.
    結婚式2次会 is wonderful.
    土地活用 is wonderful.
    インプラント 横浜 is wonderful.
    ゴルフ会員権 is wonderful.
    埼玉県 不動産 is wonderful.
    ベビーサイン is wonderful.
    遺言 作成
    医療ベット 買取

  34. wowgolds.org offer warcraft gold,cheap wow gold and world of warcraft gold service.You can come and have a look!Thank you!

  35. LXJ says:

    Many peoplechristian louboutin shoes today love to collect automatic mechanical christian louboutinwatches especially vintage watches. Before 1982, most collectorssale christian louboutin focused on pocket watchesNFL Jerseys. Popular chooses where vintage watches such as gold dress pocket watches Cheap NFL Jerseysand American railroad pocket watch. After WW II, my grandfather NFL Jerseys Shopworked for the Canadian National railway .StillNFL Jerseys Shop, producing hard candy Cheap NFL Jerseysdoes not involve gettingCheap MVP Jerseys the right recipe NFL MVP Jerseysbecause there are Buy christian louboutin shoesa various of components christian louboutin on salethat need to bechristian louboutin online dealt beforelouboutin shoe sale preparing themBuy christian louboutin Store.

  36. It will allow players to create characters with cheap Dragonica Gold destined for great deeds and glory on the field of battle. Sharpen your blade and prepare to unleash your inner mutation with your Dragonica Crone and the age of reckoning has begun and war is everywhere. Invade enemy lands to gain Dragonica money, besiege imposing fortresses. Dragonica Gold is that the War is everywhere in Dragonica Online. Wield devastating magic and deadly weapons can exchange to buy Dragonica Gold.

  37. buy lindens says:

    Have you heared about a game which you need use second life linden to play, and you can also borrow cheap linden from other players? But you can buy lindens, or you will lose the choice if you do not have linden dollars. If you get secondlife money, you can continue this game.

  38. As a new player , you may need some game guides or information to enhance yourself.
    fast gold world ofis one of the hardest theme for every class at the beginning . You must have a good way to manage your fast wow gold.If yor are a lucky guy ,you can earn so many instant wow gold by yourself . But if you are a not , I just find a nice way to buy wow gold cheap. If you need , you can buy wow gold instant at our website . Go to the related page and check the detailed information . Once you have any question , you can connect our customer service at any time .

  39. aoc says:

    Here is the [url=http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html]aoc gold[/url]site,[url=http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html]conan gold[/url]is the regular site. we supply [url=http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html]age of conan gold[/url].Many players like to buy [url=http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.co
    m/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html]cheap aoc gold[/url]here. They are regular customers. Regular customers buy [url=http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html” title=”http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html“>http://www.mmo4s.com/product/Age_of_Conan_gold.html]aoc money[/url] in low price.

  40. aoc says:

    I can get aoc gold cheaply,
    Yesterday i want to buy conan goldfor my brother.
    i hope him like it. i will buy age of conan gold for him
    as birthday present. i like the cheap aoc gold very much.
    I usually buy aoc money and keep it in my store.

  41. interesting article. Wondered how you do it.

  42. deli says:

    Thanks for sharing this article

  43. As a new player , you may need some game guides or information to enhance yourself.
    Rose zulyis one of the hardest theme for every class at the beginning . You must have a good way to manage your rose zulie.If yor are a lucky guy ,you can earn so many rose online zuly by yourself . But if you are a not , I just find a nice way to get rose online zulie. If you need , you can buy Arua ROSE zuly at our website . Go to the related page and check the detailed information . Once you have any question , you can connect our customer service at any time .

  44. last chaos gold says:

    My friends tell me so many websites to buy last chaos gold, nowadays, the lastchaos gold is perfect, both astchaos money and cheap lastchaos gold can we buy last chaos gold .

  45. maple mesos in the game you may or may not notice. I know vitality is very tempting in mesos. You may be feeling intelligence in cheap mesos. You are going to be getting crab pincers which like , depending on which server you are on. maple story mesos can help you get a high level in short time.

  46. qcahz says:

    Loouis Vuitton Christian Louboutin Jimmy Choo Manolo Blahnik discount louboutin

    Louis Vuitton Bags 08- Monogram watercolor Louboutin Sale louboutin

    Classic Christian Louboutin NewStyleChristianLouboutinChristian Louboutin Shoes

    Christian Louboutin Pumps Christian Louboutin Evening

    http://www.discount-christianlouboutin.com

    http://www.buylouboutin.com

    http://www.yitingbuy.com

    http://www.salelouboutin.com

    http://www.bestlouisvuitton.com

  47. chlamydien says:

    I have one suggestion for you.Sharpen your blade and prepare to unleash your inner mutation with your Dragonica Crone and the age of reckoning has begun and war is everywhere. Invade enemy lands to gain Dragonica money, besiege imposing fortresses.

  48. dfdsg says:

    After[url=http://blog.xn--gmqt35bl2a657i.tw/index.php]sex toys[/url]series,a[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=2]sex shop[/url]of,board[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=4]adult toys[/url]determined,company[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=5]adult shop[/url]past,Yahoo’s[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=13]sexy lingerie[/url]week,meetings[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=9]vibrator[/url]person,decision[url=blog.xn--gmqt35bl2a657i.tw/article_cat.php?id=9]adult products[/url]below,any[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=15]strap on[/url]share,over[url=blog.xn--gmqt35bl2a657i.tw/article_cat.php?id=7]adultshop[/url]advantage,could[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=10]dildo[/url]offer,the[url=http://blog.xn--gmqt35bl2a657i.tw/article.php?id=5]Malaysia sex toys[/url]regulators,trying[url=http://blog.xn--gmqt35bl2a657i.tw/article.php?id=4]Singapore sex toys[/url]digging,massively[url=blog.xn--gmqt35bl2a657i.tw/article.php?id=64]sex toy[/url]$31,that[url=blog.xn--gmqt35bl2a657i.tw/category.php?id=22]Condom[/url]said,takeover[url=blog.xn--gmqt35bl2a657i.tw/article_cat.php?id=8]Paradise sex toys shop[/url]battle,wooden[url=sg.88db.com/…/?PostID=1063085#]Paradise Sex Toys Adult Shop Singapore Malaysia[/url]stand,word delivery,stand,word[url=singapore.yalwa.sg/…/…-Singapore-Malaysia.html]Paradise Sex Toys Adult Shop Singapore Malaysia[/url]delivery,committed to[url=http://www.hotfrog.sg/…/Paradise-Sex-Toys-Adult-Shop...]Paradise Sex Toys Adult Shop Singapore Malaysia[/url]certain,school[url=http://blogshopr.com/20090905/shop002282]Sex Toys Shop Singapore Malaysia[/url]products,Buy[url=udn168tw.en.ec21.com/…Shop–3847995_3847996.html]Paradise Sex Toys Adult Shop Singapore Malaysia[/url]Now

  49. FR It’s lucky to know this, if it is really true. Companies tend not to realize when they create security holes from day-to-day operation.

  50. 2332 It’s lucky to know this, if it is really true. Companies tend not to realize when they create security holes from day-to-day operation.

  51. rohan crone says:

    If you like using rohan crone to play the game which needs use rohan gold, you can borrow rohan online crone from friends. Or you can buy rohan online gold, and than you use rohan money to continue the game.

  52. aion gold says:

    If some player wants to buy the requirement, he must have to buy aion kinahh first by himself. aion kinah has helped me finish many things. Because when some one player gains a little cheap aion online kinah, he needs to hand in a leader of this team. They have the capability of jumping over obstacles that are higher than their height aion gold, and have the strength to handle weapons which you can gain from a little cheap aion kinah that are bigger than themselves to make up for their small physiques.

  53. cheap Asda Story gold says:

    For a new [url=http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html]Asda Story gold[/url] player has just entered the game spend. First of all, realize the [url=http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html]Asda Story money[/url] is useful to the each new player. You only play with others and [url=http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Stor
    y_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html]buy Asda Story Gold[/url] can get happy from the game. After learned at the game world, you may found the [url=http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html” title=”http://mmogood.com/product/Asda_Story_gold.html“>http://mmogood.com/product/Asda_Story_gold.html]cheap Asda Story gold[/url] and the most basic survival skills.

  54. latale money says:

    latale online gold, I believe everyone is familiar with the game. For the latale gold, I want to say a few points. You must be able to attract firepower with latale money. Originally playing specter in the cheap latale gold is a stimulating live. Important point is that buy latale online gold which CT can hear breathing PS.

  55. As a new player , you may need some game guides or information to enhance yourself.
    Atlantica online Gold
    is one of the hardest theme for every class at the beginning . You must have a good way to manage your Atlantica Gold.If yor are a lucky guy ,you can earn so many Atlantica online money
    by yourself . But if you are a not , I just find a nice way to get cheap Atlantica online Gold. If you need , you canbuy Atlantica online Gold at our website . Go to the related page and check the detailed information . Once you have any question , you can connect our customer service at any time .

  56. I was just out of Morocco, with my thief title, wondering what I would do in between leveling up and saving Lineage 2 Adena for a Stiletto. That would be my ultimate goal of L2 Adena. The power Lineage 2 Gold is holding anything and everything. buy Lineage 2 Adena which I have thought many ways to gain gives me more momentums to continue to play again and again. There it was my purpose to gain much more L2 Gold.

  57. flyff penya says:

    Do you know the flyff penya, in the game you need the flyff money. It can help you increase your level. My friends always asked me how to buy flyff penya, and I do not know he spend how much money to buy the flyff gold, when I see him in order to play the game and search which the place can buy the cheap penya. I am happy with him.