The \cfttoctitlefont command is for typesetting the actual title of the table of contents, i.e., the word "Contents" at the top of the page, and since you have the titles option to the package, this is ignored anyway. The command you probably want to redefine is \cftchapfont for chapter titles in the TOC.
The current version of tocloft doesn't seem to support including commands that take arguments, not even at the end of the definition, and this rules out \MakeUppercase. (I could have sworn this used to work.) So here I redefine the relevant command so it does. I throw in a \nohyphens command from hyphenat.
Code: Select all
\documentclass{book}
\usepackage{hyphenat}
\usepackage[titles]{tocloft}
\renewcommand{\cftchapfont}{\normalfont\MakeUppercase}
\makeatletter
\renewcommand*{\l@chapter}[2]{%
\ifnum \c@tocdepth >\m@ne
\addpenalty{-\@highpenalty}%
\vskip \cftbeforechapskip
{\leftskip \cftchapindent\relax
\rightskip \@tocrmarg
\parfillskip -\rightskip
\parindent \cftchapindent\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima \cftchapnumwidth\relax
\let\@cftbsnum \cftchappresnum
\let\@cftasnum \cftchapaftersnum
\let\@cftasnumb \cftchapaftersnumb
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
{\cftchapfont {\nohyphens{#1}}}\nobreak
\cftchapfillnum{#2}}%
\fi}
\makeatother
\begin{document}
\tableofcontents
\clearpage
\addcontentsline{toc}{chapter}{Introduction}
\chapter*{Introduction}
\section{A section}
\chapter{Another Which I'll Make Long, Really Very Wonderfully Long So It Might Get Hyphens}
\section{Another Section}
\end{document}