# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class Item():
    NODE_RESULTS = "results"
    NODE_ITEM = "item"
    NODE_NAME = "name"
    NODE_RESULT = "result"
    NODE_DATA = "data"
    NODE_REMARK = "remark"
    NODE_LOG = "log"

    Screen_Max = 20
    def __init__(self):
        self.name = ""
        self.data = ""
        self.remark = ""
        self.result = ""
        self.screenPathList = []
        self.logPath = ""

    def getScreenNode(self):
        return "screen" #+ str(index)

class TestCase():
    #测试结果xml属性
    rootNodeName = "all"
    caseNodeName = "case"
    dependNodeName = "depend"
    resultNodeName = "result"
    scriptNodeName = "script"
    detailNodeName = "rdetail"
    logNodeName = "log"
    cnNodeName = "name"
    descNodeName = "desc"

    #用例属性
    def __init__(self):
        self.selected = True
        self.index = -1
        self.name = ""
        self.desc = ""
        self.depend = ""
        # 测试结果属性
        self.result = "no"
        self.script = ""
        self.rdetail = ""
        self.log = ""
        # 用例属性
        self.srcScript = ""

    def getCaseModel(self):
        strarr = self.srcScript.split("/")
        if strarr.__len__() == 3:
            return strarr[0]

class TestTask():
    swInfoNodeName = "SW_Information"
    testCaseNameNode = "testcase"
    caseNodeAttrFilePathLabel="filepath"
    caseNodeAttrNameLabel = "name"
    caseNodeAttrDescLabel = "desc"
    caseNodeAttrDependLabel = "depend"

    swInfoKeys = ["hardware", "SWVersion", "projectName", "projectID", "SWInclude"]
    def __init__(self):
        self.curcase = TestCase()
        self.allCase = []
        self.swInfoValue = []
        self.modelList = []

    #return 0:newmodel已经存在,不重复添加;1:newmodel不存在,添加成功
    def addTvModel(self, newmodel):
        for model in self.modelList:
            if (newmodel == model):
                return 0
        self.modelList.append(newmodel)
        return 1

    def addTestCase(self, testcase):
        self.allCase.append(testcase)
        strarr = testcase.srcScript.split("/")
        if strarr.__len__() == 3:
            self.addTvModel(strarr[0])

    def getCaseListByModel(self,modelname):
        caselist = []
        for tc in self.allCase:
            if (modelname == tc.getCaseModel()):
                #print "getCaseListByModel,tc name=", tc.name, ";desc=", tc.desc, ";Model=", tc.getCaseModel()
                caselist.append(tc)
        return caselist
    def getCaseByName(self, casename):
        for tc in self.allCase:
            if (tc.name == casename):
                return tc
        return None
    #寻找最初的依赖用例
    def checkDependTC(self, tcDepend, tcName):
        print "checkDependTC ,tcDepend=",tcDepend
        for tc in self.allCase:
            if (tc.name == tcDepend):
                return self.checkDependTC(tc.depend, tc.name)
        return tcName

    def findFirstNotExcutedCase(self):
        if (self.allCase.__len__() <= 0):
            return ""
        for tc in self.allCase:
            if (tc.result == "no"):
                return self.checkDependTC(tc.depend, tc.name)

    def findIndexByCaceName(self, caseName):
        for index in range (0, self.allCase.__len__()):
            if (self.allCase[index].name == caseName):
                return index

        return 0

    # result:Pass/Fail/no
    def getTCListByResult(self, tresult):
        cnList = []
        for tc in self.allCase:
            if (tc.result == tresult):
                self.addCaseAndDepend(cnList, tc.name)
        return cnList

    def addCaseAndDepend(self, cnList, tcname):
        tc = self.getCaseByName(tcname)
        if (tc <> None):
            self.addCaseAndDepend(cnList, tc.depend)
            cnList.append(tcname)